Skip to content

识图模型工具已实现,测试全部通过 - #14

Open
opencode-agent[bot] wants to merge 1 commit into
masterfrom
opencode/issue6-20260901123307
Open

识图模型工具已实现,测试全部通过#14
opencode-agent[bot] wants to merge 1 commit into
masterfrom
opencode/issue6-20260901123307

Conversation

@opencode-agent

@opencode-agent opencode-agent Bot commented Sep 1, 2026

Copy link
Copy Markdown

Implementation complete. Here's a summary of what was done for this issue.

问题与方案

痛点:当主模型没有图片输入能力时(如 deepseek 等纯文本模型),现有唯一的识图路径 look_at 会把图片块回塞给主模型,完全不可用。

核心思路:把识图能力抽象成一个独立、可配置的后端模型,并以工具形式暴露给主 Agent——主 Agent 调用 secagent__look_at_image(path, prompt),由独立的识图子模型返回文字,图片永远不会回传给无视觉的主模型。

改动内容

配置层

  • src/types.tsSecAgentConfig.defaultsSettingsPayload 新增 visionModelId
  • src/config.ts
    • 新增 OFFICIAL_VISION_MODEL = "virtual-vision"(官方识图虚拟模型)。
    • readSettings/saveSettings 读写 visionModelId
    • 新增非破坏性解析函数 resolveModelConfig(拷贝 config 后 useConfiguredModel,不修改入参)和 resolveVisionAgentConfig(显式配置优先;官方模式下兜底 virtual-vision;模型 id 失效时安全返回 undefined)。

运行时

  • src/pi-tools.ts:抽取共享的 readImageFile(扩展名/文件/12MB 校验),look_at 与识图工具共用,行为完全一致。
  • src/system-prompt.ts:新增 VISION_SYSTEM_PROMPT(单轮、只输出答案的子模型提示词)。
  • src/runtime.tsSecAgentRuntime 新增可选 visionConfig,内部构造无工具、单轮的识图子 Agent;仅在配置了识图模型时向主 Agent 暴露 secagent__look_at_image 工具;callVision 读取图片→构造 ChatAttachment→调用子 Agent→返回 { path, name, text },emit + 审计照常且脱敏;abort signal 透传给识图子请求,停止生成可中断识图。

接线

  • src/electron/main.tsmodels:list 在官方模式放行 virtual-vision 并打 vision 标记;sessions:send 解析并传入识图配置。
  • src/index.ts:CLI openRuntime 同样传入识图配置。

渲染层

  • SettingsApp.tsx:「默认模型」旁新增「识图模型」下拉(官方模式含 virtual-vision,自定义模式可选任意已配置模型,可留空禁用)。
  • App.tsx / utils.ts / vite-env.d.ts:主模型下拉/默认选择过滤掉 virtual-vision(避免误当主 Agent),新增 isOfficialVisionModelvision/visionModelId 类型。

验证

  • npm run build(tsc + electron-vite)通过。
  • npm test:137 通过 / 1 跳过 / 0 失败。新增 8 个测试覆盖:visionModelId 持久化往返、resolveVisionAgentConfig 三种情况(显式/官方兜底/失效)、识图工具成功路径(子请求含图片 dataUrl 与 prompt)、未配置时报错、图片校验失败不调用识图模型、单轮子 Agent 的 attachments 编码。

剩余事项(仓库外)

官方中继服务需要:

  1. /models 返回 virtual-visionvirtual: true);
  2. 收到 model: "virtual-vision" 时路由到有视觉能力的上游模型——这正是 issue 里"其它虚拟模型可能有时有识图能力有时没有"的解法:客户端始终指向 virtual-vision,上游可随时调整而不影响客户端。

客户端在官方模式下即使中继尚未上线该模型,也会暴露识图工具,失败时安全降级为给主 Agent 返回错误信息,不影响整轮对话。

Closes #6

New%20session%20-%202026-09-01T12%3A33%3A06.742Z
opencode session  |  github run

Co-authored-by: PANDAJSR <PANDAJSR@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

对于没有图片输入能力的模型,希望可以接入有图片输入能力的模型作为工具,主agent可以调用这个工具

0 participants