@yandy0725/pi-vision-tools

extensionmaintained

pi package adding a describe_image tool that lets non-multimodal models delegate image analysis to a vision model

by · v0.2.0 · published 1w ago

$ pi install npm:@yandy0725/pi-vision-tools
downloads/mo
0
stars
6
last push
2d ago
open issues
1

Signals

license: MITtestspi manifest: missinginstall size: —deps: 0peer deps: 0

Download trend

No downloads in the last 12 weeks.

README

pi-vision-tools

让非多模态模型通过委托给配置好的视觉模型来分析图像。提供一个 describe_image 工具 + /vision 命令。

功能

  • 一个工具describe_image),将图像 + 提示词发送给支持视觉的模型,并将文本结果返回给调用方模型
  • 调用方模型按需控制成本/质量compress(开关)、reasoning(从 off 到 xhigh)以及提示词本身——无需预配置
  • 按调用方模型模态自动开关:如果当前模型已支持图像输入,工具自动禁用;否则启用
  • 页脚指示器👁 provider/model),在工具激活且视觉模型已配置时可见
  • 无需 /reload:配置更改即时生效

工作原理

调用方模型  →  describe_image  →  视觉模型  →  文本返回给调用方模型
(无视觉能力)     (图像+提示词)      (能看图像)
  1. 调用方模型调用 describe_image,传入图像和提示词
  2. 工具解码图像,可选使用 sharp 压缩,然后调用配置好的视觉模型
  3. 视觉模型的文本回答作为工具结果返回

前缀缓存

切换模型时自身的 prefix cache 已因 model 变化而失效,setActiveTools 增删 describe_image 只是新 model 系统提示的正常组成部分,不会额外造成 cache 抖动。

对同一个 model,tool 列表是确定的(无视觉一定带 describe_image,有视觉一定不带),所以中间切换到其他 model 再切回来时,前缀内容与先前一致,仍然能命中原有缓存。

安装

pi install npm:@yandy0725/pi-vision-tools

或在 ~/.pi/agent/settings.json 中添加:

{
  "packages": ["npm:@yandy0725/pi-vision-tools"]
}

配置

/vision 命令

命令功能
/vision/vision status显示当前配置:provider/model、启用状态、生效开关、调用方模型是否支持视觉
/vision config provider <p>设置视觉模型提供商(如 openaianthropic
/vision config model <m>设置视觉模型 ID(如 gpt-4oclaude-sonnet-4-20250514
/vision config default-reasoning <level>设置默认推理深度:offminimallowmediumhighxhigh
/vision on强制启用工具(即使调用方模型支持视觉)
/vision off强制禁用工具
/vision auto自动模式:仅当调用方模型不支持图像输入时启用(默认)

配置持久化到 ~/.pi/agent/vision-tools.json,即时生效——无需 /reload

可选:sharp

安装 sharp 以在发送前自动压缩图像:

npm install sharp

sharp 是可选的。没有它,图像将原样发送(不报错)。压缩会将最长边降采样至 ≤1568px,去除 alpha 通道,并转换为 JPEG 格式。

环境变量

变量默认值说明
PI_VISION_MAX_DIM1568最长边像素上限(1–10000)
PI_VISION_JPEG_QUALITY85JPEG 质量(1–100)

在任何调用中设置 compress: false 可跳过压缩,用于需要像素级精度的场景(读取坐标、检查微小 UI 元素)。

工具参考

describe_image(image_path: string, prompt: string, compress?: boolean, reasoning?: string)
参数必填默认值说明
image_path文件路径、data: URL 或原始 base64(>100 字符)
prompt给视觉模型的指令
compresstrue发送前是否压缩;设为 false 以获取像素级精度
reasoningoff推理力度:offminimallowmediumhighxhigh

示例工具调用

{
  "image_path": "/home/user/screenshot.png",
  "prompt": "请描述这张截图中看到的内容。",
  "compress": true,
  "reasoning": "high"
}

示例提示词

用途提示词
描述图像"请详细描述这张图片。"
读取坐标/位置"提交按钮的像素坐标是多少?"
提取文字(OCR)"提取这张图片中所有可见的文字。"
查找 UI 缺陷"检查这张截图中是否存在布局、对齐或文字溢出问题。"
解释图表"请逐步解释这个架构图。"
分析错误"这个错误信息是什么意思,如何修复?"

推理级别

级别适用场景
off简单描述、文字提取、基础问答
minimal快速浏览,"这是什么?"
low略多思考、中等细节
medium详细描述、UI 检查
high复杂分析、架构图、代码截图
xhigh深度推理、bug 排查、多步骤视觉谜题

支持的图像格式

支持:PNG、JPEG、GIF、WebP、BMP。

输入可以是:

  • 文件路径(/path/to/image.png./relative.png,支持 ~ 前缀)
  • data: URL(data:image/png;base64,...
  • 原始 base64(字符串 >100 字符,自动检测)

许可证

MIT