本节摘要:Ollama 支持在消息里直接携带 base64 图片,让 llava、llama3.2-vision、qwen2.5vl 这类视觉模型读图作答。本节从 CLI 的一行命令讲到 API 的多图批量处理,再到三个落地场景——截图问答、图表理解、扫描件转结构化数据——并给出视觉任务的提效技巧与能力边界。
ollama pull llama3.2-vision # 或 llava / qwen2.5vl:7b ollama run llama3.2-vision "描述这张图里的架构 ./assets/arch.png" # 交互会话里也可以直接把图片文件拖进终端
API 侧把图片读成 base64 放进消息的 images 数组:
B64=$(base64 -w0 receipt.jpg) curl http://localhost:11434/api/chat -d "{ \"model\": \"qwen2.5vl:7b\", \"stream\": false, \"messages\": [{ \"role\": \"user\", \"content\": \"这张发票的总金额、开票日期、卖方名称分别是什么?\", \"images\": [\"$B64\"] }] }"
Python 版更适合批量:
import base64, json, ollama, pathlib def ask_image(model, question, *paths): imgs = [base64.b64encode(pathlib.Path(p).read_bytes()).decode() for p in paths] r = ollama.chat(model=model, stream=False, messages=[{ "role": "user", "content": question, "images": imgs}]) return r["message"]["content"] print(ask_image("qwen2.5vl:7b", "对比这两张仪表盘截图,哪些指标变化超过10%?", "monday.png", "friday.png"))
多图输入是 qwen2.5vl、llama3.2-vision 的强项,llava 旧版对多图支持有限——选型时先确认。
最轻量的用法是把截图当提问素材:报错弹窗截图问"这个错误怎么修"、设计稿截图问"这个布局用 flex 怎么写"、竞品页面截图问"表单字段有哪些"。它甚至能与 6.2 节的 Agent 循环组合——工具表加一项 screenshot(),让模型"看屏幕-决策-操作",本地自动化就有了眼睛。
视觉模型读柱状图、折线图、架构图的能力足以支撑"看图写报告"类需求,关键技巧是提问要分步。一次问"分析这张图"得到的答案泛泛;拆成三问——"横纵轴各是什么""哪几根柱子最高""给出你读到的近似数值"——准确率明显上升。对准确性要求高的报表场景,与其相信模型读数,不如把问题限定为趋势判断(涨跌、排名、异常点),数值让 OCR 或数据源直出。
把视觉能力与 4.2 节的 schema 约束组合,就是本地版的票据/表单抽取管线——全程不出内网:
SCHEMA = { "type": "object", "properties": { "vendor": {"type": "string"}, "date": {"type": "string", "pattern": r"^\d{4}-\d{2}-\d{2}$"}, "total": {"type": "number"}, "items": {"type": "array", "items": {"type": "object", "properties": {"name": {"type": "string"}, "qty": {"type": "number"}, "price": {"type": "number"}}, "required": ["name", "price"]}} }, "required": ["vendor", "date", "total"], } out = ollama.chat(model="qwen2.5vl:7b", format=SCHEMA, options={"temperature": 0}, messages=[{"role": "user", "content": "提取这张发票的全部字段,日期输出 YYYY-MM-DD", "images": [base64.b64encode(open("f.png","rb").read()).decode()]}]) record = json.loads(out["message"]["content"])
批量跑一个目录的扫描件,失败项(解析异常或置信度低)落人工复核队列,一条可审计的入库流水线就成型了。
图片预处理直接花钱买精度:分辨率方面,过小的截图适当放大,超大图按模型输入上限(llava 约 448px、新模型更高)裁切重点区域;文字密集的单据可以先裁掉页眉页脚等噪声区再问。提示词方面,"只依据图中可见内容回答,看不清就说看不清"能显著抑制幻觉。
边界也要认清:精细 OCR(整页逐字转写)用专用 OCR 引擎(PaddleOCR、Tesseract)更稳,视觉模型做"理解与抽取"而非"逐字誊写";视频理解目前不在 Ollama 的能力范围内,抽帧转图片序列是唯一替代;中文手写体识别各模型表现参差,选型时务必用自己的真实样本测一轮。
三个高级场景讲完,下一章转向把 Ollama 从"个人工具"变成"可被团队依赖的服务":网络配置、安全加固与容器化部署。