Skip to content

AtomCode 视觉预处理(Vision Preprocessor)系统分析

持续深度分析 — 图片处理管线、视觉模型支持、配置集成 2026-06-23


1. 系统概览

1.1 源文件

crates/atomcode-core/src/vision_preprocessor.rs

1.2 用途

当使用的模型本身不支持图像输入时(可能是纯文本模型),Vision Preprocessor 通过一个专门的视觉模型(或外部 API)完成图像理解,将结果转换为文本描述,然后提供给 LLM。

用户发送图片


当前模型支持图片? ──是──▶ 直接发送到 LLM



Vision Preprocessor 激活

    ├── 使用 vision_preprocessor_provider 处理图片
    ├── 生成文本描述
    └── 将描述作为增强上下文提供给 LLM

2. 配置

2.1 配置字段

toml
# config.toml 中的配置
vision_preprocessor_provider = "<name>"

在 Config 配置中的位置:

!`$ARGUMENTS...`vision_preprocessor_provider`ui`notification`telemetry`light`theme...

2.2 错误消息

"[model] does not support image input and no vision_preprocessor_provider
 is configured. Use /model to switch to a vision-capable model, or set
 vision_preprocessor_provider in config."

当两个条件同时满足时触发:

  1. 当前模型不支持图像输入(纯文本模型)
  2. 未配置 vision_preprocessor_provider

解决方案:

  • /model 切换到支持视觉的模型
  • config.toml 中设置 vision_preprocessor_provider

3. 支持的视觉模型

3.1 内置视觉能力模型

模型类型视觉能力
claude-sonnetClaude 3.5 Sonnet✅ 原生支持
claude-opusClaude 3 Opus✅ 原生支持
claude-haikuClaude 3 Haiku✅ 原生支持
gpt-4o / gpt-4.1OpenAI✅ 原生支持
gpt-4o-miniOpenAI✅ 原生支持
o1 / o3OpenAI✅ 原生支持
gemini-*Google✅ 原生支持
deepseek-vl / deepseek-vl2DeepSeek Vision✅ 原生支持
llava开源⬜ 通过视觉预处理器
pixtralMistral✅ 原生支持
qvqQwen✅ 原生支持
qwen-vlQwen✅ 原生支持
kimiMoonshot✅ 原生支持
glm-4v智谱✅ 原生支持
minicpm-v开源⬜ 通过视觉预处理器

3.2 Vision Preprocessor Provider

当主要 LLM 为纯文本模型时的回退方案:

vision_preprocessor_provider = "provider_name"

该提供商需要指向支持视觉的模型(如 claude-sonnet, gpt-4o 等),专门用于处理图像→文本的转换。


4. TUI 中的视觉处理

从 TUI 事件枚举提取的视觉处理相关渲染事件:

rust
enum TuiRenderEvent {
    // ...
    VisionPreprocess,          // 视觉预处理开始
    VisionPreprocessSuccess,   // 视觉预处理成功
    // ...
    ImageAttachment,           // 图片附件
    // ...
}

4.1 视觉预处理生命周期

ImageAttachment 事件触发


VisionPreprocess 状态 (用户看到处理指示器)

    ├── 使用 vision_preprocessor_provider API
    ├── 分析图片内容
    └── 生成文本描述


VisionPreprocessSuccess (描述就绪)


描述文本注入到 LLM 上下文


LLM 继续生成回复

5. 图片处理管道

原始图片 (Base64)


┌─────────────────────────────────────┐
│   Vision Preprocessor                │
│                                     │
│  1. 解码 Base64 图片数据            │
│  2. 格式检测 (PNG/JPEG/WebP/GIF)   │
│  3. 大小调整(如超过模型限制)        │
│  4. 发送到视觉 API                   │
│  5. 接收文本描述                     │
│  6. 将描述插入 LLM 上下文            │
└─────────────────────────────────────┘


文本描述 → 用户消息上下文增强

6. 与现有的图片附件系统关系

ImageInput → ChatRequest/LiveMessageReq

    ├── model 支持视觉 ──▶ 直接发送图片 token

    └── model 不支持视觉

         └── vision_preprocessor_provider 已配置?

              ├── 是 ──▶ Vision Preprocessor 处理 → 文本描述

              └── 否 ──▶ 错误提示:'/model' 切换或设置配置

7. 新覆盖的盲区

#之前未覆盖的领域状态发现
1Vision Preprocessor 系统专用 Rust crate + 完整处理管线
2配置集成vision_preprocessor_provider 字段
3支持的视觉模型20+ 模型含视觉能力评估
4TUI 视觉状态VisionPreprocess / VisionPreprocessSuccess 事件
5回退机制不支持视觉时的两种解决方案

逆向命令索引

bash
# 提取视觉预处理源文件
strings atomcode.bin.bak | grep "^crates/atomcode-core/src/vision_preprocessor.rs"
# 输出: crates/atomcode-core/src/vision_preprocessor.rs

# 提取视觉相关配置
strings atomcode.bin.bak | grep -iE "vision_preprocessor" | sort -u
# 输出: vision_preprocessor_provider

# 提取支持的模型
strings atomcode.bin.bak | grep -iE "vision|visual" | grep -v "https\?://" | sort -u | head -5

本报告由持续分析循环生成 — 37 份报告中的最后一份子系统分析

基于 VitePress 构建 · AtomCode v4.25.3 逆向工程分析文档