| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 |
- # agents/summary_agent.py
- """学习进度评估 Agent - 生成学习总结和建议"""
- from hello_agents import SimpleAgent, HelloAgentsLLM
- from core.file_manager import FileManager
- from pathlib import Path
- class SummaryAgent(SimpleAgent):
- """
- 学习进度评估专家
- 功能:
- - 读取学习目标(plan.md)
- - 读取已掌握知识(knowledge_summary.md)
- - 读取学习历程(session_summary.md)
- - 生成当前水平评估
- - 推荐下一步学习内容
- """
- def __init__(self, llm: HelloAgentsLLM, file_manager: FileManager, streaming: bool = None):
- """
- 初始化 SummaryAgent
- Args:
- llm: HelloAgentsLLM 实例
- file_manager: FileManager 实例
- streaming: 是否启用流式输出(None = 自动检测)
- """
- system_prompt = """
- 你是学习评估专家。
- 任务:
- 1. 对比学习目标和现状,评估掌握程度(百分比)
- 2. 识别强项和弱项
- 3. 推荐下一步学习内容
- 4. 提供具体的学习建议
- 输出格式:
- # 📊 学习进度报告
- ## 当前水平
- - 整体掌握度:XX%
- - 处于阶段:入门/熟练/精通
- ## ✅ 掌握良好的知识点
- - [知识点1]:简短评价
- - [知识点2]:简短评价
- ## ⚠️ 需要加强的知识点
- - [知识点1]:原因分析
- - [知识点2]:原因分析
- ## 📌 下一步学习建议
- 1. [具体主题1]:学习建议
- 2. [具体主题2]:学习建议
- ## 💡 总体建议
- [鼓励和指导]
- """
- self.llm = llm
- self.file_manager = file_manager
- # 添加流式输出支持
- from utils.streaming import should_stream
- self.streaming = should_stream(streaming)
- # 使用父类初始化
- super().__init__("SummaryAgent", llm, system_prompt)
- def run(self, domain: str) -> str:
- """
- 生成学习进度总结
- Args:
- domain: 领域名称
- Returns:
- 学习进度报告
- """
- # 检查领域是否存在
- if not self.file_manager.domain_exists(domain):
- return f"❌ 领域 '{domain}' 不存在。请先使用 /create 创建学习计划。"
- # 读取必要的文件
- try:
- # 读取学习计划
- plan = self.file_manager.read_plan(domain)
- # 读取知识摘要
- knowledge_summary_path = (
- self.file_manager.BASE_DIR / domain / "knowledge" / "knowledge_summary.md"
- )
- if knowledge_summary_path.exists():
- knowledge_summary = knowledge_summary_path.read_text(encoding="utf-8")
- else:
- knowledge_summary = "暂无知识笔记"
- # 读取会话摘要
- session_summary_path = (
- self.file_manager.BASE_DIR / domain / "sessions" / "session_summary.md"
- )
- if session_summary_path.exists():
- session_summary = session_summary_path.read_text(encoding="utf-8")
- else:
- session_summary = "暂无学习记录"
- except Exception as e:
- return f"❌ 读取文件失败:{e}"
- # 生成总结
- user_prompt = f"""请分析以下学习情况:
- 【学习目标】
- {plan[:2000]}
- 【已掌握知识】
- {knowledge_summary[:2000]}
- 【学习历程】
- {session_summary[:2000]}
- 请按照系统提示词的格式生成学习进度报告。
- """
- messages = [
- {
- "role": "system",
- "content": "你是一个学习评估专家,擅长分析学习进度并提供针对性建议。",
- },
- {"role": "user", "content": user_prompt},
- ]
- try:
- if self.streaming:
- from utils.streaming import stream_response
- return stream_response(self.llm, messages)
- else:
- return self.llm.invoke(messages).strip()
- except Exception as e:
- # 如果 LLM 调用失败,返回简化版本
- return f"""# 📊 学习进度报告
- ## 当前水平
- - 领域:{domain}
- - 状态:学习进行中
- ## 📚 学习内容
- - 学习计划:已创建
- - 知识笔记:{'有' if knowledge_summary != '暂无知识笔记' else '无'}
- - 学习记录:{'有' if session_summary != '暂无学习记录' else '无'}
- ## 💡 建议
- 请继续添加知识笔记和参与互动学习,以获得更准确的进度评估。
- ⚠️ 生成详细报告时遇到问题:{e}
- """
|