Misc. bug: whitespace is stripped from tool call parameters, producing incorrect results

用户在使用 llama-server (core library 模式)通过 tool/function calling 调用模型(如 Qwen3.6-35B-A3B)时,模型返回包含代码块或多行字符串的 tool call 参数。期望保留原始缩进和换行符,但实际输出的 JSON 参数中被去掉了第一

Misc. bug: whitespace is stripped from tool call parameters, producing incorrect results

Misc. bug: whitespace is stripped from tool call parameters, producing incorrect results

快速结论:当模型生成的工具调用参数包含前导或尾随空白(如缩进空格、换行符前的空格)时,llama-server 会错误地剥离这些空白字符,导致 JSON 输出与模型原始输出不一致。优先检查 common/chat-peg-parser.cpp 中的空白处理逻辑,或更新至已在 PR #24624 中修复此问题的最新 master 版本。

问题场景

用户在使用 llama-server(core library 模式)通过 tool/function calling 调用模型(如 Qwen3.6-35B-A3B)时,模型返回包含代码块或多行字符串的 tool call 参数。期望保留原始缩进和换行符,但实际输出的 JSON 参数中被去掉了第一个前导空格。

报错原文

Expected JSON result:
"oldstring": "    def foo():\n        return bar\n",

Actual JSON result:
"oldstring": "   def foo():\n        return bar\n"

(实际输出比期望少一个前导空格,导致逐行查找替换等精确匹配操作失败。)

原因分析

问题出在 common/chat-peg-parser.cpp 第 340-341 行的空白处理逻辑:

// 源代码位置(仅供参考,不要直接复制引用行号):
// https://github.com/ggml-org/llama.cpp/blob/ef570f63087b6a5a2930210a13f87990e8113927/common/chat-peg-parser.cpp#L340-L341

该处代码对工具调用参数执行了无条件修剪(trim),去掉了每个参数值前后的一个空白字符(包括空格和换行符)。这会导致类似 Python 代码缩进的情况丢失第一个空格。维护者在评论中确认这是一个有效 bug,并已通过 PR #24624 修复。

环境排查

  • llama.cpp 版本:确认是否在 master 分支(包含 commit ef570f6308)上复现。
  • 模型:Qwen3.6 系模型(或其他需要保留参数内缩进的模型)更容易触发。
  • 构建环境:Mac 或任何使用 llama-server 的操作系统均可复现。
  • 影响模块:libllama (core library),不依赖特定命令行参数。

解决步骤

  1. 更新至修复版本:拉取 PR #24624(已合入 master)中的修改,该 PR 改进了 chat-peg-parser.cpp 的空白处理逻辑。
  2. (备选)应用早期补丁:如果无法直接更新至最新 master,可尝试 PR #23602 中的补丁,但该补丁已被 PR #24624 取代。
  3. (可优先尝试)不要手动修改代码:如果不方便更新,作为临时工作,可在客户端收到 tool call 结果后,自行根据模型原始输出重新构建参数内容(但此方法需要客户端额外逻辑)。

验证方法

使用以下输入测试模型工具调用,确认 JSON 输出中 "oldText" 字段的值是否包含完整的 4 个前导空格:

# 期望 "oldText" 的值应为 "    def foo():\n        return bar\n"(第一行4空格,第二行8空格)
# 如果修复正确,输出应与模型原始 XML 中的缩进完全一致。

更新后运行 llama-server 并复现 Issue 中描述的 read + edit 工具链调用,检查 oldText 参数是否保留了完整的缩进。

参考来源

ggml-org/llama.cpp #23535
修复 PR #24624
早期补丁 PR #23602

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

celebrityanime
celebrityanime
文章: 14585

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注