Skip to content

模型概览

模型配置最常见的错误,是把“provider 名字”和“协议插件”混在一起。Agently 不按厂商硬编码请求路径,而是按协议层选择 requester 插件,再把 provider 的 base URL、model、api key 填进去。

先选协议,再填 provider recipe。

三个内置协议插件

text
Agent / ModelRequest
        |
        v
ModelRequester 插件
  |-- OpenAICompatible           Chat Completions 形态
  |-- OpenAIResponsesCompatible  Responses API 形态
  |-- AnthropicCompatible        Claude / Anthropic Messages 形态
        |
        v
provider HTTP endpoint
你在调用
OpenAI Chat Completions、Azure OpenAI、DeepSeek、Qwen、Kimi、GLM、MiniMax、Doubao、ERNIE、SiliconFlow、GroqOpenAICompatible
Ollama、vLLM、LM Studio、llama.cpp server 等本地 OpenAI 兼容服务OpenAICompatible
OpenAI Responses API 或说 Responses API 的私有网关OpenAIResponsesCompatible
Anthropic / Claude 原生 Messages APIAnthropicCompatible
团队自建 OpenAI Chat Completions 兼容网关OpenAICompatible
团队自建 Anthropic Messages 兼容网关AnthropicCompatible

如果端点文档里写的是 messages: [{"role": ..., "content": ...}] 和 Chat Completions,一般走 OpenAICompatible。如果写的是 Anthropic Messages、anthropic-versionmax_tokens 必填,走 AnthropicCompatible

最小配置

python
from agently import Agently

Agently.set_settings("OpenAICompatible", {
    "base_url": "https://api.deepseek.com/v1",
    "api_key": "${ENV.DEEPSEEK_API_KEY}",
    "model": "${ENV.DEEPSEEK_MODEL}",
})

agent = Agently.create_agent()
result = (
    agent
    .input("把这段报错解释成中文。")
    .output({"answer": (str, "解释", True)})
    .get_result()
)
answer = await result.async_get_data(ensure_keys=["answer"])

${ENV.*} 是环境变量占位。这样密钥不进入代码,也便于开发、测试、生产使用不同配置。

Anthropic 配置长这样:

python
Agently.set_settings("AnthropicCompatible", {
    "base_url": "https://api.anthropic.com",
    "api_key": "${ENV.ANTHROPIC_API_KEY}",
    "model": "${ENV.ANTHROPIC_MODEL}",
    "max_tokens": 4096,
})

max_tokens 是 Claude 路径上需要特别关注的字段。完整字段见 AnthropicCompatible

配置可以放在哪

范围用法适合
全局Agently.set_settings(...)应用默认模型
Agentagent.set_settings(...)某个 agent 固定使用更快或更强模型
请求agent.create_request(...) 或请求链覆盖单次任务临时切模型

全局配置让项目能跑起来。Agent 级配置适合角色固定的模型,比如“分类 agent 用小模型,写作 agent 用强模型”。请求级覆盖适合临时路由,不适合散落在业务代码里到处写默认配置。

多模型:用 model_pool 管别名

业务代码里最好使用有意义的模型别名,而不是到处写 provider 模型名。

python
agent = Agently.create_agent()
agent.set_settings("model_pool", {
    "fast-router": "qwen2.5:7b",
    "deep-reasoner": "deepseek-chat",
})
agent.set_settings("key_pool", {
    "local": "ollama",
    "deepseek-main": "${ENV.DEEPSEEK_API_KEY}",
    "deepseek-backup": "${ENV.DEEPSEEK_BACKUP_API_KEY}",
})
agent.set_settings("key_pool_strategy", {
    "qwen2.5:7b": {"mode": "fixed", "pool": ["local"]},
    "deepseek-chat": {"mode": "round_robin", "pool": ["deepseek-main", "deepseek-backup"]},
})

result = (
    agent
    .activate_model("deep-reasoner")
    .input("Summarize this incident.")
    .output({"summary": (str, "incident summary", True)})
    .get_result()
)
summary = await result.async_get_data(ensure_keys=["summary"])

activate_model(...) 影响这个 Agent 后续创建和持有的请求,包括链式 agent.input(...)agent.create_execution()。只想覆盖单次请求时,用请求级配置。

key pool 的选择策略可以是 fixedrandomround_robinleast_used。provider 错误后的 failover 需要在 api_key_pools.<pool>.failover 显式开启;没有 failover 策略时,provider 错误会直接暴露。

选择模型时的工程判断

任务常见选择
分类、路由、字段提取小模型或本地模型,配结构化输出
起草、复杂推理、评审更强模型,配清晰 schema 和校验
embeddingembedding 模型,作为 embedding agent 用于知识库
工具调用确认 provider 的 tool calling 协议支持
流式 UI确认该 provider 的流式格式能被插件解析

模型能力会随 provider 更新。官网 recipe 提供配置形状;具体可用模型名和价格,以 provider 当前文档和团队自己的验证为准。

读什么