



2026年2月28日,Ollama正式发布了版本 v0.17.4。这一版本不仅带来了两款全新的模型系列——Qwen 3.5 和 LFM 2,同时在底层解析器上进行了大幅度优化,尤其是在 工具调用索引(Tool Call Indexing) 方面实现了重要的机制升级,使并行工具调用更加稳定、更加可追踪。本次更新还明确指出,对使用 v0.17.1 的用户,此版本不会自动更新,必须重新下载才能获得最新版本的 Ollama。
在 v0.17.4 中,Ollama官方引入了两个重量级的模型家族:
这标志着 Ollama 在本地模型与云端模型之间的融合迈出了关键一步——不仅支持更大的参数规模,同时为多模态与本地推理场景提供了优化支持。
v0.17.4 的核心更新之一是:
“Tool call indices will now be included in parallel tool calls”
这意味着在进行多工具调用的场景中,每一次工具调用(Tool Call)都会带有独立且稳定的索引(Index)值。这一机制的引入,保证了多线程或流式调用环境下,调用顺序能够明确追踪,不会出现索引错乱的情况。对于需要依赖多工具协同的模型(例如 Qwen3、GLM4.6、GLM4.7 等),该功能的提升显著增强了解析的稳定性与保证测试的一致性。
本次更新涉及多个解析器文件的同步调整,包括 glm46.go、glm47.go、qwen3.go、qwen3coder.go 等。这些文件的改动主要集中在为每个工具调用分配唯一索引值的机制上,确保每次解析过程中的调用可追踪。
新增了:
callIndex int并在各类函数中加入了对该索引的初始化与自增逻辑:
• 在 Init() 方法中:
p.callIndex = 0• 在 Add() 方法中:
toolCall.Function.Index = p.callIndex
p.callIndex++通过这两个步骤,每次工具调用都会自动分配一个序号,确保调用顺序的精确管理。在进行多步思考(thinking)及多轮工具调用时,索引能够按照调用顺序依次增加,从而让后续的日志调试与数据追踪更清晰。
GLM4.7 的解析器新增了类似改动,确保 callIndex 的初始化与递增。在对应的测试文件 glm47_test.go 中,也加入了多个验证函数来确保索引机制的正确性:
例如:
TestGLM47ParserToolCallIndexingTestGLM47ParserToolCallIndexResetOnInitTestGLM47ParserToolCallIndexingStreaming这些测试都覆盖了以下关键场景:
整体测试逻辑验证了各个 Tool Call 对应 Index 值从 0 开始递增的稳定行为。
这一部分是本次更新的重点区段之一。该文件新增字段:
callIndex int并在初始化函数中加上:
p.callIndex = 0同时在工具调用解析函数中:
toolCall.Function.Index = p.callIndex
p.callIndex++该逻辑确保了 Qwen3 系列(包括 Qwen3 与 Qwen3.5)在执行工具调用时,每个工具实例都有明确的顺序编号。无论是在一次性完整输出还是流式分块输出(streaming)中,索引均能正确维护。
对应的测试文件 qwen3_test.go 中新增了多个用例:
TestQwen3ParserToolCallIndexingTestQwen3ParserToolCallIndexingStreamingTestQwen3ParserToolCallIndexResetOnInit每个测试都验证了索引的正确性。示例:
want := []api.ToolCall{
{Function: api.ToolCallFunction{Name: "first", Arguments: args(`{"a":"1"}`), Index: 0}},
{Function: api.ToolCallFunction{Name: "second", Arguments: args(`{"b":"2"}`), Index: 1}},
{Function: api.ToolCallFunction{Name: "third", Arguments: args(`{"c":"3"}`), Index: 2}},
}流式测试确保当模型输出被分成两部分进行解析时,索引依旧能够根据调用顺序准确递增。这一机制在多工具联动场景中尤为关键,可防止工具调用输出混乱。
该文件的逻辑与前述相似,主要增加了:
callIndex int并在工具调用处理逻辑中加入索引标记。其测试文件 qwen3coder_test.go 同样覆盖:
验证工具调用序列精准有序,并能在每次新的会话初始化时将索引复位,这是保证系统精确性的又一关键点。
在了解 v0.17.4 的新机制前,我们可以回顾一下前一版本 v0.17.3 的关键改动。
此前 Ollama 团队发布的 v0.17.3 主要修复了以下问题:
“Fixed issue where tool calls in the Qwen 3 and Qwen 3.5 model families would not be parsed correctly if emitted during thinking.”
即修复了 Qwen 3 与 Qwen 3.5 模型家族在思考阶段(thinking)中发出工具调用时的解析错误问题。这一问题曾导致模型在多模态推理过程中,无法正确提取工具指令。本次修复重点在解析器的 eat() 函数,处理 <think> 与 <tool_call> 标签交错的情况。
在 model/parsers/qwen3.go 中,新增了以下逻辑:
• 同步处理 <think> 与 <tool_call> 标签的关系,确保当工具标签出现在 thinking 关闭标记前时,能够正确切换状态;
• 通过比较索引位置 (toolOpenIdx 与 thinkingCloseIdx) 来判断哪一部分应优先解析;
• 新增重叠检测逻辑:
overlapLen := max(overlap(acc, qwen3ThinkingCloseTag), overlap(acc, qwen3ToolOpenTag))保证流式分块中部分标签未完整出现时,能稳定等待下一个数据块,无数据丢失。
对应测试文件 qwen3_test.go 也新增测试场景:
<tool_ca 与 ll> 时的正确识别;这些测试验证该版本的解析器在复杂思考与工具调用混合输出下的稳定性。
对应的 model/parsers/qwen3vl.go 文件中也增加了相似的逻辑优化。通过引入 max() 检查,以判断是否存在 <think> 或 <tool_call> 标签的重叠,并完善流式缓冲区处理逻辑,防止截断丢失。
测试文件 qwen3vl_thinking_test.go 验证了:
综合 v0.17.3 与 v0.17.4 的两次更新,Ollama 在模型解析器层面的核心演进可以总结为:
这些改进使得 Ollama 的工具调用能力更加可控与可追踪,尤其是对于多智能体协作场景(例如一个LLM控制多个API或函数的场景),索引机制能够帮助开发者明确区分每个调用的上下文与调用次序。
代码地址:github.com/ollama/ollama
Ollama v0.17.4 不仅是一次常规版本更新,更是一次底层数据稳定性与解析精度的全面提升。此次改动包含:
对开发者而言,使用新版 Ollama 将获得更高的调用稳定性,且多工具协同场景会更加顺畅。对于模型端来说,新的索引逻辑使推理输出更具一致性与可控性。
总结一句话:
Ollama v0.17.4 是一次从“修复”到“优化”的深度进化版本,不仅让工具调用更稳定、更可追踪,还为多模态与本地部署场景开启了新的性能维度。
·
我们相信人工智能为普通人提供了一种“增强工具”,并致力于分享全方位的AI知识。在这里,您可以找到最新的AI科普文章、工具评测、提升效率的秘籍以及行业洞察。 欢迎关注“福大大架构师每日一题”,发消息可获得面试资料,让AI助力您的未来发展。
·