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).