fix: 修复上传图片后 AI 无法识别图片的问题
根因:图片从 ChatInput → agent-store → IPC → adapter 的链路中有两处断裂:
1. DeepSeekAdapter.toNativeRequest 完全忽略 message.images 字段
- 用户消息中的图片 base64 数据未转换为 OpenAI 多模态 content
数组格式,导致 LLM 收不到图片数据,只能尝试用工具查磁盘文件
2. AgnesAdapter.toNativeRequest 图片处理存在数组索引错位
- base.messages[0] 固定为 system 消息(父类插入)
- request.messages.filter(m => m.role !== 'system') 去掉了 system
- 同一索引 i 访问两个不同长度的数组,导致图片消息匹配到错误位置
3. agent-store sendMessage 中 images 参数被局部变量遮蔽
- ChatInput 传入的 images 被 覆盖
- 改为直接使用参数,避免重复从 attachments 提取
修复:
- DeepSeekAdapter: 在 toNativeRequest 中添加图片→OpenAI content 数组转换
- AgnesAdapter: 移除冗余图片处理(基类已处理),仅保留 Thinking/max_tokens
- agent-store: 移除 images 变量遮蔽,直接使用参数
影响范围: DeepSeek / Agnes AI / Ollama 三个 Provider 的图片传递均已验证
This commit is contained in:
@@ -263,7 +263,26 @@ export class DeepSeekAdapter extends BaseAdapter {
|
||||
].filter(Boolean).join('\n\n'),
|
||||
},
|
||||
...request.messages.filter((m) => m.role !== 'system').map((m) => {
|
||||
const msg: Record<string, unknown> = { role: m.role, content: m.content };
|
||||
const msg: Record<string, unknown> = { role: m.role };
|
||||
|
||||
// 多模态图片处理:将 images 转为 OpenAI content 数组格式
|
||||
// [{"type":"text","text":"..."}, {"type":"image_url","image_url":{"url":"data:..."}}]
|
||||
if (m.images && m.images.length > 0) {
|
||||
const contentParts: Array<Record<string, unknown>> = [];
|
||||
if (m.content) {
|
||||
contentParts.push({ type: 'text', text: m.content });
|
||||
}
|
||||
for (const img of m.images) {
|
||||
contentParts.push({
|
||||
type: 'image_url',
|
||||
image_url: { url: img.url, detail: img.detail ?? 'auto' },
|
||||
});
|
||||
}
|
||||
msg.content = contentParts;
|
||||
} else {
|
||||
msg.content = m.content;
|
||||
}
|
||||
|
||||
if (m.role === 'assistant' && m.toolCalls?.length) {
|
||||
msg.tool_calls = m.toolCalls.map((tc) => ({
|
||||
id: tc.id,
|
||||
|
||||
Reference in New Issue
Block a user