先看现象。用 Claude 3.7 返回工具结果时 content 写成数组,里面既有文本块又有图片块,模型只复述了第一段文本,第二段完全没用上,接口返回 200 也没有报错。
原因不止一个,得分开看。工具结果的 content 数组里各块类型不同。另一种情况是客户端把数组序列化成字符串传了进去。
还有一种情况,图片块要求 base64 与 media_type 同时给。
另外,服务端只取了数组的第一个元素。
动手时先按块类型分别构造工具结果
python build_tool_result.py --text --image
提交前校验每块的必备字段
python validate_blocks.py --file tool_result.json
接着打印模型实际收到的块数量
python claude_tool.py --count-blocks
末了用只含文本的对照组验证差异
python claude_tool.py --blocks 1
改完先别撤,确认这几项。模型回答里同时引用文本与图片信息,块数量与发送一致,返回里没有内容缺失提示。
提醒一点。多段 content 不是字符串拼接,块类型写错时接口通常不报错,只是安静地丢掉那块内容。监控比日志更早给出信号,事后回看经常能提前半小时发现异常。
