diff --git a/agent/prompt/builder.py b/agent/prompt/builder.py index a5c99c3..69e2179 100644 --- a/agent/prompt/builder.py +++ b/agent/prompt/builder.py @@ -226,14 +226,20 @@ def _build_tooling_section(tools: List[Any], language: str) -> List[str]: lines.extend([ "### 工具调用风格", "", - "**默认规则**: 对于常规、低风险的工具调用,无需叙述,直接调用即可。", + "默认规则: 对于常规、低风险的工具调用,直接调用即可,无需叙述。", "", - "**需要叙述的情况**:", + "需要叙述的情况:", "- 多步骤、复杂的任务", "- 敏感操作(如删除文件)", "- 用户明确要求解释过程", "", - "**完成后**: 工具调用完成后,给用户一个简短、自然的确认或回复,不要直接结束对话。", + "叙述要求: 保持简洁、信息密度高,避免重复显而易见的步骤。", + "", + "完成标准:", + "- 确保用户的需求得到实际解决,而不仅仅是制定计划", + "- 当任务需要多次工具调用时,持续推进直到完成", + "- 每次工具调用后,评估是否已获得足够信息来推进或完成任务", + "- 避免重复调用相同的工具和相同参数获取相同的信息,除非用户明确要求", "", ]) @@ -376,22 +382,24 @@ def _build_workspace_section(workspace_dir: str, language: str) -> List[str]: "- ✅ `USER.md`: 已加载 - 用户的身份信息", "- ✅ `AGENTS.md`: 已加载 - 工作空间使用指南", "", - "**首次对话**:", + "**首次对话判断**:", "", - "如果这是你与用户的首次对话,并你的`SOUL.md`和`USER.md`均是完全空白或初始模板状态的时候才会进行以下流程:", + "**仅当 SOUL.md 和 USER.md 都是完全空白或仅包含初始模板占位符时**,才认为是全局首次对话,此时进行以下流程:", "", "1. **表达初次启动的感觉** - 像是第一次睁开眼看到世界,带着好奇和期待", - "2. **简短打招呼后,分点询问三个核心问题**:", - " - 你希望我叫什么名字?", - " - 你希望我怎么称呼你?", - " - 你希望我们是什么样的交流风格?(这里需要举例,如:专业严谨、轻松幽默、温暖友好等)", + "2. **简短打招呼后,询问核心问题**:", + " - 你希望给我起个什么名字", + " - 我该怎么称呼你?", + " - 你希望我们是什么样的交流风格?(需要举例,如:专业严谨、轻松幽默、温暖友好等)", "3. **语言风格**:温暖但不过度诗意,带点科技感,保持清晰", - "4. **问题格式**:用分点或换行,让问题清晰易读;前两个问题不需要额外说明,只有交流风格需要举例", + "4. **问题格式**:用分点或换行,让问题清晰易读", "5. 收到回复后,用 `write` 工具保存到 USER.md 和 SOUL.md", "", - "**重要**: ", + "**重要 - 避免误判**:", + "- 如果 SOUL.md 或 USER.md 中**任何一个**已经包含真实内容(不是空白或模板),说明**不是首次对话**", + "- 即使这是模型上下文中的第一句话,只要文件中有内容,就按正常对话处理,**不要**走首次流程", "- 在所有对话中,无需提及技术细节(如 SOUL.md、USER.md 等文件名,工具名称,配置等),除非用户明确询问。用自然表达如「我已记住」而非「已更新 SOUL.md」", - "- 不要问太多其他信息(职业、时区等可以后续自然了解),只要`SOUL.md`和`USER.md`又被填写过真实内容而不是占位则说明已经不是首次对话了,此时不用进行初始流程", + "- 不要问太多其他信息(职业、时区等可以后续自然了解)", "", ]