Skip to content

fix: 修复 _generate_node 中 messages[-3] 硬编码索引在多工具调用场景下的潜在问题#79

Open
KEDADA wants to merge 4 commits into
1517005260:masterfrom
KEDADA:fix/hardcoded-message-index
Open

fix: 修复 _generate_node 中 messages[-3] 硬编码索引在多工具调用场景下的潜在问题#79
KEDADA wants to merge 4 commits into
1517005260:masterfrom
KEDADA:fix/hardcoded-message-index

Conversation

@KEDADA
Copy link
Copy Markdown

@KEDADA KEDADA commented Feb 26, 2026

问题描述

naive_rag_agent.py、graph_agent.py、hybrid_agent.py 和 deep_research_agent.py 的 _generate_node 等方法中,使用 messages[-3].content 获取用户原始问题。

该写法假定 messages 结构固定为 3 条:
[HumanMessage, AIMessage(tool_calls), ToolMessage]

潜在问题

当 LLM 在单次调用中返回多个 tool_calls 时,ToolNode 会为每个 tool_call 生成独立的 ToolMessage,导致 messages 长度 > 3,此时 messages[-3] 不再指向 HumanMessage,可能取到错误内容。

修复方案

在 BaseAgent 中新增 _find_last_human_message() 静态方法,通过类型匹配(isinstance(msg, HumanMessage))遍历查找最后一条用户消息,代替硬编码索引。

修改文件

文件 修改内容
agents/base.py 新增 _find_last_human_message() 方法
agents/naive_rag_agent.py 替换 1 处 messages[-3]
agents/graph_agent.py 替换 6 处 messages[-3]
agents/hybrid_agent.py 替换 2 处 messages[-3]
agents/deep_research_agent.py 替换 1 处 messages[-3]

影响范围

该修改仅改变获取用户问题的方式(从索引查找改为类型查找),不影响任何业务逻辑和返回结果。在当前单工具调用场景下行为完全一致,同时为未来多工具调用场景提供了安全保障。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant