xbot 支持把图片真实送进多模态模型(GPT-4o / Claude / GLM-4V 等)的视觉上下文——用户上传的图、飞书消息里的图、模型自己用 view_image 工具看的图,走同一条管道。
Important视觉开关是纯手动的 per-model 配置——没有内置模型名白名单。每个模型在「设置 → LLM → 模型」里单独开启「视觉输入」,只有你说了算。
- 打开 设置 → LLM 控制台,展开订阅找到目标模型行
- 点击模型行的编辑(
E或编辑按钮)打开模型配置 - 打开 「视觉输入(多模态)」 开关
- (可选)选择分辨率档位:自动 / 低分辨率(省 token)/ 高分辨率——这是 OpenAI
image_url.detail提示;低分辨率一张图约 85 token,高分辨率约 765+ token - 保存
开启后模型列表的该模型行会显示 👁 视觉 徽标(CLI 模型面板 Ctrl+N 同样显示 👁)。
未开启视觉的模型收到图片时不会报错:图片以 [图片: 名称 — 当前模型未开启视觉输入] 文本占位传递,模型知道有图但看不到,并会提示你开启。
- 粘贴 / 拖拽 / 文件选择:粘贴截图或拖入图片文件,上传后出现在输入框附件区(带进度条),编辑器内同时插入内联预览
- 上传的图片在消息里以缩略图渲染,点击可放大查看(Lightbox 全屏 + 打开原图)
- 当前模型未开启视觉时,附件区上方会出现琥珀色提示条提醒你(不阻断发送——图片仍会作为文件名占位发送)
每次请求最多 8 张 图片进入视觉上下文(最近的优先,旧图自动降级为文本占位)。图片在发送前会被服务端预处理:最长边缩放到 2048px 以内、压缩到 4MB 以内——原始文件不受影响,只是发给模型的版本被优化。
模型可以用 view_image 工具把自己环境里的图片放进上下文:
- 分析 Python 生成的图表、检查下载的图片、对比截图
- 参数:
path(工作区内的本地路径)或url(http/https 图片地址) - 工具会读取图片、存储、并注入到下一轮的视觉上下文(消息流里显示为 📷 注入的图片)
用户:帮我看看 chart.png 画得对不对
模型:(调用 view_image path=chart.png)
📷 以下图片已通过 view_image 工具加载,可直接进行视觉分析
模型:这张图的 Y 轴刻度有 3 处重复……
在飞书对话里直接发图片:xbot 自动下载并注入视觉上下文(存入 view_images 持久目录),与 Web 上传走同一管道。下载失败时降级为文件标签(消息不丢)。
png / jpeg / gif / webp / bmp / tiff(bmp 和 tiff 自动转 png;gif 保持原样——动图不抽帧)。HEIC 等少见格式会透传,由 API 决定接受与否。
图片引用使用相对 URL(/api/files/download?key=…),签名在每次访问时现签——历史消息里的图片永不失效(旧版本里写入的绝对签名 URL 过期后显示"加载失败"占位,属预期)。
content 存稳定引用(~100B markdown)
↓ 构建请求时
llm 层解析引用 → ImageResolver → base64 data URL(LRU 缓存 32 张/128MB)
↓ vision 开启
OpenAI image_url parts / Anthropic base64 image blocks
↓ vision 关闭
[图片: 名称 — 当前模型未开启视觉输入](文本占位,请求不会失败)
- 图片 token 消耗由 API 返回的
prompt_tokens真实计量(上下文条 / 压缩决策天然正确) - 同一张图在多轮对话中通过 LRU 缓存复用,不重复下载
- 压缩 / 历史 / 前端渲染管道全部只接触小字符串引用,零感知