网易首页 > 网易号 > 正文 申请入驻

ollama v0.23.4更新:Vision图像输入全面支持,Claude本地图片路径工具结果修复,OpenCode集成大升级

0
分享至




ollama v0.23.4 于 2026年5月14日发布,这次版本更新虽然只有 2 个 commit,但实际涉及 18 个文件、815 行新增、109 行删除,改动集中在两个核心方向:一是 launch/opencode 终于支持 vision models 的 image inputs;二是修复了 Claude 在使用本地图片路径时 tool results 的格式问题。对于经常使用 Ollama 做多模态推理、以及通过 OpenCode 进行模型接入和编辑的用户来说,这次更新非常关键,属于“看起来是小版本,实际上体验变化很大”的一次升级。

一、v0.23.4 发布概览

本次更新信息如下:

  • • 版本:v0.23.4

  • • 发布日期:2026年5月14日

  • • 变更说明:

    • • ollama launch opencode now supports vision models with image inputs

    • • Fixed formatting of Claude tool results when using local image paths

从提交记录看,主要是两项变化:

  1. 1. anthropic:保留 Claude 本地图片路径的 tool results 在 renderer 中的格式

  2. 2. launch/opencode:为 vision models 增加 image modalities 支持

也就是说,这次更新不是单纯补丁,而是同时覆盖了 Anthropic 适配、OpenCode 启动器、多个模型 renderer、server prompt 处理逻辑,以及大量单元测试。

二、核心更新一:OpenCode 现在支持 vision models 的 image inputs

这是这次更新里最受关注的部分。

1. OpenCode 配置构建逻辑升级

cmd/launch/opencode.go中,buildInlineConfigbuildModelEntries都发生了变化。过去构建 OpenCode 的 inline config 时,只是简单把模型列表写进去,而这次新增了通过api.ClientFromEnvironment()获取客户端,并尝试调用client.Show()去探测模型能力。

如果客户端可用,就会在构建模型条目时判断该模型是否具备vision能力;如果具备,就给模型补上:

  • modalities.input = ["text", "image"]

  • modalities.output = ["text"]

这意味着 OpenCode 在对接 Ollama 模型时,不再只是把它当成纯文本模型,而是可以把视觉输入能力显式告诉上层配置。

2. 视觉能力探测采用 Show API

新增逻辑中,构建模型条目时会对每个模型执行一次Show请求,读取返回的Capabilities。当能力列表中包含vision时,就自动写入图像输入模态。

这部分实现还有一个重要细节:引入了openCodeModelShowTimeout = 2 * time.Second,并且在buildModelEntries中为所有模型探测共享一个超时预算。

换句话说,多个模型一起探测时,不会每个都无限等待,而是共享同一个上下文时间窗口,避免 OpenCode 配置构建被拖慢。

3. 模型限额逻辑保持兼容

本次修改还保留了云模型限额逻辑:

  • • 如果是云模型名称

  • • 就继续通过lookupCloudModelLimit补充limit.context

  • limit.output

也就是说,新加的 vision modalities 不会破坏原有的 cloud model 配置能力。

三、OpenCode 相关测试大幅增强

这次更新在cmd/launch/opencode_test.go中增加了大量测试,说明这项改动不是简单接入,而是经过了完整验证。

1. 视觉模型获得 image input modalities

新增测试验证:当client.Show()返回capabilities=["vision"]时,buildModelEntries会为模型写入:

  • modalities.input = ["text", "image"]

  • modalities.output = ["text"]

测试中对gemma4:26b做了模拟返回,确认配置完全符合预期。

2. 当无法探测能力时保持默认行为

新增测试还验证了:

  • • 如果没有 API client

  • • 就不设置modalities

  • • 只保留默认name

这说明新逻辑是渐进增强,不会影响非 vision 场景。

3. 多模型共享超时预算

还有一个很重要的测试:

  • • 构造两个慢请求模型

  • • 使用context.WithTimeout

  • • 验证共享超时只会阻塞一个探测流程

这说明新增的 capability probe 逻辑在性能和资源控制上考虑得很细。

四、核心更新二:Claude 本地图片路径的 tool results 格式修复

第二个 changelog 点是:

  • • Fixed formatting of Claude tool results when using local image paths

这部分对应anthropic/anthropic.go的修改。

1. 新增 OutputConfig

MessagesRequest中新增了:

  • OutputConfig *OutputConfig

其中OutputConfig定义了:

  • Effort string

这说明 Anthropic 请求结构里现在可以携带输出努力等级,并且会参与 think 值的转换。

2. Think 逻辑调整

FromMessagesRequest中新增了对OutputConfig.Effort的归一化处理:

  • • 去空格

  • • 转小写

  • • 把xhigh映射到high

然后根据逻辑决定ThinkValue

  • Thinking.Type == "enabled"时,think = true

  • Thinking.Type == "disabled"时,think = false

  • • 如果没显式设置 Thinking,就从OutputConfig.Effort映射为:

    • high

    • medium

    • low

    • max

这说明本次更新不仅修了 tool result,也顺带把 thinking/output_config 的兼容性做完整了。

3. 图片源结构调整

ImageSource结构也发生了变化:

  • • 去掉了原先对"url"的支持提示

  • • 当前仅保留"base64"

并且新增resolveImageSource

  • • 只允许base64

  • • 解码失败就报错

  • • 统一从 base64 解析 image data

这与本次“本地图片路径 tool results”修复相关,因为工具结果里如果带图片内容,需要能正确转换成内部图像数据。

4. 新增 convertToolResultContent

这是本次修复最关键的函数之一。

convertToolResultContent(content any)支持三类内容:

  • nil

  • string

  • []any

当 content 是数组时,会逐项解析:

  • type = "text":拼接文本

  • type = "image":读取source,解析 base64 图片,加入 images

最终返回:

  • • 文本内容

  • • 图片列表

  • • 错误

这就让 tool_result 不再只能是纯文本,而是可以保留图片结果。

5. tool_result 处理方式更合理

convertMessage中,tool_result的处理逻辑也升级了:

  • • 先统计 tool result block 数量

  • • 调用convertToolResultContent

  • • 将结果转成api.Message{Role: "tool"}

  • • 填充Content

  • • 填充Images

  • • 填充ToolCallID

同时还修复了 user message 和 tool results 的拼接顺序,避免在用户消息中包含工具结果时丢失内容或重复内容。

五、Anthropic 相关测试新增,确保 tool_result 图片可用

anthropic/anthropic_test.go新增的测试很多,说明这个修复是有明确回归保护的。

1. tool_result 携带图片

新增测试TestFromMessagesRequest_WithToolResultImage验证:

  • • tool_result 内容可以是数组

  • • 数组中同时包含:

    • • text

    • • image

  • • image 源使用base64

  • • 解析后:

    • Roletool

    • ToolCallID保留

    • Content是文本部分

    • Images数量正确

    • • 图像字节与原始 base64 解码结果一致

2. tool_result 后面接 user 文本

另一个测试验证:

  • • assistant 先发 tool_use

  • • user 再发 tool_result

  • • 同时还有普通文本

最终转换后:

  • • tool message 保留

  • • user message 也保留

  • • 顺序正确

这类测试很重要,因为它直接对应了“本地图片路径工具结果格式”这类复杂场景,避免数据在中间层丢失。

3. output_config 和 thinking 的交互

新增的几组测试分别验证:

  • OutputConfig.Effort = high时,think 设为 high

  • OutputConfig.Effort = xhigh也会映射成 high

  • Thinking.disabled会覆盖 output_config

  • Thinking.adaptive会继续使用 output_config 努力等级

也就是说,这次更新不只是修图像,连输出控制逻辑也一并校准了。

六、renderer 层统一支持 image tags 与 tool response 图像渲染

这次更新不仅改了 Anthropic 和 OpenCode,还大范围触及了多个 renderer。

整体方向非常明确:让各种模型 renderer 在处理图像时,既能支持原始视觉格式,也能支持[img-x]这种统一占位符风格,并且保证 tool response 中的图像不会被漏掉。

1. 新增 image_tags 统一辅助函数

新增文件model/renderers/image_tags.go,提供:

  • renderContentWithImageTags(content, imageCount, imageOffset)

它的逻辑可以概括为:

  • • 如果没有图片,直接返回原内容

  • • 如果内容里已经包含[img-,则视为已编号占位符,直接保持

  • • 如果内容中有[img],就按顺序替换成[img-0]、[img-1]...

  • • 如果没有占位符,就把图片标签前置

  • • 若前置标签后面紧跟非空白文本,则自动补一个空格

  • • 返回新内容和新的 imageOffset

这个工具函数的意义很大,因为它统一了多个 renderer 的图像占位符行为。

2. 新增 image_tags 单元测试

model/renderers/image_tags_test.go覆盖了多个典型场景:

  • • 没有占位符时前置图片标签

  • [img]依次替换成[img-3][img-4]

  • • 图片多于占位符时,剩余图片继续前置

  • • 占位符多于图片时,剩余占位符保持原样

  • • 已经编号的占位符不重复改写

这组测试说明统一图像标签逻辑已经进入稳定阶段。

七、Gemma4、GLM-OCR、LFM2、Nemotron3Nano、Qwen35、Qwen3VL 渲染逻辑同步调整

本次更新中,多个 renderer 都做了相同方向的优化:统一调用renderContentWithImageTags,并修正 tool response 和图片内容渲染。

1. Gemma4 Renderer

model/renderers/gemma4.go中,tool response 的渲染不再直接写loopMessages[k].Content,而是调用renderToolResponseContent

同时renderContent在图片存在且使用 img tags 时,会先输出[img-x],再拼接内容,并在必要时补空格。

这解决了图像和文本拼接时的格式问题。

2. GLM-OCR Renderer

model/renderers/glmocr.go调整后:

  • renderContent直接依赖renderContentWithImageTags

  • Render中 tool response 部分使用渲染后的 content,而不是原始 message.Content

测试也同步调整为:

  • [img-0] Describe this image.

  • [img-0][img-1] Describe these images.

注意空格变化,这正是这次格式修正的一部分。

3. LFM2 Renderer

model/renderers/lfm2.go中,图片内容处理逻辑简化,借助统一 helper 做 image tag 处理,并修正了原先文本和图片拼接时的样式。

测试中同样从:

  • [img-0]Describe this image.

修正为:

  • [img-0] Describe this image.

4. Nemotron3Nano Renderer

model/renderers/nemotron3nano.go做了两类调整:

  • • tool response 渲染改为使用renderMessageContent

  • renderMessageContent内部改用统一的 image tag 处理函数

测试里也体现了空格格式调整,以及多图场景下[img-1][img-2] Compare these.的正确输出。

5. Qwen35 Renderer

model/renderers/qwen35.go中:

  • useImgTags模式下直接调用统一 helper

  • • 非 img tags 模式仍输出<|vision_start|><|image_pad|><|vision_end|>

这说明 Qwen35 仍兼容原始视觉 token,同时支持统一图片标签方案。

6. Qwen3VL Renderer

model/renderers/qwen3vl.go同样完成统一图像内容处理,并修正 tool_response 输出:

  • • 不再直接输出 message.Content

  • • 改为输出渲染后的 content

  • • 保证 tool response 中的图片标签也能正确落地

对应测试也将预期文本中的图片标签和空格样式更新为正确版本。

八、server/prompt.go 的关键改动:渲染与消息内容分离

这次更新对server/prompt.go的改动也很关键。

过去在 prompt 构建过程中,消息内容会直接被修改;而现在做了更稳妥的处理:

  • • 先复制一份msgsrenderMsgs

  • • 在渲染流程中,如果是 renderer 模式,就修改renderMsgs

  • • 原始msgs尽量保持不变

这样做的好处是:

  1. 1. 避免原始消息被渲染逻辑污染

  2. 2. 更适合在不同 renderer 间复用消息

  3. 3. 在处理图像标签时,图像和文本的结构更可控

同时,prompt.go还新增了对[img]占位符的前置替换逻辑,让所有 renderer 在 prompt 生成阶段更一致。

九、server/prompt_test.go 大量新增测试,覆盖图像标签与工具图像

这次最“爆炸”的测试更新就在server/prompt_test.go

1. GLM-OCR 添加 image tags

新增测试验证:

  • • prompt 中会出现[img-0][img-1] extract text

  • • tool response 也会正确携带图片标签

2. renderer 为 tool 消息添加图片标签

新增测试覆盖以下 renderer:

  • • gemma4

  • • qwen3-vl

  • • qwen3.5

  • • glm-ocr

  • • nemotron-3-nano

测试内容包括:

  • • user 消息中的图片标签位置

  • • tool response 中的图片标签位置

  • • 多个 renderer 的输出一致性

3. 保留显式图片占位符

新增测试验证:

  • • 如果用户内容中已经有[img]

  • • 那就按顺序替换成[img-0][img-1]

  • • 不会重复插入,不会丢失

这说明占位符规则已经稳定地统一到了各个 renderer。

十、这次 v0.23.4 的实际价值

从开发者视角看,这次更新的价值主要体现在三点:

1. OpenCode 能更好地接入视觉模型

这会让 Ollama + OpenCode 的多模态使用场景更完整,vision models 不再只是“能跑”,而是能被上层工具正确识别为图像输入模型。

2. Claude 本地图片路径结果不再容易格式异常

这对工具调用、文件读取、图片输出类场景非常重要,尤其是在工具结果里混合文本和图片时,格式修复能减少很多前端展示或中间层解析问题。

3. 多个 renderer 的图像标签行为统一了

这使得:

  • • 图像占位符更一致

  • • tool response 更稳定

  • • 多图场景更清晰

  • • prompt 渲染更可预测

尤其对于需要精确控制图像插入位置的任务来说,这次更新很实用。

十一、总结

代码地址:github.com/ollama/ollama

ollama v0.23.4 不是一个简单的小修小补版本,而是围绕“多模态输入”和“工具结果图像处理”做了一次系统性增强。

本次更新的重点可以概括为:

  • • OpenCode 支持 vision models 的 image inputs

  • • Claude 本地图片路径 tool results 格式修复

  • • Anthropic 增强 tool_result 图片解析能力

  • • OutputConfig 与 Thinking 逻辑进一步统一

  • • 新增统一的 image tags 处理函数

  • • Gemma4、GLM-OCR、LFM2、Nemotron3Nano、Qwen35、Qwen3VL 等 renderer 同步优化

  • • server prompt 构建逻辑更稳健

  • • 大量测试覆盖确保行为一致


我们相信人工智能为普通人提供了一种“增强工具”,并致力于分享全方位的AI知识。在这里,您可以找到最新的AI科普文章、工具评测、提升效率的秘籍以及行业洞察。 欢迎关注“福大大架构师每日一题”,发消息可获得面试资料,让AI助力您的未来发展。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
姚笛菜市场挑选西红柿,疑向文章暗送秋波,网友刷屏盼二人复合

姚笛菜市场挑选西红柿,疑向文章暗送秋波,网友刷屏盼二人复合

娱乐E君
2026-08-07 11:10:07
蒋介石晚年最后悔的三件事,爱错一个人,杀错一个人,放错一个人

蒋介石晚年最后悔的三件事,爱错一个人,杀错一个人,放错一个人

风飘飘而吹衣
2024-12-08 14:07:17
WTT横滨冠军赛太残酷了:随着陈垣宇0-3,国乒男单军团全军覆没

WTT横滨冠军赛太残酷了:随着陈垣宇0-3,国乒男单军团全军覆没

侧身凌空斩
2026-08-07 18:39:01
森保一谈麒麟杯:对手都是世界杯队伍,是一次非常好的锻炼机会

森保一谈麒麟杯:对手都是世界杯队伍,是一次非常好的锻炼机会

懂球帝
2026-08-07 15:58:12
DEI 政策下的“黑人神话”崩塌,百年顶尖学府颜面全无

DEI 政策下的“黑人神话”崩塌,百年顶尖学府颜面全无

南文视界
2026-08-08 07:30:23
广东、河南的这三件事能同时发生,才是现实讽刺的最真实写照

广东、河南的这三件事能同时发生,才是现实讽刺的最真实写照

清书先生
2026-08-08 08:30:16
账上只剩9万5,欠债1941万!40年老牌国货倒在了2026年的夏天

账上只剩9万5,欠债1941万!40年老牌国货倒在了2026年的夏天

品牌观察官
2026-08-07 20:06:15
贺子珍病逝,上海市委建议丧事从简,贺家却说:她是中央直管干部

贺子珍病逝,上海市委建议丧事从简,贺家却说:她是中央直管干部

翠羽
2026-08-07 10:55:14
《龙餐馆》破100万,韩东君第一个包场,沈腾的号召力顶流比不了

《龙餐馆》破100万,韩东君第一个包场,沈腾的号召力顶流比不了

白公子探剧
2026-08-06 15:13:45
欧足联承认向因凡蒂诺绯闻女友支付6位数款项,主席强烈否认

欧足联承认向因凡蒂诺绯闻女友支付6位数款项,主席强烈否认

甜度百分百21
2026-08-08 06:17:14
你经历过最尴尬的事是啥?网友:虽然辣眼睛,但真的爱看哦

你经历过最尴尬的事是啥?网友:虽然辣眼睛,但真的爱看哦

解读热点事件
2026-08-04 00:05:09
撒贝宁问龙洋想嫁谁?她的回答太绝,世上怕没这男人

撒贝宁问龙洋想嫁谁?她的回答太绝,世上怕没这男人

乡野小珥
2026-08-07 13:39:23
中国女篮70-67,球员评分,张子宇最佳,刘禹彤唐子婷首发不及格

中国女篮70-67,球员评分,张子宇最佳,刘禹彤唐子婷首发不及格

南海浪花
2026-08-07 21:38:23
陈赓葬礼上动人一幕:陈锡联不站将帅队列,甘愿以家属身份送别

陈赓葬礼上动人一幕:陈锡联不站将帅队列,甘愿以家属身份送别

时光流转追梦人
2026-08-08 07:24:54
争议华人裁判身份被扒!祖籍中国闽粤,曾多次做出对国乒不利判罚

争议华人裁判身份被扒!祖籍中国闽粤,曾多次做出对国乒不利判罚

悠悠说世界
2026-08-07 21:19:23
宏远早报!小陈总无奈决定,周鹏圆梦顶薪,焦泊乔崔永熙心里话!

宏远早报!小陈总无奈决定,周鹏圆梦顶薪,焦泊乔崔永熙心里话!

体坛卡卡说
2026-08-08 06:35:38
湖人随队记者爆料:布朗尼・詹姆斯存在常规赛开赛前被裁的可能性

湖人随队记者爆料:布朗尼・詹姆斯存在常规赛开赛前被裁的可能性

夜白侃球
2026-08-07 11:09:14
人口告别世界第一?催生“二孩”无效后,国家终于向住房出手了!

人口告别世界第一?催生“二孩”无效后,国家终于向住房出手了!

混沌录
2026-05-30 23:41:14
陌生电话打进来千万别按红色挂断,手机这个隐秘操作才是“救星”

陌生电话打进来千万别按红色挂断,手机这个隐秘操作才是“救星”

小怪吃美食
2026-08-08 06:07:31
为什么年轻人不怕没下一代?

为什么年轻人不怕没下一代?

罗sir财话
2026-08-06 15:46:34
2026-08-08 09:23:00
moonfdd incentive-icons
moonfdd
福大大架构师每日一题
1380文章数 78关注度
往期回顾 全部

科技要闻

突然涨价,"只收电费钱"的梁文锋,变了吗

头条要闻

超360个问题 投资者涌进宇树交流会提问王兴兴

头条要闻

超360个问题 投资者涌进宇树交流会提问王兴兴

体育要闻

去年信誓旦旦3000万 今年NBA查无此人

娱乐要闻

周也热恋结束,六个字暴露单身状态

财经要闻

一枚“回旋镖”,击中王思聪

汽车要闻

越7全球首秀 传祺开始进攻方盒子越野

态度原创

房产
本地
时尚
健康
公开课

房产要闻

单日狂卖35亿!两大央企重仓,三亚土拍又爆了!

本地新闻

课本里的童年,绍兴正上演

夏天穿彩色真的很合适,不沉闷、不老套,高级养眼有时尚感

打干细胞会不会诱发癌症?

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版