我的代码流程:
第1轮:Joker节点 → LLM决定调用工具 → 返回 tool_calls ↓ chat_tools节点 → 执行工具 → 返回 ToolMessage(包含结果) ↓ 第2轮:Joker节点 → 检测到 ToolMessage → 解析出 tool_result ↓ 把 tool_result 传入 prompt → 再次调用 LLM但是:
✅ tool_result 变量确实有值(你解析成功了)
✅ 也确实传给了 chat_chain.ainvoke()
❌ 但是 LLM 还是又调用了工具,没有使用这个结果!
问题:
我的提示词:
你是一个多智能体 agent 助手。 规则(必须严格遵守):1. 根据用户的输入进行自然、流畅的回答。2. 如果{tool_result}不为空 → **必须直接基于 tool_result 回答,严禁再次调用任何工具!** - 即使你认为需要更多信息,也请使用 tool_result 中的内容进行推算或回答。 - 示例:如果 tool_result 是"当前时间:2026 年 05 月 02 日 星期六",用户问"明天星期几",你应该直接回答"明天是星期日",而不是再次查询时间!3. 如果{tool_result}为空,且用户询问时间、日期 → 调用 get_current_time 工具。4. 严格执行任务:{task_desc}5. 如果有反思建议,请参考修正:{problem}{suggestion}【重要】tool_result 的值如下:{tool_result}请基于上述 tool_result 的内容直接回答用户问题,不要再次调用工具!问题1:占位符替换后的实际内容
当 tool_result = “当前时间:2026年05月02日” 时,提示词变成:
当前时间:2026年05月02日 不为空 → **必须直接基于 tool_result 回答...**你是一个多智能体 agent 助手。 【工具执行结果】 tool_result = "{tool_result}" 规则(必须严格遵守): 1. 如果 tool_result 不为空(即上面显示了具体内容): - ✅ 必须直接使用 tool_result 的内容回答用户 - ❌ 严禁再次调用任何工具 - 示例:tool_result="当前时间:2026年05月02日 星期六",用户问"明天星期几" → 你应该回答:"明天是星期日"(基于已有信息推算) → 绝对不能再次调用 get_current_time! 2. 如果 tool_result 为空(即上面显示为空字符串): - 且用户询问时间、日期 → 调用 get_current_time 工具 - 其他情况 → 直接回答 3. 严格执行任务:{task_desc} 4. 如果有反思建议,请参考修正:{problem} {suggestion}