主 Agent 调子 Agent,子 Agent 内部又并行调了两个工具,回填时把内层的 tool_call_id 直接提到外层,接口报 400,原文 No tool call found for tool_call_id call_abc。
一开始怀疑是「并行调用时 id 没有和工具名绑定」,查了一圈,方向不对。
这类报错背后常见的原因有几处,逐个排除就行。内外层 tool_call_id 属于不同会话 不能混用。少数情况下是子 Agent 直接复用了父级的消息列表。
少数情况下是回填顺序与请求顺序不一致。
先打印每层消息里 id 与 name 的对应关系
python -c "import json;m=json.load(open('msgs.json'));print([(x.get('tool_call_id'),x.get('name')) for x in m])"
给子 Agent 单独维护消息栈
python -c "print('isolate child message stack')"
然后按 id 建映射表再回填
python fill.py --map id_name.json --in results.jsonl
末了用两工具并行场景回归
python eval_agent.py --case parallel_two
我习惯把每一步的执行时间和结果记在一边,后面复盘省事。
改完先别撤,确认这几项。回填不再报 id 找不到,两个工具的结果各归各位,最终答案里两个订单号都正确。
提醒一点。id 只在会话内唯一,跨层复用看着能跑通,一旦并行就会错位,隔离消息栈最省事。报错文案容易误导,真正的原因往往在相邻那一层的日志里。
