跳到主要内容

多协议 LLM Provider 适配实施方案

状态:待评审(未实施) 关联 Issue:JuanNiang-Neo#22(URL 后缀硬编码) 参考实现:MintWord(src-tauri/src/ai.rs + src/lib/aiProviders.ts)、cloudwego/eino-ext(context7 实测组件文档)


1. 背景与目标

1.1 现状问题

问题位置影响
只支持 OpenAI Chat Completions 一种协议internal/agent/provider/provider.go无法直连 Anthropic / Gemini / OpenAI Responses 原生端点
/v1/chat/completions 硬编码 3 处provider.go :45 Chat、:56 ChatStream、:146 VisionIssue #22:用户无法指定完整 URL,网关(Open WebUI 等非标准路径)无法接入
ChatStream 绕过 doRequest 重复拼接 URLprovider.go :56 vs :232拼接逻辑漂移风险
thinking 适配为"双字段全开"(thinking + enable_thinking 同时携带)provider.go buildChatBody只对宽松实现有效,严格校验请求体的厂商(Anthropic/Gemini)无法适配
多模态仅支持图片 → OpenAI image_url 格式provider.go Vision无 MIME 信息、无 Anthropic image block / Gemini inlineData
无模型能力元数据ProviderConfig无 contextWindow / maxOutput,max_tokens 无模型级默认

1.2 目标

  1. 解决 Issue #22:URL 后缀可由用户指定(填完整 URL 或 base URL 均可)
  2. 多协议chat_completions / anthropic_messages / openai_responses / gemini_native 四种协议分派
  3. 不同模型适配:thinking/reasoning 按厂商矩阵精确适配、生成参数按协议映射、多模态按协议转换
  4. 不破坏存量:默认 chat_completions,存量配置零迁移

1.3 非目标

  • 不引入 eino-ext 作为协议实现(见 §3.2 论证;其组件配置规格仅作参考)
  • 不做流式响应的全协议覆盖(Phase 2 流式范围见 §6)
  • 不做上下文压缩/截断策略(属后续任务,方案预留元数据基础)

2. 现状代码定位

文件说明
Provider 接口与配置internal/agent/provider/root.goProviderConfig{ID,Type,Name,Endpoint,Token,Model,Temperature,EnableThinking}ModelType = text/image/embedding
协议实现internal/agent/provider/provider.goopenAIProvider:Chat / ChatStream / Vision / doRequest / buildChatBody / parseChatResponse
Eino 适配internal/agent/provider/eino_model.goEinoModelAdapter 包装 Provider 为 Eino ToolCallingChatModel
GORM 模型internal/core/models/provider.goProvider{Type,Endpoint,Token,Model,Temperature,...}
API DTOinternal/api/dto/request.go :63-78、response.go :85-89、transfer.goAdd/Update/Resp 三套结构
服务层internal/api/service/service.go :203-395model ↔ DTO 转换、创建/更新
前端web/src/api/index.ts :12-13、web/src/views/ProvidersPage.vueAddProviderReq、表单"API 地址"

3. 参考设计

3.1 MintWord(已实测,src-tauri/src/ai.rs

  • api_mode 四协议枚举chat_completions | anthropic_messages | openai_responses | gemini_native
  • 协议分派match api_mode 分发到 4 个 build 函数 + 1 个 extract_response_content
api_modeURL 拼接认证请求体要点
chat_completions{url}/chat/completionsAuthorization: Bearermessages + tools + 采样参数
anthropic_messages{url}/messagesx-api-key + anthropic-version: 2023-06-01system 独立字段、max_tokens 必填
openai_responses{url}/responsesAuthorization: Bearerinput(非 messages)
gemini_native{url}/models/{model}:generateContent?key={key}无 header(key 在 query)contents[].parts[] + generationConfig
  • thinking 按厂商矩阵apply_thinking_chatprovider_id 分派):
厂商字段
deepseek / kimithinking={type:enabled/disabled} + reasoning_effort(kimi)
zhipu / zaithinking={type:enabled/disabled}
alibaba / siliconflowenable_thinking
stepfunreasoning_effort
minimaxreasoning_split
默认(openai 兼容)reasoning_effort
  • Anthropic thinking:模型含 4-7/4-8thinking={type:"adaptive"};否则 thinking={type:"enabled", budget_tokens:N}
  • Gemini thinkinggemini-3*thinkingConfig={includeThoughts:true, thinkingLevel:effort.UPPER};否则 {includeThoughts:true, thinkingBudget:N}
  • 模型元数据aiProviders.ts,76KB 预设表):每模型标注 contextWindow / maxOutput / thinkingSupport / thinkingPattern / thinkingLevels / supportedParams;每厂商标注 baseUrl / protocols / urlEditable / subOptions / urlMap
  • 已知缺陷(本方案规避):fully-custom 模式提示用户填完整 URL,但后端 format!("{}/chat/completions", url) 仍追加,产生双份路径
  • 国产厂商协议结论(官方文档实证,2026-08-06,详见 §5.2 矩阵):MintWord 中全部国产厂商(含编码计划/按量计费)预设 apiMode 均为 chat_completions,无一走 anthropic_messages —— protocols: ['openai','anthropic'](MiniMax/小米)只是声明端点双协议能力,代码仅读 apiMode,唯一切换入口是 fully-custom 手动子选项。注意:此限制是 MintWord 自身选择而非厂商能力 —— 全部 11 家国产厂商官方均提供 Anthropic 兼容端点(DeepSeek 另有 /anthropic/responses),本方案 §5.2 已将其纳入协议矩阵

3.2 eino-ext(context7 实测组件规格)

为何不直接采用 eino-ext 组件实现:eino-ext 组件各自返回 Eino model.ToolCallingChatModel,与本项目 provider.Provider 接口、ProviderGroup 容器、自研 openAIProvider 体系不同构;且各组件生成/流式/thinking 提取 API 差异大(claude.GetThinkingdeepseek.GetReasoningContent、gemini ReasoningContent 字段),接入改造面大于自研协议层扩展。但其配置规格是本方案自研实现的标准参考

组件配置要点(作为规格)本方案对应
openaiBaseURLReasoningEffort(low/medium/high)、MaxCompletionTokensTemperatureByAzurechat_completions + reasoning_effort
claudeAPIKey/Model/MaxTokens 必填BaseURL *stringWithThinkingConfig(OfAdaptive/OfEnabled budget_tokens)GetThinkinganthropic_messages
geminigenai.ClientConfig{HTTPOptions.BaseURL}ThinkingConfig{IncludeThoughts,ThinkingBudget}ReasoningContent、图片输入 UserInputMultiContent{Base64Data,MIMEType}gemini_native
deepseekBaseURL: https://api.deepseek.com/betaGetReasoningContentchat_completions + thinking 矩阵
qwenBaseURL: .../compatible-mode/v1MaxTokens/Temperature/TopPchat_completions
openrouterReasoning{Effort}chat_completions + reasoning_effort
ark多模态 generate_with_image(base64 图片)多模态参考

4. 总体架构

设计原则:接口层零改动Provider 接口、EinoModelAdapteragent.go 等调用方不受影响),协议差异全部收敛在 provider.go 内部。


5. 详细设计

5.1 配置模型扩展

internal/agent/provider/root.go

// APIMode 协议模式(与 MintWord apiMode 对齐)
type APIMode string

const (
APIModeChatCompletions APIMode = "chat_completions"
APIModeAnthropicMessages APIMode = "anthropic_messages"
APIModeOpenAIResponses APIMode = "openai_responses"
APIModeGeminiNative APIMode = "gemini_native"
)

type ProviderConfig struct {
ID string
Type ModelType
Name string
Endpoint string // base URL 或完整端点(自动识别,见 §5.3)
Token string
Model string
Temperature float32
EnableThinking bool
// ---- 新增 ----
APIMode APIMode `json:"api_mode,omitempty"` // 空 = chat_completions
ThinkingEffort string `json:"thinking_effort,omitempty"` // off/low/medium/high
ThinkingBudget int `json:"thinking_budget,omitempty"` // anthropic/gemini budget
MaxTokens int `json:"max_tokens,omitempty"` // 0 = 协议默认
TopP *float32 `json:"top_p,omitempty"`
TopK *int `json:"top_k,omitempty"`
FrequencyPenalty *float32 `json:"frequency_penalty,omitempty"`
PresencePenalty *float32 `json:"presence_penalty,omitempty"`
RepetitionPenalty *float32 `json:"repetition_penalty,omitempty"`
// ---- 多协议自定义(国产厂商调研结论并入)----
ProviderKey string `json:"provider_key,omitempty"` // 厂商分组(deepseek/kimi/zhipu/...),驱动 thinking 矩阵与认证头分派;空 = 按 Name 关键词匹配
AuthHeader string `json:"auth_header,omitempty"` // ""|"bearer"|"x-api-key"|"api-key":anthropic 国产端点认证头不统一(§5.2)
URLMode string `json:"url_mode,omitempty"` // ""|"auto"|"exact":auto=base+协议后缀自动拼接(默认);exact=完整端点原样使用(完全自定义,必须自写 v1 后完整后缀,§5.3)
}

GORM 模型internal/core/models/provider.go)追加同名字段(GORM AutoMigrate 自动加列,无需手写 SQL;sql/init.sql 仅注释参考)。默认值语义:

  • api_mode 空/"" → 运行时按 chat_completions 处理(存量兼容)
  • thinking_effort 空 → 关闭 thinking(EnableThinking 兼容保留:EnableThinking=true 且 effort 空 → medium
  • url_mode 空 → auto(存量 Endpoint 均为 base URL,行为不变)
  • auth_header 空 → 按协议默认(chat_completions/responses=Bearer;anthropic=x-api-key;gemini=x-goog-api-key

API DTOinternal/api/dto/request.go / response.go / transfer.go)与 service.go(:203-395)同步透传新字段。

前端web/src/api/index.ts AddProviderReqProvidersPage.vue 表单):

  • 类型下拉新增 api_mode 选择(默认 chat_completions),预置 4 类自定义入口(详见 §5.7 预设表):
    • OpenAI 兼容自定义 → 不需要包含 /chat/completions 后缀
    • OpenAI Responses 自定义 → 不需要包含 /responses 后缀
    • Anthropic 自定义 → 不需要包含 /v1/messages 后缀(认证头可配:x-api-key / Bearer / api-key)
    • 完全自定义必须自写 v1 之后的完整端点路径(如 /openai/v1/chat/completions),系统不追加任何后缀
  • 通用提示:也可以直接粘贴完整端点地址(以协议后缀结尾),系统自动识别
  • 国产厂商联动:选择国产厂商 → 按硬编码协议能力表(§5.2 预设表)渲染协议下拉(openai 兼容 / anthropic / responses,按该厂商支持情况)→ 选中后自动预填 base URL、认证头、api_mode(可再手动覆盖);协议级限制(订阅 / 版本 / 模型范围)以警示文案展示
  • thinking 配置:thinking_effort 下拉(off/low/medium/high,按协议显示可用档位)

5.2 协议层(provider.go 重构)

openAIProvider 增加协议分派,三个方法统一入口:

// Chat / Vision 统一走 doRequest
func (p *openAIProvider) Chat(...) {
body := p.buildRequest(req, false)
resp, err := p.doRequest(ctx, p.endpointURL(), body) // 原硬编码 path 删除
return p.parseResponse(resp)
}

func (p *openAIProvider) ChatStream(...) {
// 复用 endpointURL(),删除 :56 独立拼接
}

请求构造器(MintWord build_* 模式):

func (p *openAIProvider) buildRequest(req ChatRequest, stream bool) ([]byte, error) {
switch p.cfg.APIMode {
case APIModeAnthropicMessages: return p.buildAnthropic(req, stream)
case APIModeOpenAIResponses: return p.buildResponses(req, stream)
case APIModeGeminiNative: return p.buildGemini(req, stream)
default: return p.buildChatCompletions(req, stream)
}
}

各协议请求体要点(规格,参考 MintWord + eino-ext):

chat_completionsanthropic_messagesopenai_responsesgemini_native
端点{url}/chat/completions{url}/messages{url}/responses{url}/models/{model}:generateContent
认证Authorization: Bearerx-api-key + anthropic-version: 2023-06-01Authorization: Bearerx-goog-api-key(推荐,替代 MintWord 的 ?key= query)
系统提示messages[0] role=system顶层 system 字段无(并入 input 首条 system message)拼接进首条 user parts 或 systemInstruction
消息体messages[]messages[](user/assistant 交替)input(非 messages,支持 input_imagecontents[](role user/model 交替)
max_tokensmax_tokensmax_tokens 必填,默认 4096max_tokensgenerationConfig.maxOutputTokens
温度temperaturetemperaturegenerationConfig.temperature
top_p / top_ktop_p / —top_p / top_kgenerationConfig.topP / topK
惩罚frequency_penalty / presence_penaltyrepetition_penaltygenerationConfig
工具tools[](function)tools[](function)tools[]tools[](functionDeclaration)

国产厂商协议能力预设表(硬编码,官方文档实证 2026-08-06)—— 每个国产厂商预置其支持的全部协议,用户配置时按协议下拉自选(openai 兼容 / anthropic / responses),系统按所选协议自动填 base URL + 认证头 + api_mode:

厂商openai 兼容anthropicresponsesopenai 端点anthropic 端点(认证头)responses 端点 / 覆盖
DeepSeekapi.deepseek.comapi.deepseek.com/anthropic(x-api-key)api.deepseek.com/responses仅 v4-flash
智谱 Z.AIopen.bigmodel.cn/api/paas/v4open.bigmodel.cn/api/anthropic(x-api-key)
Moonshot Kimiapi.moonshot.cn/v1(国际 .aiapi.moonshot.cn/anthropic(Bearer)
阿里百炼dashscope.aliyuncs.com/compatible-mode/v1dashscope.aliyuncs.com/apps/anthropic(x-api-key 或 Bearer)
火山方舟ark.cn-beijing.volces.com/api/v3ark.cn-beijing.volces.com/api/v3/anthropic(Bearer).../api/v3/responses250615+ 新版模型默认支持;doubao-1-5-pro-32k-character-250715 例外)
MiniMaxapi.minimaxi.com/v1(国际 .ioapi.minimaxi.com/anthropic(Bearer,非 x-api-key)
小米 MiMoapi.xiaomimimo.com/v1api.xiaomimimo.com/anthropic(api-key 或 Bearer)
阶跃星辰api.stepfun.com/v1api.stepfun.com/step_plan(Bearer)
腾讯混元api.hunyuan.cloud.tencent.com/v1api.hunyuan.cloud.tencent.com/anthropic(x-api-key 必选)
百度千帆qianfan.baidubce.com/v2qianfan.baidubce.com/anthropic(x-api-key)
硅基流动api.siliconflow.cn/v1api.siliconflow.cn/v1/messages(Bearer,base 已含 /v1)

硬编码预设结构models_catalog.go 或独立 provider_presets.go):

// ProviderProtocol 国产厂商预设中的单个协议能力
type ProviderProtocol struct {
APIMode APIMode // chat_completions | anthropic_messages | openai_responses
BaseURL string // 该协议下的 base URL(端点层级见 §5.3 auto 模式)
AuthHeader string // ""=协议默认;国产 anthropic 差异见下表
Note string // 覆盖范围限制(订阅 / 版本 / 模型),前端展示警告
}

// ProviderPreset 国产厂商硬编码预设
type ProviderPreset struct {
Key string
Name string
Protocols []ProviderProtocol // 用户可选的协议列表(硬编码,前端据此渲染下拉)
}

var providerPresets = map[string]ProviderPreset{
"deepseek": {
Key: "deepseek", Name: "DeepSeek",
Protocols: []ProviderProtocol{
{APIMode: APIModeChatCompletions, BaseURL: "https://api.deepseek.com", AuthHeader: "bearer"},
{APIMode: APIModeAnthropicMessages, BaseURL: "https://api.deepseek.com/anthropic", AuthHeader: "x-api-key"},
{APIMode: APIModeOpenAIResponses, BaseURL: "https://api.deepseek.com", AuthHeader: "bearer", Note: "仅 deepseek-v4-flash"},
},
},
// 其余 10 家同构(表见上)
}

协议选择流程

  1. 前端选厂商 → 读 preset.Protocols 渲染协议下拉(如 DeepSeek 3 项、智谱 2 项、火山 3 项)
  2. 用户选协议 → 自动填 baseURL / authHeader / api_mode(可再手动覆盖,urlEditable=true
  3. 协议级限制(Note)前端提示:DeepSeek responses 仅 flash;火山 anthropic 需 Coding Plan 订阅、responses 需 250615+ 新版模型;阶跃 anthropic 需 Step Plan 订阅;MiniMax anthropic 仅 M 系列
  4. 后端无需再猜协议 —— api_mode + auth_header + url_mode 由预设直接落地,硬编码表与厂商官方文档同步维护

认证头分派setHeaderscfg.AuthHeader,默认按协议):bearerAuthorization: Bearer {token}x-api-keyx-api-key: {token}(anthropic 附带 anthropic-version: 2023-06-01);api-keyapi-key: {token}(小米)

端点形态(全部可被 §5.3 auto 模式覆盖):{base}/anthropic(DeepSeek/智谱/Kimi/MiniMax/小米/混元/千帆)、{base}/apps/anthropic(阿里)、{base}/v1/messages(硅基)、{base}/step_plan(阶跃,SDK 拼 /v1/messages

OpenAI Responses 国产支持(覆盖范围差异):

厂商Responses 端点覆盖模型差异
火山方舟https://ark.cn-beijing.volces.com/api/v3/responses250615 及之后版本的大语言模型默认支持doubao-1-5-pro-32k-character-250715 例外;TPM 保障包/精调/智能路由不支持)previous_response_id 多轮、store:true、caching、内置工具
DeepSeekhttps://api.deepseek.com/responsesdeepseek-v4-flash(v4-pro 2026-08 初)无状态(previous_response_id/store 不支持);SSE 语义事件结束(response.completed/incomplete/failed),data: [DONE]
智谱 Z.AI未提供

流式解析差异(Phase 2 实现要点):DeepSeek Responses 流式按 event 字段分派(response.output_text.delta / response.completed),与 chat_completions 的 data: 前缀解析不同,parseResponsesStream 需独立实现。

响应提取器

func (p *openAIProvider) parseResponse(body []byte) (*ChatResponse, error) {
switch p.cfg.APIMode {
case APIModeAnthropicMessages: return p.parseAnthropic(body) // content[0].text + thinking blocks
case APIModeOpenAIResponses: return p.parseResponses(body) // output[0].content[] → text
case APIModeGeminiNative: return p.parseGemini(body) // candidates[0].content.parts[0].text + reasoning
default: return p.parseChatCompletions(body)
}
}

流式:Phase 2 范围 —— chat_completions 保持现有;anthropic(content_block_delta)/gemini(candidates[].content.parts[])SSE 格式不同,单独实现;responses(response.output_text.delta)同批实现;其余协议流式不支持时报明确错误(与 eino-ext 组件行为一致)。

5.3 URL 规则(解决 Issue #22)

// 协议已知后缀表:URL 以其结尾 → 视为完整端点,不再追加
var apiSuffixes = map[APIMode][]string{
APIModeChatCompletions: {"/chat/completions"},
APIModeAnthropicMessages: {"/messages"},
APIModeOpenAIResponses: {"/responses"},
APIModeGeminiNative: {":generateContent"},
}

func (p *openAIProvider) endpointURL() string {
if p.cfg.URLMode == "exact" {
return p.cfg.Endpoint // 完全自定义:原样使用,不追加不识别(必须自写 v1 后完整后缀)
}
e := strings.TrimRight(p.cfg.Endpoint, "/")
for _, s := range apiSuffixes[p.cfg.APIMode] {
if strings.HasSuffix(strings.ToLower(e), s) {
return e // 用户已提供完整端点
}
}
switch p.cfg.APIMode {
case APIModeGeminiNative:
return e + "/models/" + url.PathEscape(p.cfg.Model) + ":generateContent"
case APIModeAnthropicMessages:
return e + "/messages"
case APIModeOpenAIResponses:
return e + "/responses"
default:
return e + "/chat/completions"
}
}

要点:

  • 向后兼容:存量 Endpoint(如 https://api.deepseek.comhttps://api.openai.com/v1)行为不变
  • 完整 URL:用户填 https://openwebui.local/openai/v1/chat/completions → 直接使用(修 MintWord 双份 bug)
  • url_mode=exact(完全自定义)endpointURL() 直接返回 Endpoint,跳过后缀识别与追加 —— 用户必须自写 v1 之后完整后缀;与 MintWord fully-custom(无条件追加导致双份路径 bug)的本质区别
  • 国产 Anthropic 端点形态(§5.2)在 auto 模式下的填法:https://api.deepseek.com/anthropic(拼 /messages)、https://dashscope.aliyuncs.com/apps/anthropichttps://api.siliconflow.cn/v1(拼 /messages)、https://api.stepfun.com/step_plan —— 统一由 suffix 表 + 完整 URL 识别覆盖
  • Chat / ChatStream / Vision 统一走 endpointURL(),删除 3 处硬编码
  • gemini 特殊:{model} 内嵌路径,URL 识别以 :generateContent 结尾为准

5.4 参数映射矩阵

buildChatCompletions 现有采样字段保留,新增可选字段(§5.1)仅在配置非零时携带;各协议映射见 §5.2 表。req.MaxTokens(请求级)优先于 cfg.MaxTokens(配置级),再回落协议默认(anthropic 4096 / gemini 8192 / 其他 0=不携带)。

5.5 thinking / reasoning 适配矩阵

chat_completions(MintWord apply_thinking_chat + eino-ext 规格,按 provider 分组):

provider 分组thinking_effort != off 时携带off 时
deepseekthinking={type:"enabled"};V4 系列另支持顶层 reasoning_effortthinking={type:"disabled"}
kimiK2.x:thinking={type:"enabled"} + reasoning_effortK3:顶层 reasoning_effort(low/high/max,默认 max,始终思考)K2.x:thinking={type:"disabled"};K3:省略 reasoning_effort
zhipu / zaithinking={type:"enabled"}GLM-5.2 增加顶层 reasoning_effort(如 max)thinking={type:"disabled"}
alibaba / siliconflowenable_thinking=trueenable_thinking=false
stepfunreasoning_effort
minimaxreasoning_split=true
tencent
默认(openai 兼容)reasoning_effort(GPT-5.6 支持 `nonelow

provider 分组判定:新增 ProviderConfig.ProviderKey(可选,默认取 Name 小写匹配 deepseek/kimi/zhipu/alibaba/siliconflow/stepfun/minimax/tencent 关键词);不配置则回退"默认"分支。替换现有 EnableThinking 双字段全开逻辑(EnableThinking 保留为旧字段兼容,映射为 effort=medium)。

anthropic_messages(MintWord + eino-ext OfAdaptive + 官方文档):

  • thinking_effort=off → 不带 thinking
  • adaptive 判定扩展(官方文档,2026-08):模型名含 opus-5|sonnet-5|fable-5|4-7|4-8|m3|M3(或配置 ThinkingPattern=adaptive)→ thinking={type:"adaptive"}Opus 5 / Sonnet 5 / Fable 5 不支持 extended thinkingtype:"enabled" 会被拒绝,只能用 adaptive)
  • 否则 → thinking={type:"enabled", budget_tokens: cfg.ThinkingBudget|8000}(Haiku 4.5、Opus 4.6 及更早、国产端点)
  • 国产 Anthropic 端点(§5.2 矩阵)同样接收上述 thinking 结构;MiniMax M3 为 adaptive

gemini_native(eino-ext ThinkingConfig):

  • gemini-3*(含 3.5-flash / 3.6-flash / 3.5-flash-lite)→ thinkingConfig={includeThoughts:true, thinkingLevel:effort.UPPER}
  • 否则 → thinkingConfig={includeThoughts:true, thinkingBudget: cfg.ThinkingBudget|8192}
  • off → thinkingConfig={includeThoughts:false}

openai_responses(eino-ext openai ReasoningEffort + GPT-5.6):

  • reasoning: {effort: <none|low|medium|high|xhigh|max>, summary: "auto"}(GPT-5.6 支持 max,默认 medium)
  • 可选扩展:mode: "pro"(GPT-5.6 pro mode,独立于 effort)、context: "all_turns"|"current_turn"(persisted reasoning,GPT-5.6 默认 all_turns)
  • off → 不带 reasoning

模型级适配要点(2026-08 官方文档):

  • GPT-5.6(sol/terra/luna):chat_completions 走 reasoning_effort官方推荐 Responses API(reasoning/工具/多轮)
  • Kimi K3:reasoning_effort请求顶层字段(非 thinking 对象内),流式返回 reasoning_content 增量
  • DeepSeek V4:默认思考模式,可切非思考;Responses 仅 flash
  • opencode-go:协议由模型决定(gpt-5.6-luna→responses、MiniMax/Qwen 全系→anthropic、其余→chat_completions),配置预设时按模型映射 api_mode

5.6 多模态适配

接口扩展(最小侵入):Vision 增加 MIME 参数(旧签名保留,走默认 jpeg):

type VisionInput struct {
Data []byte
MIMEType string // image/jpeg 等
Prompt string
}

格式转换(按 api_mode):

协议图片 part
chat_completions{type:"image_url", image_url:{url:"data:<mime>;base64,<b64>"}}(现状,补 MIME)
anthropic_messages{type:"image", source:{type:"base64", media_type:"<mime>", data:"<b64>"}}
openai_responsesinput: [{role:"user", content:[{type:"input_image", image_url:"data:<mime>;base64,<b64>", detail:"auto"}]}]
gemini_nativecontents[].parts[]: [{text: prompt}, {inlineData:{mimeType:"<mime>", data:"<b64>"}}]

(参考 eino-ext gemini/openrouter 的 UserInputMultiContent{Base64Data, MIMEType} 中间表示。)

多模态扩展范围(2026-08 官方文档):

  • Gemini 3.5 Flash 系:输入支持 Text/Image/Video/Audio/PDF 五模态 —— inlineData part 按 MIME 扩展(application/pdf 等),文本/图片现有实现可直接承载
  • Kimi K3:OpenAI 兼容 image_url(base64 data URL)或 video_urlms://{file_id},需先 files.create 上传)—— video_url 为 Kimi 扩展 part 类型,chat_completions 构造器需放行未知 part 类型透传
  • 多模态文件引用(可选阶段):Anthropic/OpenAI 文件引用需先上传获取 file_id;本方案最小实现保持 base64 内联,后续如需文件引用再按各厂商上传接口单独扩展

5.7 模型能力元数据(可选阶段,MintWord aiProviders.ts 模式)

Go 侧预设表 internal/agent/provider/models_catalog.go

type ModelCapability struct {
ContextWindow int // token
MaxOutput int // token
ThinkingSupport bool
ThinkingPattern string // budget_tokens | adaptive | builtin | thinking_config
SupportedParams []string // temperature, top_p, top_k, frequency_penalty, ...
}
var modelCatalog = map[string]ModelCapability{ /* deepseek-v3, qwen3, gemini-3*, claude-opus-4-7, gpt-5.x ... */ }

用途:max_tokens 配置默认值校验、前端表单能力提示(当前模型支持哪些参数)、后续上下文截断策略的数据基础。阶段 5 可选,不阻塞主链路。

能力表数据源

  • 新模型规格(contextWindow / maxOutput / thinking 能力)已按厂商归并:GPT-5.6 → §11.3 OpenAI 系、Claude 5 → Anthropic、Gemini 3.6/3.5 → Gemini、Grok 4.5 / DeepSeek V4 / Kimi K3 → Grok/DeepSeek/Kimi、Qwen3.8/3.7 → 阿里、GLM-5.2 → 智谱,连同 §11.3 MintWord 全量模型明细作为 modelCatalog 初始数据
  • opencode-go(三协议混合)→ §11.2 厂商预设总表 #14 + §11.3 opencode-go 小节(官方支持 18 个模型×协议映射,2026-08-06):端点 https://opencode.ai/zen/go/v1、订阅 API Key(Bearer)、模型 ID 格式 opencode-go/<model-id>列表动态(/v1/models 含已下线残留,应以官方列表过滤)、用量 5h $12 / 周 $30 / 月 $60

四类自定义预设(前端模板,与 api_mode/URLMode 组合):

预设apiModeURLModeURL 行为
OpenAI 兼容自定义chat_completionsautobase + /chat/completions(或完整 URL 识别)
OpenAI Responses 自定义openai_responsesautobase + /responses
Anthropic 自定义anthropic_messagesautobase + /messages(AuthHeader 可配)
完全自定义用户指定(默认 chat_completions)exact必须自写 v1 后完整后缀,原样发送不追加

与国产厂商预设的关系(§5.2 硬编码协议能力表):国产厂商 = 预设驱动(厂商 → 协议下拉 → 自动填 base URL/认证头/api_mode,url_editable=true 可覆盖);四类自定义 = 完全手动(不依赖预设,适合网关/自建端点)。二者共用同一套 api_mode + auth_header + url_mode 字段,后端无差别处理。


6. 实施步骤

Phase 1:URL 收敛 + api_mode 字段(解决 Issue #22,最小闭环)

文件改动
internal/core/models/provider.go+APIMode string 列(GORM AutoMigrate)
internal/agent/provider/root.go+APIMode 常量与配置字段;APIMode() 归一化(空→chat_completions)
internal/agent/provider/provider.go+endpointURL();Chat/ChatStream/Vision/doRequest 改用;删除 3 处硬编码与 ChatStream 重复拼接
internal/api/dto/request.go / response.go / transfer.go透传 api_mode
internal/api/service/service.go透传 api_mode(:203-395 各构造点)
web/src/api/index.ts / web/src/views/ProvidersPage.vue表单 + 类型 + 提示文案
internal/agent/provider/provider_test.goURL 规则单测(见 §7)

验收:存量 provider(无 api_mode)行为不变;新增完整 URL 的 provider 请求打完整端点;go test ./internal/agent/provider/ 通过。

Phase 2:协议构造器 + 响应提取器(anthropic / gemini / responses)

文件改动
internal/agent/provider/provider.gobuildAnthropic / buildResponses / buildGeminiparseAnthropic / parseResponses / parseGemini;认证头分派(setHeaders 按模式)
同上流式:anthropic(content_block_delta)、gemini(SSE parts)、responses(output_text.delta);不支持协议返回明确错误
同上Vision 走协议分派(§5.6 先行实现 image 三格式)

验收:三种协议非流式 Chat 调用通过(可用 httptest mock 端点);流式行为与 eino-ext 组件一致。

Phase 3:thinking 矩阵 + 参数映射

文件改动
internal/agent/provider/provider.goapplyThinking(apimode, providerKey, effort, budget) 替换 EnableThinking 双字段逻辑
internal/agent/provider/root.go+ThinkingEffort / ThinkingBudget / MaxTokens / TopP / TopK / 惩罚字段
DTO / service / 前端透传新字段

验收:deepseek/zhipu/alibaba 等矩阵用例走对应字段(单测快照);EnableThinking=true 旧配置映射为 effort=medium。

Phase 4:多模态扩展

文件改动
internal/agent/provider/provider.goVisionInput{MIMEType};四协议图片 part 转换
调用方internal/agent/(Vision 调用点)传 MIME

验收:同图在四种协议下的请求体快照正确。

Phase 5(可选):模型能力元数据

文件改动
internal/agent/provider/models_catalog.go预设能力表
前端按能力表显示参数/思考档位

7. 测试计划

internal/agent/provider/provider_test.go(新增,覆盖所有新契约):

  1. URL 规则:base URL 追加 / 完整 URL 识别 / gemini 模型路径 / 尾斜杠处理 / 大小写后缀
  2. 协议请求体快照:四种协议 ×(纯文本 / 带工具 / 带 thinking / 带多模态)JSON 快照断言
  3. 响应解析:四种协议响应样例 → ChatResponse(含 reasoning 提取)
  4. thinking 矩阵:各厂商分组字段断言(off 与开两级)
  5. 参数映射req.MaxTokens > cfg.MaxTokens > 协议默认 的优先级
  6. 兼容性api_mode 空 → chat_completions 行为与旧实现一致
  7. 流式:anthropic / gemini SSE 解析(bufio.Scanner 逐行),断流与 [DONE] 等价处理

现有 segment_test.godao_test.go 保持通过。


8. 兼容性与迁移

策略
存量 provider 记录api_mode 列默认空 → 运行时按 chat_completions,零迁移
EnableThinking 旧字段保留解析,映射为 ThinkingEffort=medium;新配置优先读 ThinkingEffort
Endpoint 存量值均为 base URL,追加逻辑不变
Provider 接口 / EinoModelAdapter / agent.go 调用方零改动(协议差异收敛在 provider.go 内部)
前端旧表单api_mode 可空提交,后端归一化

9. 风险与权衡

风险缓解
gemini/responses 流式格式差异大,工作量大Phase 2 拆分交付;非核心协议流式可先返回"暂不支持流式"错误
anthropic max_tokens 必填,缺失报错协议默认 4096,配置可覆盖
responses 协议消息映射复杂(无 messages 数组)参考 eino-ext openai responses 组件语义;Phase 2 单独验收
thinking 矩阵字段随厂商演进漂移矩阵集中在一处 applyThinking,字段表化(驱动数据而非 if-else 堆叠)
与 eino-ext 组件路径并行维护本方案为渐进自研;如未来切换 eino-ext,ProviderConfig 字段(APIMode/ThinkingEffort)可直接映射其组件配置,不浪费

10. 附录:eino-ext 组件配置参考表(context7 实测)

组件BaseURL 配置thinking/reasoning多模态备注
openaiChatModelConfig.BaseURL(可 Azure ByAzure+APIVersionReasoningEffort(low/medium/high)图片 image_urlMaxCompletionTokens
claudeConfig.BaseURL *string(可 Bedrock/Vertex)WithThinkingConfigOfAdaptive / OfEnabled{budget_tokens}GetThinking 提取MaxTokens 必填
geminigenai.ClientConfig.HTTPOptions.BaseURLThinkingConfig{IncludeThoughts, ThinkingBudget}ReasoningContentUserInputMultiContent{Base64Data, MIMEType}
arkgenerate_with_image(base64)火山方舟
deepseekChatModelConfig.BaseURL/betaGetReasoningContent
qwenChatModelConfig.BaseURL(compatible-mode/v1)MaxTokens/Temperature/TopP
openrouterConfig.BaseURLReasoning{Effort}图片
ollama / qianfan / zhipuBaseURL社区/官方组件

11. 附录:MintWord 全部厂商与模型预设清单

来源:~/MintWord/src/lib/aiProviders.ts(1463 行,PROVIDERS: AiProvider[]),逐条提取,与源码一致。 简写:D=default 参数(maxTokens, temperature, topP);F=full 参数(+topK, frequencyPenalty, presencePenalty, repetitionPenalty);T=thinking 参数(F+thinkingBudget)。

11.1 数据结构定义

type ApiMode = 'chat_completions' | 'anthropic_messages' | 'openai_responses' | 'gemini_native';

type ThinkingPattern =
| 'reasoning_effort' // openai 兼容: reasoning_effort 字段
| 'thinking_object' // deepseek/kimi/zhipu/glm: thinking={type:enabled} 对象
| 'enable_thinking' // 通义/硅基: enable_thinking 布尔
| 'thinking_config' // gemini-3/stepfun: thinkingConfig / thinking_level
| 'budget_tokens' // anthropic 旧代/gemini 2.5: budget_tokens
| 'adaptive' // anthropic 新代(4-7/4-8)/minimax-M3: thinking adaptive
| 'builtin'; // o系列/grok/mistral-magistral/perplexity: 模型内置思考,无参数

type SupportedParam = 'maxTokens' | 'temperature' | 'topP' | 'topK'
| 'frequencyPenalty' | 'presencePenalty' | 'repetitionPenalty' | 'thinkingBudget';

interface AiModel {
id: string; displayName: string;
contextWindow?: number; maxOutput?: number;
thinkingSupport: boolean; thinkingPattern?: ThinkingPattern;
thinkingLevels?: string[]; supportedParams?: SupportedParam[];
subOptionFilter?: Record<string, string>; // 子选项过滤(如 planType: 'coding|agent')
}

interface AiProvider {
id: string; iconKey: string;
baseUrl: string; // 预设 base URL(含 /v1 等前缀,不含协议后缀)
apiMode: ApiMode; urlEditable: boolean;
categories: ('api'|'mainland'|'aggregator'|'coding-plan'|'custom')[];
protocols?: ('openai'|'anthropic')[];
models: AiModel[];
subOptions?: SubOption[]; // 影响 URL / 模型列表的子选项
urlMap?: Record<string, string>; // 子选项组合 → 实际 baseUrl
notesKey?: string;
}

11.2 厂商预设总表(49 条目)

#provider idbaseUrlapiModeurlEditablecategories子选项/urlMap模型
1openaihttps://api.openai.com/v1chat_completionsapi6
2openai-responseshttps://api.openai.com/v1openai_responsesapi6
3openai-compatible(用户填)chat_completionsapi, custom0(自定义)
4chatgpt-plushttps://chatgpt.com/backend-api/codexopenai_responsescoding-planloginMethod: url/device/api0
5anthropichttps://api.anthropic.comanthropic_messagesapi9
6anthropic-compatible(用户填)anthropic_messagesapi, custom0
7fully-custom(用户填)chat_completionscustomapiMode: openai/anthropic0
8geminihttps://generativelanguage.googleapis.com/v1betachat_completions(非 native)api6
9vertexai-googlehttps://{region}-aiplatform.googleapis.com/v1/projects/{project}/locations/{region}/endpoints/openapichat_completionsaggregator6
10vertexai-anthropic同上anthropic_messagesaggregator9
11grokhttps://api.x.ai/v1chat_completionsapi2
12github-copilothttps://api.githubcopilot.comchat_completionsaggregatorprotocols: [openai]15
13opencode-zenhttps://opencode.ai/zen/v1chat_completionsaggregator动态模型0
14opencode-gohttps://opencode.ai/zen/go/v1多协议(按模型)aggregator, coding-plan动态模型(官方列表 18,/v1/models 轮询)18(官方)
15deepseekhttps://api.deepseek.comchat_completionsapi2
16kimihttps://api.moonshot.cn/v1chat_completionsmainland, api2
17kimi-intlhttps://api.moonshot.ai/v1chat_completionsapi2
18kimi-codehttps://api.kimi.com/coding/v1chat_completionsmainland, coding-plan1
19mistralhttps://api.mistral.ai/v1chat_completionsapi8
20perplexityhttps://api.perplexity.aichat_completionsapi5
21huggingfacehttps://api-inference.huggingface.co/v1chat_completionsaggregator动态模型0
22azurehttps://{resource}.openai.azure.comchat_completionsaggregator0
23openrouterhttps://openrouter.ai/api/v1chat_completionsaggregator动态模型0
24lmstudiohttp://localhost:1234/v1chat_completionsaggregator本地模型0
25modelscopehttps://api-inference.modelscope.cn/v1chat_completionsaggregator动态模型0
26poehttps://api.poe.com/v1chat_completionsaggregator动态模型0
27nvidiahttps://integrate.api.nvidia.com/v1chat_completionsaggregator动态模型0
28ollamahttp://localhost:11434/v1chat_completionsaggregator本地模型0
29cloudflarehttps://api.cloudflare.com/client/v4/accounts/{account_id}/ai/v1chat_completionsaggregator9
30bedrockhttps://bedrock-runtime.{region}.amazonaws.comchat_completionsaggregator7
31alibabaurlMap 3 档chat_completionsmainland, api, coding-planplanType: api/token/coding11
32alibaba-intlurlMap region×planTypechat_completionsapi, coding-planregion: sg/us; planType: api/token/coding11
33minimax-cnhttps://api.minimaxi.com/v1chat_completionsmainland, coding-planplanType: api/token8
34minimaxhttps://api.minimax.io/v1chat_completionsapi, coding-planplanType: api/token8
35xiaomihttps://api.xiaomimimo.com/v1chat_completionsmainland2
36xiaomi-token-planurlMap cn/sgp/amschat_completionsmainland, coding-planregion: cn/sgp/ams2
37zhipuhttps://open.bigmodel.cn/api/paas/v4chat_completionsmainland6
38zhipu-codinghttps://open.bigmodel.cn/api/coding/paas/v4chat_completionsmainland, coding-plan6
39zaihttps://api.z.ai/api/paas/v4chat_completionsapi6
40zai-codinghttps://api.z.ai/api/coding/paas/v4chat_completionscoding-plan6
41stepfunurlMap cn/intl × api/step-planchat_completionsmainland, apiregion; planType4
42tencent-hunyuanhttps://api.hunyuan.cloud.tencent.com/v1chat_completionsmainland, apimodelType: chat/translate5
43tencent-token-planurlMap cn/intl-sg/intl-gzchat_completionsaggregator, coding-planregion11
44volcengineurlMap api/coding/agentchat_completionsmainland, aggregator, coding-planplanType9
45volcengine-intlurlMap api/codingchat_completionsaggregator, coding-planplanType8
46siliconflow-cnhttps://api.siliconflow.cn/v1chat_completionsmainland, aggregator动态模型0
47siliconflow-intlhttps://api.siliconflow.com/v1chat_completionsaggregator动态模型0
48baiduurlMap api/codingchat_completionsmainland, coding-planplanType8
49baidu-intlurlMap api/codingchat_completionsapi, coding-planplanType5

要点:

  • 协议分布:46 条目单一 chat_completions;2 条目 anthropic_messages(anthropic、vertexai-anthropic);2 条目 openai_responses(openai-responses、chatgpt-plus);1 条目三协议混合(opencode-go,协议由模型决定:chat_completions 多数 / responses 仅 gpt-5.6-luna / messages MiniMax+Qwen 全系,见 §11.3);无 gemini_native 条目(Gemini 走 OpenAI 兼容端点)
  • URL 策略:官方直连 → urlEditable=false 锁 URL;兼容/本地/网关 → urlEditable=true;多环境厂商(阿里/腾讯/火山/小米/阶跃/百度)→ urlMap 按子选项组合选 baseUrl
  • 认证差异:chat_completions 全部 Bearer;anthropic_messages 用 x-api-key(MintWord 实现,见 §3.1;国产厂商 anthropic 端点认证头差异见 §5.2 预设表)
  • opencode-go 接入:端点 https://opencode.ai/zen/go/v1,订阅 API Key(Authorization: Bearer),模型 ID 格式 opencode-go/<model-id>,动态列表权威源 https://opencode.ai/zen/go/v1/models(应轮询而非硬编码),用量 5h $12 / 周 $30 / 月 $60

11.3 模型明细(含全部配置)

OpenAI 系(openai / openai-responses / github-copilot 部分,contextWindow 均为 1M、无 maxOutput、无 thinking、D 参数)

模型 idctx备注
gpt-5.5 / gpt-5.4 / gpt-5.4-mini / gpt-5.4-nano / gpt-5.3-codex / gpt-5.21Mopenai + openai-responses 双条目
gpt-5.6-sol1.05M128k
gpt-5.6-terra1.05M128k
gpt-5.6-luna1.05M128k
github-copilot 追加:claude-opus-4-8(200k, adaptive)、claude-opus-4-7(1M, adaptive)、claude-opus-4-6(200k, budget_tokens)、claude-sonnet-4-6 / 4-5(200k, budget_tokens)、claude-haiku-4-5(200k, 无 thinking)、gemini-2.5-pro(1M, budget_tokens)、o3 / o4-mini(200k, builtin)聚合

Anthropic(anthropic / vertexai-anthropic 相同,T 参数,thinkingLevels: low/medium/high/xhigh/max)

模型 idctxmaxOutthinkingPattern
claude-opus-4-71M64kadaptive
claude-opus-4-6 / 4-5200k64kbudget_tokens
claude-sonnet-4-6 / 4-5200k64kbudget_tokens
claude-haiku-4-5200k8k无(D)
claude-opus-4-1200k64kbudget_tokens
claude-opus-4200k32kbudget_tokens
claude-sonnet-4200k16kbudget_tokens
claude-opus-51M128kadaptive($5/$25;不支持 extended thinking)
claude-sonnet-51M128kadaptive($3/$15,intro $2/$10 至 2026-08-31;不支持 extended thinking)
claude-fable-51M128kadaptive($10/$50,Mythos 架构类,高于 Opus 档;仅 adaptive thinking,budget_tokens 返回 400,禁 temperature/top_p/top_k 与 assistant 前缀,effort low~xhigh/max;2026-06-09 发布;Mythos 5 仅限 Glasswing 合作伙伴,不走通用 API)

Gemini(gemini / vertexai-google 相同;apiMode=chat_completions,T 参数)

模型 idctxthinkingPatternlevels
gemini-3.1-pro-preview / gemini-3.1-flash-preview / gemini-3-flash-preview1Mthinking_configlow/medium/high
gemini-2.5-pro / gemini-2.5-flash / gemini-2.5-flash-lite1Mbudget_tokens
gemini-3.6-flash1M65k 输出;$1.50/$7.00;thinking_config(models.dev 2026-07-21)
gemini-3.5-flash-lite1M65k 输出;$0.30/$2.50(models.dev 2026-07-21)
gemini-3.5-flash(官方文档)1M65k 输出;输入 Text/Image/Video/Audio/PDF 五模态

Grok / DeepSeek / Kimi

厂商模型 idctxthinkingPatternlevels
grokgrok-4131k
grokgrok-420-reasoning131kbuiltin
grokgrok-4.5500kbuiltin($2/$6,≥200k prompt 翻倍;models.dev 2026-07-08)
deepseekdeepseek-v4-pro / deepseek-v4-flash1Mthinking_objectlow/medium/high/max
deepseekdeepseek-v4-flash-07311M384k 输出;thinking_object;开源(models.dev 2026-07-31)
kimi / kimi-intlkimi-k2.6 / kimi-k2.5256kthinking_objectlow/medium/high
kimi / kimi-intlkimi-k31M131k 输出顶层 reasoning_effort(low/high/max,默认 max);视觉 image_url/video_url(models.dev 2026-07-16)
kimi / kimi-intlkimi-k2.7-code262k262k 输出;thinking_object(models.dev 2026-06-12)
kimi-codekimi-for-coding256kthinking_objectlow/medium/high

Mistral(F 参数为主)

模型 idctxthinking
mistral-large-latest / mistral-medium-latest / mistral-small-latest128k无(F)
magistral-medium-latest / magistral-small-latest128kbuiltin(D)
devstral-small-latest128k无(F)
codestral-latest256k无(F)
pixtral-large-latest128k无(F,多模态)

Perplexity(D 参数)

模型 idctxthinking
sonar127k
sonar-pro200k
sonar-reasoning127kbuiltin
sonar-reasoning-pro200kbuiltin
sonar-deep-research200kbuiltin

Cloudflare(全部 128k、D 参数)

glm-4.7-flash / gpt-oss-120b / gpt-oss-20b / llama-4-scout-17b / gemma-4-26b / nemotron-3-120b / qwen3-30b / llama-3.3-70b(无 thinking);deepseek-r1-distill-qwen-32b(builtin)

Bedrock(D 参数为主)

模型 idctxthinking
anthropic.claude-opus-4-71Madaptive(T)
anthropic.claude-sonnet-4-6200kbudget_tokens(T)
anthropic.claude-haiku-4-5200k
deepseek.v3.2 / meta.llama3-3-70b / meta.llama4-scout-17b128k
mistral.mistral-large-3128k无(F)

阿里(alibaba / alibaba-intl 相同,T 参数为主)

模型 idctxmaxOutthinkingPattern
qwen3.7-max(=qwen3.7-max-2026-05-20,另有 06-08 快照)1M64kenable_thinking(low/med/high)
qwen3.7-plus(=qwen3.7-plus-2026-05-261M64kenable_thinking;原生视觉-语言多模态智能体(屏幕读取/GUI 操作)(阿里云 2026-06-01 上线)
qwen3.7-flash(=qwen3.7-flash-2026-07-151M65kenable_thinking;$0.03/$0.12(阿里云 2026-07-21 上线)
qwen3.6-plus / qwen3.6-flash1M64kenable_thinking(low/med/high)
deepseek-v4-pro / deepseek-v4-flash1M384kthinking_object(low/med/high/max)
deepseek-v3.2128k32kthinking_object
kimi-k2.6 / kimi-k2.5262k98kthinking_object
glm-5.1202k131kenable_thinking
glm-5202k16kenable_thinking
MiniMax-M2.5196k32k无(D)
qwen3.8-max(=qwen3.8-max-preview 正式版)1M131kenable_thinking;2.4T 参数 MoE 旗舰,阿里云 2026-08-03 全球上线(当前 3.8 系列仅 max,3.7 系即最新全系)

MiniMax(minimax / minimax-cn 相同)

模型 idctxthinking
MiniMax-M31Madaptive(T)
MiniMax-M2.7 / M2.7-highspeed / M2.5 / M2.5-highspeed / M2.1 / M2 / M2-her256k无(F)

小米(xiaomi / xiaomi-token-plan 相同)

模型 idctxmaxOutthinking
mimo-v2.5-pro / mimo-v2.51M128kbuiltin(D)

智谱(zhipu / zhipu-coding / zai / zai-coding 相同,全部 128k、T 参数、thinking_object、levels low/med/high)

glm-5.1 / glm-5 / glm-5-turbo / glm-4.7 / glm-4.7-flash / glm-4.7-flashx glm-5.2(1M ctx / 131k 输出,thinking_object + 顶层 reasoning_effort,开源;models.dev 2026-06-13)

阶跃(stepfun)

模型 idctxthinking
step-3.7-flash / step-3.5-flash256kthinking_config(low/med/high,T)
step-3.5-flash-2603 / step-router128k无(D)

腾讯混元(tencent-hunyuan,D 参数)

模型 idctxthinkingsubOptionFilter
hunyuan-turbos-20250416 / hunyuan-large-2025022632kchat
hunyuan-t1-2025041632kbuiltin(T)chat
hunyuan-mt-20250226 / hunyuan-mt-202501078ktranslate

腾讯 Token Plan(tencent-token-plan,D 参数为主)

模型 idctxmaxOutthinking
tc-code-latest无(Auto)
minimax-m2.5 / minimax-m2.7200k128k
glm-5 / glm-5.1200k128k
kimi-k2.5256k256k
hunyuan-2.0-instruct144k16k
hunyuan-2.0-thinking192k64kbuiltin(T)
hunyuan-t196k64kbuiltin(T)
hunyuan-turbos / hunyuan-turbo48k16k

火山方舟(volcengine,按计费模式三档模型;官方文档 2026-08-04 更新)

按量计费(API,ark.cn-beijing.volces.com/api/v3 — 深度思考/文本生成/多模态理解模型:

模型 idctxmaxOut备注
doubao-seed-2-1-pro-260628256k256k豆包旗舰 Agent 通用模型
doubao-seed-2-1-turbo-260628256k256k编程/智能体/多模态
doubao-seed-2-0-lite-260428256k128k全模态理解(往期模型,未下线)
doubao-seed-2-0-mini-260428256k128k低时延(往期模型,未下线)
glm-5-2-2606171024k128k智谱托管
deepseek-v4-flash-ga-2607311024k384kFlash GA 版
deepseek-v4-pro-2604251024k384k深度思考
deepseek-v4-flash-2604251024k384k旧快照

Coding Plan(Base URL https://ark.cn-beijing.volces.com/api/coding/v3 OpenAI 协议 / api/coding Anthropic 协议)

模型ctxmaxOut备注
Auto(ark-code-latest)智能调度,优先体验最新模型
Doubao-Seed-2.1-turbo256k64k多模态视觉理解
Doubao-Seed-2.0-lite256k多模态视觉理解
MiniMax-M31024k128k编码+Agent 顶尖
Kimi-K2.7-Code256k32k最新 Coding 模型,文本/图片/视频输入
GLM-5.21024k128k1M 长上下文
DeepSeek-V4-Flash1024k384k默认 thinking,可手动关闭;正式版仅 ark-code-latest 方式,预览版 model name deepseek-v4-flash
DeepSeek-V4-Pro1024k384k尝鲜体验版,默认 thinking

Agent Plan(AFP 积分抵扣,Small/Medium/Large/Max 四档) — 仅文本生成模型(嵌入/生图/生视频/语音模型不列出):

模型ctxmaxOut档位
doubao-seed-2.0-mini256k128k全部
doubao-seed-2.0-lite256k128k全部
deepseek-v4-flash1024k384k全部
doubao-seed-2.1-turbo256k256k全部
doubao-seed-evolving1024k256k全部
minimax-m31024k128k全部
glm-5.2(glm-latest)1024k128k全部
kimi-k2.7-code256k32k全部
deepseek-v4-pro1024k384k全部(尝鲜)
kimi-k31024k128kMedium 及以上(Small 不可用)

注:均已剔除即将下线模型(doubao-seed-2.0-code、doubao-seed-2.0-pro、doubao-seed-code、minimax-m2.7、kimi-k2.6、doubao-seed-1.x、doubao-1.5 系列、glm-4-7 等)及非 LLM 能力(doubao-embedding-vision 向量化、seedream 生图、seedance 生视频、TTS/ASR、豆包搜索 Harness)。glm-5.2、deepseek-v4-flash/pro、kimi-k3 支持 1M 上下文长会话。 Responses 支持(§5.2):250615 及之后版本模型默认支持 /api/v3/responses,例外 doubao-1-5-pro-32k-character-250715;TPM 保障/精调/智能路由模型不支持。

火山方舟国际(volcengine-intl,同步国内最新模型集;区域/端点以国际控制台为准)

国际版与国内版共享同一方舟模型矩阵(OpenClaw 等生态即按该端点接入),按 §11.3 国内版三档同步更新:

档位模型
按量计费(/api/v3)doubao-seed-2-1-pro-260628、doubao-seed-2-1-turbo-260628、doubao-seed-2-0-lite-260428、doubao-seed-2-0-mini-260428、glm-5-2-260617、deepseek-v4-flash-ga-260731、deepseek-v4-pro-260425、deepseek-v4-flash-260425
Coding Plan(/api/coding)Auto(ark-code-latest)、Doubao-Seed-2.1-turbo、Doubao-Seed-2.0-lite、MiniMax-M3、Kimi-K2.7-Code、GLM-5.2、DeepSeek-V4-Flash/Pro
Agent Plan同国内版 10 个文本生成模型(kimi-k3 仅 Medium+)

剔除规则同国内版:seed 2.0 之前、即将下线(doubao-seed-2.0-code/2.0-pro、doubao-seed-code、minimax-m2.7、kimi-k2.6、glm-4-7、seed-1.x、doubao-1.5 系列)与 gpt-oss-120b 等旧模型均不列入。MintWord 旧表(glm-5.1 / glm-4.7 / kimi-k2.5 / gpt-oss-120b)已废弃。

百度千帆(baidu)

模型 idctxmaxOutthinking
ernie-5.0128k65k
ernie-4.5-turbo-128k128k12k
deepseek-v4-pro / v4-flash1M131kthinking_object(T)
glm-5.1 / glm-5202k131kthinking_object(T)
kimi-k2.5262k65kthinking_object(T)
minimax-m2.5196k131k

百度千帆国际(baidu-intl)

ernie-5.0(128k/65k/无)、deepseek-v3.2(128k/32k/thinking_object)、glm-5(202k/131k/thinking_object)、kimi-k2.5(262k/65k/thinking_object)、minimax-m2.5(196k/131k/无)

opencode-go(官方支持 18 个模型,2026-08-06)

端点 https://opencode.ai/zen/go/v1,订阅 API Key(Authorization: Bearer),模型 ID 配置格式 opencode-go/<model-id>官方支持列表 18 个(2026-08-06 订阅文档)/v1/models 曾实测返回 25 个(含 7 个已下线残留:glm-5、kimi-k2.5、mimo-v2-omni、mimo-v2-pro、minimax-m2.5、qwen3.5-plus、hy3-preview),接入时应以官方列表过滤。协议由模型决定:

模型 id(opencode-go/ 前缀)协议端点路径
gpt-5.6-lunaopenai_responses/v1/responses
minimax-m3 / minimax-m2.7anthropic_messages/v1/messages
qwen3.8-max / qwen3.7-max / qwen3.7-plus / qwen3.6-plusanthropic_messages/v1/messages
grok-4.5chat_completions/v1/chat/completions
glm-5.2 / glm-5.1chat_completions/v1/chat/completions
kimi-k3 / kimi-k2.7-code / kimi-k2.6chat_completions/v1/chat/completions
mimo-v2.5 / mimo-v2.5-prochat_completions/v1/chat/completions
deepseek-v4-pro / deepseek-v4-flashchat_completions/v1/chat/completions
hy3chat_completions/v1/chat/completions

动态模型厂商(models=[],由服务端 /models 或用户手动指定)

openai-compatible、anthropic-compatible、fully-custom、chatgpt-plus、opencode-zen、opencode-go、huggingface、azure、openrouter、lmstudio、modelscope、poe、nvidia、ollama、siliconflow-cn、siliconflow-intl

11.4 对本项目方案的可复用结论

  1. 模型能力表(§5.7)应直接采用 MintWord 的 AiModel 结构(contextWindow / maxOutput / thinkingPattern / thinkingLevels / supportedParams),7 种 ThinkingPattern 枚举与 §5.5 适配矩阵一一对应
  2. 厂商预设表(§5.7 可选阶段)可按 AiProvider 结构落地:baseUrl + apiMode + urlEditable + urlMap,其中 urlMap(子选项组合 → baseUrl)是 MintWord 处理多环境/多套餐厂商的关键模式,本项目可扩展为 sub_options 配置
  3. urlEditable 语义与 §5.3 URL 自动识别互补:urlEditable=false 时后端仍校验 URL 合法性,urlEditable=true 时允许完整端点
  4. 认证差异在 3 种头间切换(Bearer / x-api-key / api-key),本方案 §5.2 已覆盖(AuthHeader 可配)