news 2026/9/14 17:36:31

如何用 Pydantic AI Gateway 用一个 key 访问多个模型 provider

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何用 Pydantic AI Gateway 用一个 key 访问多个模型 provider

如何用 Pydantic AI Gateway 用一个 key 访问多个模型 provider

【免费下载链接】pydantic-aiHow Python does AI. Agents, realtime voice, image generation, embeddings. Every model, every interface, typed end to end.项目地址: https://gitcode.com/GitHub_Trending/py/pydantic-ai

如果你的 Python 服务同时调用 OpenAI、Anthropic、Google、Groq、AWS Bedrock 等多家模型,目前需要分别保存各家 API key、配置各自的 base URL 与 SDK。Pydantic AI Gateway 提供了一条替代路径:在 Pydantic Logfire 中开通 Gateway 并创建一把 Gateway API key,之后所有模型请求都通过gateway/<api_format>:<model_name>模型串发往同一个网关,由网关按请求路由到上游 provider。本文的主路径是:在 Pydantic AI 项目中用这把 key 替换掉多家 key,并用同一把 key 依次请求不同 provider 的模型完成验证。适用前提:pydantic-ai版本 1.16 或更高(Gateway 文档明确给出该版本要求),Python 3.10+(安装文档的要求)。

1. 在 Logfire 中开通 Gateway 并创建 API key

按 Gateway 文档 的 Quick Start,这是一组在 Logfire 控制台(logfire.pydantic.dev)完成的操作:

  1. 注册并选择一个区域创建账户——区域(gateway-usgateway-eu)会影响后续网关地址,创建后无法在代码里绕过;
  2. 在组织设置(organization's settings)中激活 Gateway;
  3. 进入组织的 Gateway settings,创建一把 API key,形如pylf_v...

注意这把 key 是单 key 多 provider的核心:文档明确列出 "API key management: Access multiple LLM providers with a single Gateway key"。key 同时决定了计费方式——你可以选择 BYOK(自带各 provider 的 key)或直接在平台付费,两种模式共用同一把 Gateway key。

2. 升级 pydantic-ai 并配置密钥

Gateway 功能要求pydantic-ai1.16 及以上。升级命令(Gateway 文档原文给出两种):

uv sync -P pydantic-ai

或:

pip install -U pydantic-ai

然后把 Gateway key 设置为环境变量:

export PYDANTIC_AI_GATEWAY_API_KEY="pylf_v..."

其中pylf_v...替换为你在 Logfire Gateway settings 中创建的 key。若环境变量未设置,gateway_provider(...)会直接抛出UserError,提示设置PYDANTIC_AI_GATEWAY_API_KEY或通过gateway_provider(..., api_key=...)传入(见 providers/gateway.py),这是"key 没配好"时最直接的报错现象。

3. 用gateway/<provider>:<model>模型串请求不同 provider

配置好环境变量后,Agent的模型串从直接指定 provider 改为gateway/<api_format>:<model_name>格式,代码其余部分不变:

from pydantic_ai import Agent agent = Agent('gateway/openai:gpt-5.2') result = agent.run_sync('Where does "hello world" come from?') print(result.output)

文档示例输出(仅示例,实际回复以模型为准):

The first known use of "hello, world" was in a 1974 textbook about the C programming language.

同一把 key 访问其他 provider,只需要改模型串。Gateway 文档给出的 provider / API 格式 / 示例模型对照如下:

ProviderAPI Format示例模型串
OpenAIopenaigateway/openai:gpt-5.2
Anthropicanthropicgateway/anthropic:claude-sonnet-4-6
Google Cloud (formerly Vertex AI)google-cloudgateway/google-cloud:gemini-3-flash-preview
Groqgroqgateway/groq:openai/gpt-oss-120b
AWS Bedrockbedrockgateway/bedrock:amazon.nova-micro-v1:0

也就是说,上面脚本中的Agent('gateway/openai:gpt-5.2')换成Agent('gateway/anthropic:claude-sonnet-4-6')即改为请求 Anthropic 的模型,PYDANTIC_AI_GATEWAY_API_KEY保持不变。一个边界说明:gateway/googlegateway/google-cloud的便捷别名,二者落到同一后端(源码中见 normalize_gateway_provider 的别名表);图片生成经由网关时使用的就是gateway/google:<model>形式。

4. 可选:直接传 key 或用 route 指定上游端点

如果你不想依赖环境变量,可以在代码里直接创建 provider(Gateway 文档"Passing API Key directly"一节):

from pydantic_ai import Agent from pydantic_ai.models.openai import OpenAIChatModel from pydantic_ai.providers.gateway import gateway_provider provider = gateway_provider('openai', api_key='pylf_v...') model = OpenAIChatModel('gpt-5.2', provider=provider) agent = Agent(model)

这里api_key='pylf_v...'需替换为你的 Gateway key。gateway_provider还支持route参数,用于选择替代的上游 provider 或自定义网关端点:

provider = gateway_provider( 'openai', api_key='pylf_v...', route='builtin-openai', )

route取的是 Logfire 中网关端点的 slug(不传时使用该 API 格式的默认端点,见 gateway_provider 的文档说明)。base_url参数同理:不传时会依次读取PYDANTIC_AI_GATEWAY_BASE_URL环境变量,再不行就从 key 中编码的区域推断(如https://gateway-us.pydantic.dev/proxy);若 key 无法推断区域,源码会抛出要求"重新生成 key 或显式设置PYDANTIC_AI_GATEWAY_BASE_URL"的UserError

5. 验证接入是否生效

文档给出的验证方式是直接跑请求:run_sync返回非空回复(如第 3 节示例输出)即说明这把 key 已成功路由到上游。要确认"一把 key 访问多个 provider",把模型串依次替换为对照表中的gateway/anthropic:...gateway/groq:...gateway/bedrock:...等再各跑一次即可。

仓库内还有一个更完整的验证脚本可供参考:tests/providers/test_gateway_catalog.py 会对所有已知的gateway/模型串做冒烟测试,断言agent.runrun_stream都能拿到非空输出;该测试需要--run-gateway-live参数与PYDANTIC_AI_GATEWAY_API_KEY(或旧名PAIG_API_KEY),且会向真实上游发起请求,属于仓库 CI 用途,不需要在日常接入中运行。

6. 常见问题与限制

  • 请求被拒,报"无法计算花费":每个 provider 设置中有一个Require pricing data开关(默认开启)。开启时,网关对没有定价数据的模型会在转发前直接拒绝——内置(Pydantic 托管)provider 返回404,提示到 Slack 反馈以便补录模型;自定义(BYOK)provider 返回400,提示需要定价数据,并说明可以关闭该开关放行。关闭后请求能过,但花费不计入成本限额。这是接入新模型时最容易遇到的拦截。
  • 支持范围有限:当前网关覆盖 OpenAI、Anthropic、Google Vertex、Groq、AWS Bedrock 五家(文档注明 "More providers coming soon");模型串里的 API 格式必须以这五家之一为准,不支持的格式会抛出Unknown upstream provider错误。
  • 区域绑定:key 与 Logfire 区域绑定,推断出的 base URL 为https://gateway-{region}.pydantic.dev/proxy;跨区域访问需要换 key 或显式设置 base URL。
  • 多 provider 容灾与负载:如需让同一模型在多个 provider 之间 failover 或按权重负载均衡,在 Logfire 的 Gateway -> Endpoints 中创建网关端点(为各 provider 设置 Priority、Weight、Active),再在gateway_provider(..., route='<端点 slug>')中引用该 slug——这属于网关端配置,代码侧只改route一个参数。

Gateway 文档同时还给出了 Claude Code、Codex、OpenAI SDK / Anthropic SDK / Vercel AI SDK 直连网关 proxy 路径的配置方式(gateway-us/gateway-eu两套 base URL),如果你的调用方不是 Pydantic AI 而是这些工具,可按 Gateway 文档 的对应章节操作,key 仍是同一把。

【免费下载链接】pydantic-aiHow Python does AI. Agents, realtime voice, image generation, embeddings. Every model, every interface, typed end to end.项目地址: https://gitcode.com/GitHub_Trending/py/pydantic-ai

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/14 17:35:59

Python属性测试:动态类型安全的工程实践

1. 项目概述&#xff1a;当Python遇上属性测试十年前我刚接触Python时&#xff0c;曾被它的动态类型系统深深吸引——不需要声明变量类型&#xff0c;赋值即定义&#xff0c;这种灵活性让开发效率大幅提升。但很快我就尝到了苦头&#xff1a;一个本该是整数的变量突然变成了字符…

作者头像 李华
网站建设 2026/9/14 17:35:22

iii 安装指南:使用官方 curl 安装器安装 iii 引擎并验证环境

iii 安装指南&#xff1a;使用官方 curl 安装器安装 iii 引擎并验证环境 【免费下载链接】iii Effortlessly compose, extend, and observe every service in real-time for the first time ever. 项目地址: https://gitcode.com/GitHub_Trending/mo/iii 本篇技术指南以…

作者头像 李华
网站建设 2026/9/14 17:35:19

Zerox OCR 上手指南:PDF、Word、图片如何快速转成 Markdown

Zerox OCR 上手指南:PDF、Word、图片如何快速转成 Markdown 【免费下载链接】zerox OCR & Document Extraction using vision models 项目地址: https://gitcode.com/GitHub_Trending/ze/zerox Zerox 是一个开源的 OCR 文档提取工具,核心思路一句话就能说清:它不靠传…

作者头像 李华
网站建设 2026/9/14 17:34:55

从 DSpark 聊聊大模型 Decoding 提速的技术演化

LLM 生成 Token 是串行的&#xff1a;产生第 N 个 Token&#xff0c;必须把前 N−1 个 Token 统统塞回模型里&#xff0c;重新算一遍矩阵乘法。由于现代 GPU 拥有海量的并行计算单元&#xff08;ALU&#xff09;&#xff0c;一次只算一个 Token 根本填不满 GPU 的吞吐能力&…

作者头像 李华