- 人工智能
- AI Agent
- Agent 框架
- 后端
- 多智能体
- RAG
- 工具调用
- Agent 记忆
【免费下载链接】voltagent
AI Agent Engineering Platform built on an Open Source TypeScript AI Agent Framework
VoltAgent 内置了一个基于 models.dev 数据快照生成并随包分发的模型注册中心,支持 80+ 个 Provider、2193+ 个模型。开发者只需使用provider/model形式的字符串即可完成模型路由,无需为每个厂商单独安装 Provider 包;当需要厂商专属能力(如自定义请求头、推理强度控制)时,也可以直接传入 ai-sdk 的LanguageModel。读完本文你将掌握:模型字符串的快速上手、类型安全的模型 ID、运行时动态选型、Provider 专属参数透传,以及注册中心底层的自动刷新与环境变量解析机制。
核心概念:模型字符串与 LanguageModel 双通道
VoltAgent 的模型接入遵循“两条通道”设计,二者可在Agent配置中自由混用:
- 模型字符串(Model strings):形如
openai/gpt-4.1-mini、anthropic/claude-3-5-haiku的provider/model标识。这是零导入路由通道——你不需要安装任何厂商 SDK,VoltAgent 会在运行时按需加载对应 Provider 包。 - ai-sdk
LanguageModel:直接传入 Vercel AI SDK 生态的模型实例(如mistral("mistral-small-latest")),适合需要精细控制 Provider 行为、自定义 baseURL/headers 的场景。
两条通道在类型层面被统一为AgentModelReference = LanguageModel | ModelRouterModelId(见 agent/types.ts),因此Agent的model配置可以自由接受字符串或模型实例。
快速开始:零导入模型字符串
在Agent的model字段直接写入provider/model字符串即可,无需安装任何 Provider 包:
import { Agent } from "@voltagent/core"; // OpenAI const openaiAgent = new Agent({ name: "openai-summary", instructions: "Summarize the update in 2 bullets.", model: "openai/gpt-4.1-mini", }); // Anthropic const claudeAgent = new Agent({ name: "claude-notes", instructions: "Turn notes into action items.", model: "anthropic/claude-3-5-haiku", }); // Google Gemini const geminiAgent = new Agent({ name: "gemini-translator", instructions: "Translate to Turkish and keep tone friendly.", model: "google/gemini-2.0-flash", }); // xAI const grokAgent = new Agent({ name: "grok-ideas", instructions: "Brainstorm five product names.", model: "xai/grok-3-mini", }); // OpenRouter(注意:路由前缀中包含厂商的嵌套格式) const openrouterAgent = new Agent({ name: "openrouter-agent", instructions: "Answer in short paragraphs.", model: "openrouter/anthropic/claude-3.5-haiku", });字符串格式的底层解析规则
模型字符串并非简单的“把字符串塞给 SDK”,而是由注册中心统一解析。在 model-provider-registry.ts 的splitModelId中可以看到:
- 以第一个
/分隔providerId与modelId(provider/model); - 若没有
/,则回退尝试provider:model冒号分隔格式; - 分隔后任一侧为空,或格式均不匹配,会抛出
Invalid model id "...". Use "provider/model".` 的明确错误。
也就是说,provider/model字符串会被拆解为 Provider 标识与模型 ID,再交由对应的 Provider 工厂构造真实的LanguageModel。
Provider 目录与注册中心快照
VoltAgent 的注册中心快照来自 models.dev,每个 Provider 的独立页面(如 openai.md)包含:用法示例、必需的环境变量、默认 base URL 说明以及从注册快照拉取的全部模型清单。
这些文档与类型文件均由 generate-model-docs.js 自动生成,其数据源是packages/core/src/registries/model-provider-registry.generated.ts与model-provider-types.generated.ts两个自动生成文件——这也解释了为什么文档中会标注“DO NOT EDIT MANUALLY”。
常用 Provider 的环境变量速查
| Provider | 模型前缀 | 必需环境变量 |
|---|---|---|
| OpenAI | openai | OPENAI_API_KEY |
| Anthropic | anthropic | ANTHROPIC_API_KEY |
| Google Gemini | google | GOOGLE_GENERATIVE_AI_API_KEY或GEMINI_API_KEY |
| xAI | xai | XAI_API_KEY |
| OpenRouter | openrouter | OPENROUTER_API_KEY |
| Amazon Bedrock | amazon-bedrock | AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY、AWS_REGION |
| Azure | azure | AZURE_RESOURCE_NAME、AZURE_API_KEY |
| Google Vertex | google-vertex | GOOGLE_VERTEX_PROJECT、GOOGLE_VERTEX_LOCATION、GOOGLE_APPLICATION_CREDENTIALS |
| Groq | groq | GROQ_API_KEY |
| Mistral | mistral | MISTRAL_API_KEY |
| Hugging Face | huggingface | HF_TOKEN |
| GitHub Copilot / GitHub Models | github-copilot/github-models | GITHUB_TOKEN |
| DeepSeek | deepseek | DEEPSEEK_API_KEY |
| Zhipu AI | zhipuai | ZHIPU_API_KEY |
完整 80+ Provider 的环境变量矩阵可查阅 Providers overview。除表格所列,还有 Cerebras、Cohere、Fireworks AI、Perplexity、Together AI、NVIDIA、硅基流动(SiliconFlow)、MiniMax、Moonshot AI、v0、Vercel AI Gateway、Weights & Biases 等众多厂商。
环境变量缺失时的精确报错
注册中心“知道每个 Provider 期望哪些环境变量”,并在运行时做精确校验。相关逻辑位于 model-provider-registry.ts:requireApiKey会先筛选出KEY/TOKEN/SECRET模式的环境变量名,再逐一读取process.env;若全部缺失,会抛出类似下面的错误,明确指出需要设置哪个变量:
Missing API key for "openai". Set process.env.OPENAI_API_KEY.此外,resolveBaseUrl(model-provider-registry.ts)支持两种 base URL 覆盖方式:优先读取 env 列表中名称匹配ENDPOINT|BASE_URL|BASEURL的变量,其次读取惯例命名<PROVIDER_ID>_BASE_URL(例如OPENAI_BASE_URL),最后才回退到注册快照中的默认api地址。
类型安全的模型 ID:ModelRouterModelId
直接手写字符串容易拼错模型名。VoltAgent 提供ModelRouterModelId类型,为每个 Provider 枚举出快照中全部有效模型,从而获得 IDE 自动补全与类型校验:
import type { ModelRouterModelId } from "@voltagent/core"; const modelId: ModelRouterModelId = "openai/gpt-4.1-mini"; // ✓ 合法 // const bad: ModelRouterModelId = "openai/not-a-real-model"; // ✗ 编译报错该类型的实际定义由注册中心的类型生成器产出(model-provider-registry.ts):它遍历所有 Provider 的模型列表,构造出`${ProviderId}/${ProviderModelsMap[P][number]}`的模板字面量联合类型,并兜底(string & {})以兼容快照更新前的旧字符串。同时ProviderForProvider、ProviderModelsMap等辅助类型也可用于更细粒度的泛型约束。
在 agent.spec-d.ts 的类型测试中,可以验证ModelRouterModelId对静态字符串、异步动态函数(async () => "openai/gpt-4o-mini")以及非法返回值(如数字123)的约束行为。
拆分工作负载:为不同步骤分配不同模型
通过创建多个Agent,可以把“高吞吐步骤”和“关键分析步骤”拆分到成本不同的模型上:
import { Agent } from "@voltagent/core"; // 吞吐密集:抽取实体与关键事实 const ingestAgent = new Agent({ name: "ingest-agent", instructions: "Extract entities and key facts from raw notes.", model: "google/gemini-2.0-flash", }); // 关键分析:审查总结并标记风险或缺口 const reviewAgent = new Agent({ name: "review-agent", instructions: "Review the summary and flag risks or gaps.", model: "anthropic/claude-3-5-sonnet", });运行时动态选型:按请求上下文路由模型
Agent的model字段支持函数形式(ModelDynamicValue<T>,见 agent/types.ts),可以根据每次请求的上下文动态决定模型——非常适合按租户、按套餐档位、按任务复杂度路由:
const agent = new Agent({ name: "runtime-router", model: ({ context }) => { const tier = (context.get("tier") as string) || "fast"; return tier === "fast" ? "openai/gpt-4.1-mini" : "anthropic/claude-3-5-sonnet"; }, });AgentModelValue(agent/types.ts)进一步支持静态值、动态函数与模型回退列表(AgentModelConfig[])三种形态,其中回退列表中的每一项可配置id(用于日志标识)、model(静态或动态引用)、maxRetries与enabled开关。
Provider 专属选项透传:providerOptions
当需要按请求传入厂商专属参数时,可在调用方法(如generateText)的第二参数中通过providerOptions透传:
const analyst = new Agent({ name: "analyst", instructions: "Explain tradeoffs clearly and concisely.", model: "openai/o3-mini", }); const response = await analyst.generateText( "Compare JWTs vs cookies for auth.", { providerOptions: { openai: { reasoningEffort: "high" }, }, }, );providerOptions的键是 Provider 名称,值为该 Provider 的 SDK 选项对象。从 agent/types.ts 的导入可以看出,VoltAgent 直接复用@ai-sdk/openai、@ai-sdk/anthropic、@ai-sdk/google、@ai-sdk/xai等包导出的ProviderOptions类型,确保reasoningEffort、temperature、thinking等参数获得类型提示。
自定义请求头:传入 ai-sdk LanguageModel
如果需要自定义请求头(如携带来源标识、调试信息),模型字符串通道无法表达,应直接构造 ai-sdk 的LanguageModel传给Agent:
import { Agent } from "@voltagent/core"; import { createOpenAICompatible } from "@ai-sdk/openai-compatible"; const customProvider = createOpenAICompatible({ name: "openai", baseURL: "https://api.openai.com/v1", apiKey: process.env.OPENAI_API_KEY, headers: { "X-Client-Source": "voltagent-docs", }, }); const agent = new Agent({ name: "custom-agent", model: customProvider("gpt-4o-mini"), });注意:VoltAgent 目前尚未内置模型回退链(fallback chains)。如需重试或故障转移,请在应用层自行实现(例如基于
AgentModelConfig[]的maxRetries机制,或自行捕获错误后切换到备用模型)。
直接使用 ai-sdk Provider 模块
凡是 VoltAgent 期望LanguageModel的地方,都可以直接使用任意 ai-sdk Provider 模块的模型实例:
import { mistral } from "@ai-sdk/mistral"; import { Agent } from "@voltagent/core"; const agent = new Agent({ name: "mistral-agent", model: mistral("mistral-small-latest"), });这要求你自行安装对应的 ai-sdk Provider 包(如@ai-sdk/mistral),适合需要模型字符串通道未覆盖的精细选项,或使用社区自定义 Provider 的场景。
底层原理:注册中心的自动刷新与按需加载
ModelProviderRegistry(model-provider-registry.ts)是单例实现,其关键机制如下:
静态注册 + 动态刷新。构造时先注册STATIC_PROVIDER_REGISTRY(自动生成的 providers 加上 Ollama、MiniMax 等 EXTRA 条目),随后在非production环境下启动自动刷新:默认每 30 分钟(DEFAULT_AUTO_REFRESH_INTERVAL_MS = 30 * 60 * 1000)从https://models.dev/api.json拉取最新注册数据(model-provider-registry.ts),并将快照缓存到~/.voltagent/model-registry/provider-registry.json,同时把生成的.d.ts类型文件写入缓存目录与@voltagent/core的dist/registries下。
按需懒加载 Provider 包。resolveLanguageModel("openai/gpt-4.1-mini")(model-provider-registry.ts)先拆解字符串,再通过getProviderEntry触发生成 loader:loader 动态import(config.npm)对应 Provider 包,并按 npm 包名分发到不同的适配器(PACKAGE_ADAPTERS,见 model-provider-registry.ts)——例如@ai-sdk/openai走buildApiKeyProvider、@ai-sdk/openai-compatible走buildOpenAICompatibleProvider、@ai-sdk/azure走buildAzureProvider、@ai-sdk/amazon-bedrock走buildAmazonBedrockProvider。加载结果会被缓存,同一 Provider 的并发请求会共享同一个 pending Promise,避免重复加载(model-provider-registry.ts)。
环境变量即配置。每个适配器从注册条目中读取env列表并映射到process.env:API Key 类走requireApiKey,Azure 需要RESOURCE_NAME,Bedrock 需要AWS_REGION/AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY,Vertex 需要PROJECT/LOCATION,Workers AI 需要ACCOUNT_ID。若某个 Provider 包未安装,loader 会抛出提示Install the package and try again的可读错误。
实战建议
- 优先使用模型字符串:无额外依赖、开箱即用,且注册快照已内置完整模型清单,配合
ModelRouterModelId享受类型安全; - 动态选型服务多租户:把
model写成函数,按context中的租户/套餐/任务类型返回不同模型,兼顾成本与质量; - Provider 专属能力用
providerOptions透传:如reasoningEffort、thinking等厂商特有参数,无需放弃字符串通道; - 自定义请求头/私有网关必须用
LanguageModel:通过createOpenAICompatible等工厂自定义baseURL与headers,可对接自建网关或兼容 OpenAI 协议的私有端点; - 生产环境注意:注册中心在生产模式下默认不做自动刷新,模型清单以随包快照为准;同时确认所需 Provider 的 npm 包已安装,并检查注册文档中列出的全部环境变量。
- 人工智能
- AI Agent
- Agent 框架
- 后端
- 多智能体
- RAG
- 工具调用
- Agent 记忆
【免费下载链接】voltagent
AI Agent Engineering Platform built on an Open Source TypeScript AI Agent Framework
相关推荐
PyTorch Image Models模型注册:MLflow Model Registry终极指南
PyTorch Image Models模型注册:MLflow Model Registry终极指南 PyTorch Image Models(简称timm)是
人工智能计算机视觉深度学习预训练VoltAgent 接入 Groq:用 `groq/<model>` 模型路由构建超快推理 AI Agent(with-groq-ai 示例全解)
VoltAgent 接入 Groq:用 groq/<model 模型路由构建超快推理 AI Agent(with groq ai 示例全解) VoltAgent
人工智能AI AgentAgent 框架后端多智能体RAG工具调用Agent 记忆Agent 工作流AI 评测MCP 服务MCP Clients语音10 分钟上手:res-downloader 代理嗅探下载网络资源完整教程
10 分钟上手:res downloader 代理嗅探下载网络资源完整教程 刷微信视频号看到一条 3 分钟的教程视频,想存到本地却找不到保存按钮;抖音、小红书的
桌面应用网络音视频
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考