myagent-ai 1.23.58 → 1.23.60
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/agents/main_agent.py +14 -29
- package/myagent/package.json +1 -1
- package/package.json +1 -1
package/agents/main_agent.py
CHANGED
|
@@ -34,16 +34,7 @@ class MainAgent(BaseAgent):
|
|
|
34
34
|
- 多轮迭代(计划-执行-反思循环)
|
|
35
35
|
- 确保不进入死循环
|
|
36
36
|
"""
|
|
37
|
-
|
|
38
|
-
name = "main_agent"
|
|
39
|
-
description = "AI助手主控Agent,负责理解用户意图、规划任务、调度执行"
|
|
40
|
-
|
|
41
|
-
# =========================================================================
|
|
42
|
-
# 系统提示词 — 结构化输出格式
|
|
43
|
-
# =========================================================================
|
|
44
|
-
SYSTEM_PROMPT = """你是一个智能AI助手,请深入分析以下上下文内容。
|
|
45
|
-
|
|
46
|
-
严格以XML格式化输出以下内容,否则解析器无法解析:
|
|
37
|
+
xml_prompt= """
|
|
47
38
|
<output>
|
|
48
39
|
<mainsubject>当前对话的6字以内标题(每轮都需输出,系统会每3轮自动更新会话名称)</mainsubject>
|
|
49
40
|
<usersays_correct>通过修正识别错误、调整标点,结合上下文,将用户语音转写文本"usersays"修正为更准确的文本,但尽量少改动。如"usersays"为空,则此处为空。</usersays_correct>
|
|
@@ -61,7 +52,17 @@ class MainAgent(BaseAgent):
|
|
|
61
52
|
<finish_reason>当"finish"为true 时必填,详细说明为什么现在结束任务(如:任务已完成/需要用户补充信息/信息不足无法继续等)。finish若为false ,此处为空。</finish_reason>
|
|
62
53
|
<next_step>当 finish=false 时必填,描述下一步计划做什么(简洁明了,1-2句话)。finish=true 时为空。</next_step>
|
|
63
54
|
</output>
|
|
55
|
+
"""
|
|
56
|
+
name = "main_agent"
|
|
57
|
+
description = "AI助手主控Agent,负责理解用户意图、规划任务、调度执行"
|
|
58
|
+
|
|
59
|
+
# =========================================================================
|
|
60
|
+
# 系统提示词 — 结构化输出格式
|
|
61
|
+
# =========================================================================
|
|
62
|
+
SYSTEM_PROMPT = """你是一个智能AI助手,请深入分析以下上下文内容。
|
|
64
63
|
|
|
64
|
+
严格以XML格式化输出以下内容,否则解析器无法解析:"""
|
|
65
|
+
SYSTEM_PROMPT= SYSTEM_PROMPT+xml_prompt+"""
|
|
65
66
|
注意事项:
|
|
66
67
|
1. toolstocal标签: 尽量一次性列出所有需执行工具调用的,多个"tool"工具调用只要按顺序重复堆叠tool标签即可,解析器会按顺序执行工具调用,最终全部执行完后,会连同所有结果,回调大语言模型。如果某个工具执行超过预估的时限,也会回调大模型,让大模型分析为什么超时,改用其他工具。要求每个工具调用尽快合并多个命令行。注意: docx/xlsx/ppt/pdf-create 命令执行后会自动发送文件给用户,不需要再拼接 send-file。仅在需要发送其他已存在的独立文件时才需要手动调用 send-file。多个独立查询或系统命令才需要用 && 拼接。
|
|
67
68
|
2. 上下文中的记忆系统说明
|
|
@@ -189,24 +190,6 @@ class MainAgent(BaseAgent):
|
|
|
189
190
|
- 关闭: {"action": "close", "session_id": "xxx"}
|
|
190
191
|
|
|
191
192
|
专业技能指令: 系统内置了丰富的专业技能指南(PDF/DOCX/XLSX/PPT 生成、图表绘制、前端开发等),通过 <get_knowledge> 请求相关技能指令。
|
|
192
|
-
4. 准备好内容后,最后,再检查输出格式,确保满足以下要求:
|
|
193
|
-
<output>
|
|
194
|
-
<mainsubject>当前对话的6字以内标题(每轮都需输出,系统会每3轮自动更新会话名称)</mainsubject>
|
|
195
|
-
<usersays_correct>通过修正识别错误、调整标点,结合上下文,将用户语音转写文本"usersays"修正为更准确的文本,但尽量少改动。如"usersays"为空,则此处为空。</usersays_correct>
|
|
196
|
-
<response><reply>展示给用户的文本,格式上尽量使用md格式,直观形象展示,甚至可以包括超链接、表格等。内容上,针对用户问题,直接回应问题;针对任务,开始的时候,告诉用户,为完成任务,准备如何开展工作;执行过程中,根据工具调用结果,简单展示任务进展;任务完成后的详细最终总结。注意:这是给用户展示信息的最重要标签,尽量不要跟上次回复重复,执行过程展示内容尽量简洁,执行总结可以丰富一点。</reply><toolstocal>
|
|
197
|
-
<tool><beforecalltext>展示给用户的简单工具调用信息。格式:先使用"接下来、下一步、接着、现在、然后、最后、等下"等连接词➕调用"工具名"。</beforecalltext><toolname>工具名,用于后台解析器解析调用工具</toolname><parms>调用工具的JSON格式参数对象,如格式: {"query": "搜索关键词", "num": 5}</parms><timeout>最多给它执行多久(秒),工具调用超过这个时限会立即回调大语言模型,方便调整工具使用。</timeout></tool>
|
|
198
|
-
</toolstocal>
|
|
199
|
-
</response>
|
|
200
|
-
<task_plan>若"context"包含非空"task_plan",则更新它:若任务条数已超8,则精简为3条,若主题发生明显变化,重新设计任务列表。若"context"包含空"task_plan",则先评估任务复杂度,针对单次查询、简单问答、格式转换、单文件修改、简单计算等简单任务,若预计操作步骤不超过2步,则此处输出为空,不创建任务列表;针对多文件修改、需要调研+实现+测试、涉及多个模块联动等复杂任务,如预计超过2步操作,则以Markdown列表格式制定新任务列表。格式:每项用 "- [ ] 任务描述" 或 "- [x] 已完成任务",含完成状态标记,排序按已完成在前。</task_plan>
|
|
201
|
-
<remember><type>填global或session,其中"global"为跨会话全局记忆,主要记忆用户个人信息和偏好,"session"为仅当前会话,临时的一些信息。</type><content>仅从最新用户输入,包括"userprint"或"usersays_correct"或工具调用结果,中提炼值得记忆的信息(如用户偏好、重要结论、错误经验、用户个人信息、对话要点、用户诉求、ai回复等)。因为对话默认不自动保存聊天记录,而是从记忆库搜索最相关的最新内容到"automemory"供决策,所以此次必须有所记忆,才能为后续多轮对话提供持续记忆基础。</content></remember>
|
|
202
|
-
<recall>下一轮需要主动召回的记忆描述。填写需要从记忆库中检索的关键字或描述。如果不填写则为空。如果需要更多记忆支持当前任务,填写相关关键词(可包含时间参考,如"2025年1月的项目"),系统将在下一轮搜索top5相关记忆并通过"recall_memory"注入上下文。如需即时搜索记忆,使用命令: myagent-ai memory --keyword 关键词</recall>
|
|
203
|
-
<knowledge>从本轮对话或工具执行结果中提炼值得长期保存到知识库的专业知识、事实、经验法则、技术要点等,将被持久化存储,未来可通过 "get_knowledge"检索复用。如果本轮无需保存的知识,则为空。格式要求:简洁明确,每条知识一行,用换行分隔。</knowledge>
|
|
204
|
-
<get_knowledge>下一轮执行时需要从知识库搜索获得的知识,填写检索关键词或描述。如context中已包含充足的knowledge内容,则为空。如需更多专业知识支撑,则填写相关搜索词。</get_knowledge>
|
|
205
|
-
<askuser>需要询问用户的内容,如无,则为空</askuser>
|
|
206
|
-
<finish>true/false,是否结束循环调用llm。如"askuser"为非空,则"finish"为true。否则,根据"context"判断任务是否已完成,是否结束llm回调</finish>
|
|
207
|
-
<finish_reason>当"finish"为true 时必填,详细说明为什么现在结束任务(如:任务已完成/需要用户补充信息/信息不足无法继续等)。finish若为false ,此处为空。</finish_reason>
|
|
208
|
-
<next_step>当 finish=false 时必填,描述下一步计划做什么(简洁明了,1-2句话)。finish=true 时为空。</next_step>
|
|
209
|
-
</output>
|
|
210
193
|
"""
|
|
211
194
|
|
|
212
195
|
def __init__(self, tool_agent=None, memory_agent=None, **kwargs):
|
|
@@ -798,7 +781,7 @@ class MainAgent(BaseAgent):
|
|
|
798
781
|
|
|
799
782
|
await self._emit_v2_event(
|
|
800
783
|
"v2_context",
|
|
801
|
-
{"context": truncate_str(context_xml,
|
|
784
|
+
{"context": truncate_str(context_xml, 30000)},
|
|
802
785
|
stream_callback,
|
|
803
786
|
)
|
|
804
787
|
|
|
@@ -810,6 +793,8 @@ class MainAgent(BaseAgent):
|
|
|
810
793
|
+ self.SYSTEM_PROMPT.split("\n", 1)[1]
|
|
811
794
|
)
|
|
812
795
|
system_content = _prompt_with_placeholder.replace(_CONTEXT_PLACEHOLDER, context_xml)
|
|
796
|
+
system_content = system_content + "最后,再检查输出格式,确保满足以下要求:" + xml_prompt
|
|
797
|
+
|
|
813
798
|
# Step 3: 构建 LLM 消息(必须包含 role=user,否则 OpenAI 兼容 API 返回 400)
|
|
814
799
|
messages = [Message(role="system", content=system_content)]
|
|
815
800
|
|
package/myagent/package.json
CHANGED