Skip to content

[Feature]: 上传视频/图片进行多模态分析的支持 #4158

@vienhieu727-ship-it

Description

@vienhieu727-ship-it

Version line

v2 — Go rewrite (1.x), main-v2 (active development)

What problem does this solve?

描述
当前 Reasonix 不支持将图片或视频直接发送给多模态模型进行视觉理解。

当用户上传视频(或图片)时,即使选择了支持视觉的模型(如 GPT-4V、未来的 DeepSeek 多模态版本等),消息内容仍然以纯文本字符串形式发送,不会将图片/视频以 image_url 或 data:image 格式嵌入到请求中。

复现步骤
在 reasonix chat 或 code 模式中上传一个视频/图片文件
选择一个支持多模态的模型
要求模型分析视频/图片内容
模型无法直接"看到"文件,只能尝试用 bash(ffprobe 等)或 read_file 等工具来处理
预期行为
对于支持的模型(例如 OpenAI 兼容的视觉模型),应当能够将图片以 content: [{ type: "image_url", image_url: { url: "data:image/...;base64,..." } }] 的格式直接发送给模型进行视觉理解。

对于视频,如果模型不支持直接视频输入,可以将其解码为关键帧图片序列后再发送。

实际行为
消息体始终是:

{"role": "user", "content": "请分析这个视频"}
没有任何图片/视频数据被嵌入请求中。

根因
在 internal/provider/openai/openai.go 中,chatMessage 结构体的 Content 字段是 *string 类型,而非 []contentPart 数组,因此无法承载多模态内容。

建议方案
internal/provider/provider.go — Message 结构体增加 ImageURLs 或等效的多模态字段
internal/provider/openai/openai.go — buildRequest() 中,当消息含图片时,将 Content 从 *string 切换为 []chatContentPart 格式
前端 CLI/TUI — 支持文件拖入/粘贴时自动将图片转为 base64 data URI
注意缓存影响 — base64 图片嵌入会改变 prompt 字节,影响 prefix-cache 稳定性,建议只在显式使用多模态模型时启用

Proposed solution

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    agentCore agent loop (internal/agent, internal/control)enhancementNew feature or requestproviderModel providers & selection (internal/provider)v2Go rewrite (1.x) — main-v2 branch, active development

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions