跳转至

Provider 能力文档 - 总览

面向 Flyto Engine 使用者的 Provider 选型指南


1. 快速选型决策树

是否需要本地模型?
├── 是 → 是否有 GPU?
│         ├── 是 → Ollama(灵活,模型多)
│         └── 否 → LM Studio(桌面端,GUI 管理)
└── 否 → 是否需要多模型聚合?
          ├── 是 → OpenRouter(300+ 模型,一个 Key)
          └── 否 → 商业模型
                    ├── 追求最强智能 → Anthropic Claude
                    ├── 追求性价比 → MiniMax M2.7
                    └── 生态丰富 → OpenAI GPT-4o

2. Provider 能力矩阵

Provider 认证方式 Streaming Tool Use Thinking Caching 多模型
Anthropic x-api-key / Bearer ✗(自家)
OpenAI Bearer ✓(o1/o3 系列) ✓(implicit)
Gemini Query param / Bearer ✓(2.5 + thinking-exp) ✓(除 -exp 模型)
MiniMax Bearer ✓(M2.1+) ✓(M2 系列 ≥1024t)
Ollama ✓(取决模型)
LM Studio ✓(取决模型)
OpenRouter Bearer ✓(统一 reasoning) ✓(仅 Anthropic 后端) ✓(300+)

3. 成本对比(仅供参考,以官网为准)

Provider/Model Context Input $/1M Output $/1M
Claude Sonnet 4.6 200K $3 $15
Claude Opus 4.6 200K $5 $25
Claude Haiku 4.5 200K $0.8 $4
GPT-4o 128K $2.5 $10
Gemini 2.0 Flash 1M $0.10 $0.40
MiniMax M2.7 205K $0.3 $1.2
DeepSeek R1 (via OR) 64K $0.7 $2.5

4. 配置通用字段

各 Provider 的 Config独立类型(不存在统一的 flyto.Config),但大多数都有以下惯用字段:

字段 类型 用途 默认 适用
APIKey string 凭证 - anthropic / openai / gemini / minimax / openrouter
BaseURL string 覆盖默认端点(私有代理 / Azure / 测试 mock) 各 provider 不同 全部 7 个
HTTPClient *http.Client 自定义客户端(代理,超时) http.DefaultClient 全部 7 个
ModelOverrides []flyto.ModelInfo 覆盖或扩展静态模型表 nil anthropic / openai / gemini / minimax

特有字段: - gemini: BearerToken(Vertex AI 模式),ThinkingBudget - minimax: Mode(Native/OpenAI/Anthropic), Region(China/Global),ThinkingBudget - openrouter: SiteURL/AppName(排行榜),DefaultThinking/DefaultThinkingTokens,EnableCaching - ollama / lmstudio: 仅 BaseURL + HTTPClient(无 APIKey)


5. 各 Provider 文档

  • Anthropic - Claude 系列,最强智能
  • OpenAI - GPT 系列,生态丰富
  • Gemini - Google 双模式(AI Studio + Vertex)
  • MiniMax - M2.7 高性价比,三 API 模式
  • Ollama - 本地模型,灵活部署
  • LM Studio - 桌面 GUI,本地模型
  • OpenRouter - 300+ 模型聚合,单 Key

6. 数据驱动能力(Data-Driven Capabilities)

2026-04 起全部 7 个 provider 都按此模式工作.设计源文档:../architecture/data-driven-capabilities-rfc.md

核心思想:Provider 的能力决策(MaxTools / SupportsThinking / SupportsCaching 等)从"包内硬编码常量"升级为"数据驱动"--由 ModelRegistry 注入到 flyto.Request.Capabilities,包内 const 降级为兜底安全值.registry 数据由 capability-probe 实测填充.

数据流:

capability-probe (offline)
       ↓ writes
~/.flyto/capabilities/capabilities.json
       ↓ pricing.LoadAndRegister
ModelRegistry (in-memory)
       ↓ engine.BuildAndStream 注入
flyto.Request.Capabilities *ModelInfo (per-request 快照)
       ↓ provider 读取
provider.resolveXxx(req) helper: registry 优先 + 包内兜底

双开关协议(want × can):用户 want 某能力(Config.EnableCaching=true / req.NeedsThinking=true 等)但模型 can=false(registry 声明不支持)时,能力不启用,provider 在流开头 emit WarningEvent{Code:"feature_unsupported"},让 engine / observer / TUI 看到这种 silent disable.

兜底策略分化(设计决策):

兜底类型 适用 provider 理由
静态表查询 anthropic / openai / gemini / minimax 有包内 xxxModels 表,SupportsThinking 等字段可直接查
const 0 + false ollama / lmstudio 本地模型保守假设不支持
兜底 true(反转) openrouter 没有静态表,必须假设支持以零回归

七个 provider 的具体实现见各自文档的"数据驱动能力"章节.若要实现新 provider 接入此机制,参考 消费者迁移指南.


7. 添加新 Provider

要添加新的 Provider,需要实现 flyto.ModelProvider 接口(定义见 core/pkg/flyto/provider.go):

type ModelProvider interface {
    // Name 返回 provider 标识,如 "openai"、"ollama"。
    Name() string

    // Stream 向模型发送请求,返回事件流;channel 关闭表示流结束。
    Stream(ctx context.Context, req *Request) (<-chan Event, error)

    // Models 返回此 provider 可用的模型列表(用于选型/定价/进度条)。
    Models(ctx context.Context) ([]ModelInfo, error)
}

只有 3 个方法.无 DefaultModel,无 Close,无回调式 API--流式输出统一通过 channel 推送(背压天然,for range 直接消费).

参考 core/pkg/providers/shared/ 提供的脱敏工具,以及 core/internal/wire/ 中三种协议的复用客户端(OpenAI 兼容 / Anthropic / Gemini).