| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- # services/learning_knowledge_service.py
- from hello_agents.tools import MemoryTool, RAGTool
- from datetime import datetime
- from typing import Optional
- class LearningKnowledgeService:
- """
- 学习记忆 + 知识检索服务
- 供多智能体通过 A2A 调用
- """
- def __init__(self, user_id: str):
- self.user_id = user_id
- self.session_id = f"session_{datetime.now().strftime('%Y%m%d_%H%M%S')}"
- self.memory = MemoryTool(user_id=user_id)
- self.rag = RAGTool(rag_namespace=f"learning_{user_id}")
- self.active_learning_plan = {}
- def set_active_learning_plan(self, plan_id: str):
- self.active_learning_plan_id = plan_id
- def get_active_learning_plan(self):
- return self.active_learning_plan_id
- # ======================
- # 知识库相关
- # ======================
- def add_learning_material(self, file_path: str):
- return self.rag.run({
- "action": "add_document",
- "file_path": file_path,
- "chunk_size": 1000,
- "chunk_overlap": 200
- })
- def ask_knowledge(self, question: str):
- self._log_working_memory(f"提问: {question}")
- answer = self.rag.run({
- "action": "ask",
- "question": question,
- "limit": 5,
- "enable_advanced_search": True,
- "enable_mqe": True,
- "enable_hyde": True
- })
- self._log_episodic_memory(f"围绕问题 `{question}` 的学习")
- return answer
- # ======================
- # 记忆系统
- # ======================
- def add_note(self, content: str, concept: Optional[str] = None):
- self.memory.run({
- "action": "add",
- "content": content,
- "memory_type": "semantic",
- "importance": 0.8,
- "concept": concept or "general",
- "session_id": self.session_id
- })
- def recall(self, query: str):
- return self.memory.run({
- "action": "search",
- "query": query,
- "limit": 5
- })
- def summarize_learning(self):
- return self.memory.run({
- "action": "summary",
- "limit": 10
- })
- # ======================
- # 内部日志
- # ======================
- def _log_working_memory(self, content: str):
- self.memory.run({
- "action": "add",
- "content": content,
- "memory_type": "working",
- "importance": 0.6,
- "session_id": self.session_id
- })
- def _log_episodic_memory(self, content: str):
- self.memory.run({
- "action": "add",
- "content": content,
- "memory_type": "episodic",
- "importance": 0.7,
- "session_id": self.session_id
- })
|