#776·shell_gpt

多个 tool_calls 聚合产生损坏的输出

作者: wangengzheng创建于 2026年6月11日更新于 2026年6月11日

□ 说明

当模型在流化响应中返回多个"tool calls"时,工具调用数据会被错误地调用,导致输出不正确并导致无法可靠地解析单个函数调用.

-- -- . . .

□ 预期行为

答复应包含三个独立的工具:

• 工具1

贾森 { "函数":"执行 shell command", "论语":{ "shell command":"dotnet-version 2>/dev/null QQ回声"dotnet没有找到" {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢? {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?


• 工具2

贾森
{
"函数":"执行 shell command",
"论语":{
"shell command":"sw vers 2>/dev/null &&-uname-a" (中文(简体) ).
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?

工具 3

贾森 { "函数":"执行 shell command", "论语":{ "shell command":"ls -la *.csproj 2>/dev/null QQ 找到. -name\ *.csproj" -最大深度 3 2>/dev/null QQ头 -5" {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢? {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?


-- -- . . .

□ 实际行为

多个工具调用被合并为单个已损坏的字符串 :

页:1
执行  shell 命令
({"shell command":"dotnet-version...")).

{"shell command":"sw vers 2>/dev/null {{{同-a'}

{"shell command":"ls-la *.csproj..."〕

结果产出包括:

  • 意外重复函数名称
  • 来自不同工具的论据 组合在一起
  • 无效的 JSON 碎片
  • 被腐蚀的字符(QQM'、被损坏的引号、错误的命令字符串)
  • 失去“工具”边界

被损坏的输出示例 :

页:1 执行 shell command ({"shell command"): "dotnet-version 2>/dev/null QQ回声"dotnet没有找到"}).

{"shell command":"sw vers 2>/dev/null {{{同-a'}

{"shell command":"ls-la ^M *.csproj 2>/dev/null → 找到. ^M-name" *.csproj" -最大深度 3 2>/dev/null → 头 -5"]


-- -- . . .

□ 影响

- 无法可靠地重建来自流块的工具呼叫.
- JSON分析失败了
- 多工具执行工作流程中断。
- 工具参数可能会被不同函数调用相混合。
- 无法保证工具引用令。

-- -- . . .

□ 根源分析

流线解析器似乎不正确汇总了“delta.tool calls”。

每个流块都包含一个"工具"调用. 索引“ 识别哪个工具叫做三角洲。

示例

### 1

贾森
{
"工具 调用":[
{
"指数":0,
"函数":{
"论语":"道网".
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
[ . ]
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?

###春克 二.

贾森 { "工具 调用":[ { "指数": 1, "函数":{ "论语":"s". {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢? {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢? [ . ] {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?


3号

贾森
{
"工具 调用":[
{
"索引": 二,
"函数":{
"论语":"尔-拉".
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
[ . ]
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?

当前聚合结果

页:1 点网w vers-la


++ 预期聚合结果

贾森
{
"工具 调用":[
{
"指数":0,
"论语":"道网......
{\fn华文楷体\fs16\1cHE0E0E0}
{
"指数": 1,
"论语":"s. "
{\fn华文楷体\fs16\1cHE0E0E0}
{
"索引": 二,
"论语":"尔-拉-."
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
[ . ]
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?

-- -- . . .

□ 建议的修补

由“tool call.index”生成的串流式工具调用碎片。

实例执行

zz
. . . . . . .

内容来源: TheR1D/shell_gpt