lang: zh slug: portkey-ai-gateway-production title: ‘门钥匙人工智能网关2026’ description: ‘Portkey AI Gateway 将 200 多个 LLM 模型统一在一个 API 后面 — 负载平衡、后备路由、支出跟踪、缓存和企业可观察性。 生产设置指南。’ tags: [“open-source”] date: 2026-05-20 00:00:00+08:00 lastmod: 2026-05-20 00:00:00+08:00 tech_stack: [] application_domain: Llm Frameworks source_version: ’' licensing_model: Open Source license_type: MIT file_size: ’' file_md5: ’' download_url: ’' backup_url: ’' github_repo: ‘https://github.com/Portkey-AI/gateway' last_maintained: ‘2026-05-20’ draft: false categories: [’llm-frameworks’] aliases:

  • /posts/portkey-ai-gateway-production/ faqs:
    • q: ‘What models and providers does Portkey AI Gateway support?’ a: ‘Portkey AI Gateway unifies 200+ models across 20+ providers behind a single API, including OpenAI (GPT-4o, GPT-4o-mini, o3), Anthropic (Claude 4, Claude 3.5), Google Gemini 2.5, Azure OpenAI, Cohere, Mistral, Together AI, Groq, and Perplexity. New providers are added regularly.’
    • q: ‘Is Portkey AI Gateway free to self-host?’ a: ‘Yes. Portkey AI Gateway is open-source under the MIT license and completely free to self-host via Docker, Kubernetes, or as a standalone Node.js application. The managed cloud version adds features like a web dashboard and advanced analytics with usage-based pricing.’
    • q: ‘How does Portkey’’s request caching reduce LLM costs?’ a: ‘Portkey offers two caching modes: exact match, where identical requests return cached responses, and semantic match, where similar requests are matched by embedding similarity above a configurable threshold. Caching is set per request with TTL and similarity-threshold parameters, cutting both cost and latency on repeated queries.’
    • q: ‘How does Portkey’’s fallback routing handle provider outages?’ a: ‘Fallback routing uses a priority-ordered list of provider targets. If the primary provider fails with a timeout, 5xx error, or rate limit, the gateway automatically retries the request with the next provider in the chain. Retry counts, timeouts, and the model used can be configured per target.’
    • q: ‘Can I use Portkey AI Gateway with existing OpenAI SDK code?’ a: ‘Yes. Portkey is drop-in compatible with the OpenAI SDK. You only change the client’’s base_url to your gateway endpoint (e.g. http://localhost:8787/v1) and use your Portkey gateway API key as the api_key; existing chat completion calls run unchanged.’

featureImage: /images/articles/portkey-ai-gateway-2026-200-모델을-관리하는-llm.jpg #

{{< resource-info >}}

Managing multiple Large Language Model (LLM) providers in production is a nightmare. Each provider has its own API format, authentication scheme, rate limits, and failure modes. Your application code becomes littered with conditional logic for OpenAI, Anthropic, Google, Azure, and the dozens of new providers emerging every month. Enter Portkey AI Gateway — the open-source LLM gateway that unifies 200+ models behind a single API, complete with load balancing, fallback routing, spend tracking, request caching, and enterprise-grade observability.

In this comprehensive guide, we’ll walk through a production-ready setup of Portkey AI Gateway. You’ll learn how to route requests across multiple providers, implement intelligent fallbacks, monitor spending, cache responses, and enforce guardrails — all while keeping your application code clean and provider-agnostic.

Quick Start: Portkey AI Gateway is open-source under MIT license with 14,000+ GitHub stars. You can self-host it or use the managed cloud option. Ready? Let’s dive in.

什么是Portkey AI网关?Portkey AI Gateway 是一个位于您的应用程序和 LLM 提供商之间的开源 AI 网关。 将其视为专为 AI 工作负载设计的智能反向代理。 它规范了来自 OpenAI、Anthropic、Google、Azure、Cohere、Mistral 等提供商的 200 多个模型的 API 表面,因此您的代码只需要使用一种语言。网关处理 LLM 生产部署的混乱部分:- 统一 API:一个端点适用于 20 多个提供商的 200 多个模型 #

  • 负载平衡:跨多个 API 密钥或提供商分配流量
  • 后备路由:当提供程序关闭时自动进行故障转移
  • 请求缓存:缓存相同的请求以降低成本和延迟
  • 支出跟踪:实时了解您的人工智能支出
  • 提示管理:独立于代码对提示进行版本控制和管理
  • 护栏:执行内容政策和安全检查
  • 可观察性:完整的请求/响应日志记录、指标和跟踪无论您是运行单一模型的初创公司还是拥有数十个提供商的企业,Portkey 都能提供您生产 AI 应用程序所需的基础设施层。—## 架构概述和部署选项Portkey AI网关提供两种部署模式:云(托管)自托管。 该架构围绕轻量级高性能网关服务器构建,该服务器拦截 LLM 请求、应用您配置的策略并将其路由到适当的提供商。### 云部署最快的入门方法是使用 Portkey 的托管云服务。 在 Portkey.ai 注册,创建 API 密钥,然后就可以路由请求了。 云选项可以为您处理扩展、更新和基础设施维护。### 自托管部署对于具有严格数据驻留或安全要求的组织来说,自托管是最佳选择。 网关可以通过 Docker、Kubernetes 部署,也可以作为独立的 Node.js 应用程序部署。使用 Docker 部署:```` bas h
克隆存储库 #

git 克隆 https://github.com/Portkey-AI/gateway.git CD网关

使用 Docker 运行 #

docker run -p 8787:8787 -e PORTKEY_GATEWAY_API_KEY=your-gateway-key portkeyai/gateway:latest **使用 Docker Compose 进行部署:** yam l 版本:‘3.8’ 服务: 门钥匙网关: 图片:portkeyai/网关:最新 端口:

  • “8787:8787” 环境:
  • PORTKEY_GATEWAY_API_KEY=${GATEWAY_API_KEY}
  • CACHE_E``` yam l 版本:‘3.8’ 服务: 门钥匙网关: 图片:portkeyai/网关:最新 端口:
  • “8787:8787” 环境:
  • PORTKEY_GATEWAY_API_KEY=${GATEWAY_API_KEY}
  • CACHE_ENABLED=true
  • CACHE_TTL=3600 卷:
  • ./config:/应用程序/config 重新启动:除非停止
标签:
应用程序:端口钥匙网关
规格:
容器:
- 名称:网关
图片:portkeyai/网关:最新
端口:
- 集装箱端口:8787
环境:
- 名称:PORTKEY_GATEWAY_API_KEY
值来自:
秘密密钥参考:
名称: 端口密钥秘密

yam l api版本:apps/v1 种类:部署 元数据: 名称: 端口钥匙网关 规格: 副本:3 选择器: 匹配标签: 应用程序:端口钥匙网关 模板: 元数据: 标签: 应用程序:端口钥匙网关 规格: 容器:

  • 名称:网关 图片:portkeyai/网关:最新 端口:
  • 集装箱端口:8787 环境:
  • 名称:PORTKEY_GATEWAY_API_KEY 值来自: 秘密密钥参考: 名称: 端口密钥秘密 密钥:网关 api 密钥

api版本:v1 种类: 服务 元数据: 名称: 端口密钥网关服务 规格: 选择器: 应用程序:端口钥匙网关 端口:

  • 端口:80 目标端口:8787 类型:集群IP
API 密钥并将它们映射到指定的提供程序实例。### 设置提供商创建“providers.yaml”配置文件:````
yam
l
提供者:
openai-小学:
类型: 开放式
api_key:${OPENAI_API_KEY}
组织:${OPENAI_ORG_ID}

人择主:
类型:人为
api_key:${ANTHROPIC_API_KEY}

天蓝色-GPT4:
类型: azure-openai
api_key:${AZURE_API_KEY}
资源名称:${AZURE_RESOURCE_NAME}
部署 ID:gpt-4
api_版本:2025-12-01

谷歌双子座:
类型:谷歌
api_key:${GOOGLE_API_KEY}

米斯特拉尔当地:
类型:米斯塔拉尔
api_key:${MISTRAL_API_KEY}
基本网址:http://mistral-service:8000/v1
````### 加载配置````
bas
h
# 设置环境变量
导出 OPENAI_API_KEY="sk-..."
导出 ANTHROPIC_API_KEY="sk-ant-..."
导出 GATEWAY_API_KEY="pk-..."# 使用配置启动网关
docker运行-p 8787:8787 \
-e PORTKEY_GATEWAY_API_KEY=$GATEWAY_API_KEY \
-v $(pwd)/providers.yaml:/app/config/providers.yaml \
波特克艾/网关:最新
````---## 统一 API:200 多个模型的一个端点Portkey的核心价值在于其统一的API。 无论您调用哪个模型或提供商,请求格式都保持不变。 网关处理标准化门密钥格式和每个提供商的本机格式之间的转换。### ```
yam
l
提供者:
openai-小学:
类型: 开放式
api_key:${OPENAI_API_KEY}
组织:${OPENAI_ORG_ID}

人择主:
类型:人为
api_key:${ANTHROPIC_API_KEY}

天蓝色-GPT4:
类型: azure-openai
api_key:${AZURE_API_KEY}
资源名称:${AZURE_RESOURCE_NAME}
部署 ID:gpt-4
api_版本:2025-12-01

谷歌双子座:
类型:谷歌
api_key:${GOOGLE_API_KEY}

米斯特拉尔当地:
类型:米斯塔拉尔
api_key:${MISTRAL_API_KEY}
基本网址:http://mistral-service:8000/v1
```-X POST http://localhost:8787/v1/chat/completions \
-H“授权:承载${GATEWAY_API_KEY}”\
-H“内容类型:application/json”\
-d'{
“模型”:“克劳德十四行诗4”,
“provider”:“anthropic-primary”,
“消息”:[
{"role": "user", "content": "用简单的术语解释量子计算。"}
],
“最大令牌”:1024
}'
````### Python SDK 示例````蟒蛇
从 portkey_ai 导入 Portkey# 初始化客户端
门钥匙 = 门钥匙(
api_key="您的网关 API 密钥",
virtual_key="openai-primary" # 引用配置的提供商
)# 聊天组件```
bas
h
# 设置环境变量
导出 OPENAI_API_KEY="sk-..."
导出 ANTHROPIC_API_KEY="sk-ant-..."
导出 GATEWAY_API_KEY="pk-..."

# 使用配置启动网关
docker运行-p 8787:8787 \
-e PORTKEY_GATEWAY_API_KEY=$GATEWAY_API_KEY \
-v $(pwd)/providers.yaml:/app/config/providers.yaml \
波特克艾/网关:最新
````那些````蟒蛇
导入portkey_aiportkey = portkey_ai.Portkey(api_key="your-gateway-api-key")流 = portkey.chat.completions.create(
型号=“gpt-4o”,
messages=[{"role": "user", "content": "写一首关于人工智能的诗。"}],
流=真
)对于流中的块:
if chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="")
````---## 负载均衡和回退路由生产人工智能系统不能容忍提供商中断。 Portkey 的负载平衡和后备路由可确保您的应用程序即使在提供商发生故障时也能保持在线。### 循环负载平衡在 mul```
bas
h
中均匀分配流量
卷曲 -X POST http://localhost:8787/v1/chat/completions \
-H“授权:承载${GATEWAY_API_KEY}”\
-H“内容类型:application/json”\
-d'{
“型号”:“gpt-4o”,
“provider”:“openai-primary”,
“消息”:[
{"role": "system", "content": "你是一个得力助手。"},
{"role": "user", "content": "用简单的术语解释量子计算。"}
]
}'

pool “, # 引用策略 messages=[{“角色”: “用户”, “内容”: “你好!”}] ) ### 基于优先级的后备路由定义自动故障转移的后备链: yam l 策略: 生产后备: 类型:后备 目标:

  • 提供商:azure-gpt4 超时:10 重试:2
  • 提供商:openai-primary 超时:15 重试:1
  • 提供者:anthropic-primary
bas
h
# 相同的请求,不同的提供商 - 只需更改模型/提供商字段
卷曲 -X POST http://localhost:8787/v1/chat/completions \
-H“授权:承载${GATEWAY_API_KEY}”\
-H“内容类型:application/json”\
-d'{
“模型”:“克劳德十四行诗4”,
“provider”:“anthropic-primary”,
“消息”:[
{"role": "user", "content": "用简单的术语解释量子计算。"}
],
“最大令牌”:1024
}'
```此处为常规业务查询"}]
}'
````### 基于请求属性的条件路由根据内容、用户或其他请求属性路由请求:````
yam
l
策略:
智能路由器:
类型: 有条件
规则:
- 条件:“request.messages[0].content.length > 4000”
目标:
提供者:anthropic-primary
model: claude-sonnet-4 # 更好的长上下文处理
- 条件:“request.user == 'code-assistant```
pytho
n
从 portkey_ai 导入 Portkey

# 初始化客户端
门钥匙 = 门钥匙(
api_key="您的网关 API 密钥",
virtual_key="openai-primary" # 引用配置的提供商
)

# 聊天完成
响应 = portkey.chat.completions.create(
型号=“gpt-4o”,
消息=[
{"role": "system", "content": "你是一个得力助手。"},
{"role": "user", "content": "编写一个Python函数来计算斐波那契数。"}
]
)
打印(响应.选择[0].消息.内容)
```
ct
-匹配缓存
ttl: 3600 # 缓存生存时间(以秒为单位)
max_size: 10000 # 缓存条目的最大数量
相似度阈值: 0.95 # 用于语义缓存
````````蟒蛇
# 第一次调用命中提供者并缓存结果
响应1 = portkey.chat.completions.create(
型号=“gpt-4o”,
messages=[{"role": "user", "content": "什么是 Kubernetes?"}],
缓存=真
)# Similar call returns cached result instantly at fraction of cost
response2 = portkey.chat.completions.create(
   model="gpt-4o",
```
pytho
n
import portkey_ai

portkey = portkey_ai.Portkey(api_key="your-gateway-api-key")

stream = portkey.chat.completions.create(
   model="gpt-4o",
   messages=[{"role": "user", "content": "Write a poem about AI."}],
   stream=True
)

for chunk in stream:
   if chunk.choices[0].delta.content:
       print(chunk.choices[0].delta.content, end="")
```invalid
a
t
e
\
 -H "Authorization: Bearer ${GATEWAY_API_KEY}" \
 -H "Content-Type: application/json" \
 -d '{
   "pattern": "kubernetes",
   "provider": "openai-primary"
 }'
```---## 支出跟踪和成本可观察性了解跨提供商、模型和用户的 AI 支出对于预算管理至关重要。 Portkey 提供开箱即用的精细成本跟踪。### 成本跟踪设置````蟒蛇
导入portkey_aiportkey = portkey_ai.Portkey(
api_key="您的网关 API 密钥",
元数据={
"user_id": "用户-12345",
“项目”:“客户支持机器人”,
“环境”:“生产”,
"team": "ai-platfor```
yam
l
# 配置/负载平衡.yaml
策略:
gpt4 池:
类型:负载平衡
提供者:
- 提供商:openai-primary
重量:1
- 提供商:azure-gpt4
重量:1
- 提供商:openai-backup
重量:1
```
tpu
t
令牌:{response.usage.completion_tokens}")
print(f"总成本:${response.usage.estimated_cost}")
````### 查询支出分析````
bas
h
# 获取提供商的支出报告
卷曲“http://localhost:8787/v1/admin/analytics/spend?start_date=2```
pytho
n
# 使用负载均衡池
响应 = portkey.chat.completions.create(
型号=“gpt-4o”,
config="gpt4-pool", # 引用策略
messages=[{"角色": "用户", "内容": "你好!"}]
)
```1&end_date=2026-05-19&group_by=user_id" \
-H“授权:承载${GATEWAY_API_KEY}”
````### 预算提醒````
yam
l
警报:
每日预算:
类型:预算
门槛:500#美元
期间:每日
渠道:
- 类型:网络钩子
网址:https://hooks.slack.com/services/YO```
yam
l
策略:
生产后备:
类型:后备
目标:
- 提供商:azure-gpt4
超时:10
重试:2
- 提供商:openai-primary
超时:15
重试:1
- 提供者:anthropic-primary
型号: claude-sonnet-4
超时:15
- 提供商:谷歌双子座
型号:gemini-2.5-pro
超时:20
`` 部署。 Portkey 的提示管理系统提供版本控制、A/B 测试和动态变量替换。### 创建托管提示````蟒蛇
从 portkey_ai 导入 Portkey端口密钥 = 端口密钥(api_key="your-gateway-api-key")# 部署提示版本
提示 = portkey.prompts.deploy(
名称=“客户支持分类器”,
版本=“1.2.0”,
提示=[```
bas
h
# 网关按顺序尝试每个目标,直到一个成功
卷曲 -X POST http://localhost:8787/v1/chat/completions \
-H“授权:承载${GATEWAY_API_KEY}”\
-H“内容类型:application/json”\
-d'{
"config": "生产回退",
"messages": [{"role": "user", "content": "此处关键业务查询"}]
}'
```理解带变量的提示````蟒蛇
# 渲染并执行托管提示
响应 = portkey.prompts.render(
名称=“客户支持分类器”,
变量={
"ticket_content": "本月我的订阅费用被收取了两次。"
}
)打印(响应.选择[0].消息.内容)
# 输出:“账单”
````### A/B 测试提示````蟒蛇
# 在提示版本之间运行 A/B 测试
响应 = portkey.prompts.render(
名称=“客户支持```
yam
l
策略:
智能路由器:
类型: 有条件
规则:
- 条件:“request.messages[0].content.length > 4000”
目标:
提供者:anthropic-primary
model: claude-sonnet-4 # 更好的长上下文处理
- 条件:“request.user == '代码助手'”
目标:
提供商:openai-primary
型号:GPT-4O
- 条件:“默认”
目标:
提供商:azure-gpt4
型号:GPT-4O-迷你
```
rd
", "ssn", "credit_card", "secret_key"]
动作:阻止
- 类型:pii_探测器
实体:[“电子邮件”、“电话”、“SSN”]
动作:面具
- 类型:毒性检查
阈值:0.8
动作:阻止

输出验证:
- 类型:内容政策
类别:[“仇恨”、“暴力”、“自残”]
动作:阻止
- 类型:响应格式
必需的架构:
类型:json_object
行动:重试
````````蟒蛇
# 对请求应用护栏
响应 = portkey.chat.completions.create(
型号=“gpt-4o”,
messages=[{"role": "user", "content": "用户在此输入"}],
Guardrails=["输入验证", "输出验证"]
)
````### 自定义护栏功能````蟒蛇
来自 portke```
yam
l
缓存:
启用:真
mode: 语义 # 或“exact”用于精确匹配缓存
ttl: 3600 # 缓存生存时间(以秒为单位)
max_size: 10000 # 缓存条目的最大数量
相似度阈值: 0.95 # 用于语义缓存
``` 如果“置信度”不在数据中或数据[“置信度”] < 0.7:
返回 False,“置信度分数太低”
返回真,无
除了 json.JSONDecodeError:
return False,“响应必须是有效的 JSON”portkey.guard```
pytho
n
# 第一次调用命中提供者并缓存结果
响应1 = portkey.chat.completions.create(
型号=“gpt-4o”,
messages=[{"role": "user", "content": "什么是 Kubernetes?"}],
缓存=真
)

# 类似的调用以一小部分成本立即返回缓存的结果
响应2 = portkey.chat.completions.create(
型号=“gpt-4o”,
messages=[{"role": "user", "content": "向我解释一下 Kubernetes"}],
缓存=真
)
```&状态=错误" \
-H“授权:承载${GATEWAY_API_KEY}”
````````蟒蛇
# 启用每个请求的详细日志记录
响应 = portkey.chat.completions.create(
型号=“gpt-4o”,
messages=[{"角色": "用户", "内容": "你好"}],
元数据={
"trace_id": "trace-abc-123",
“session_id”:“会话-xyz-789”,
“user_id”:“用户456”
}
)
````### OpenTelemetry 集成````
yam
l
可观察性:
追踪:
启用:真
导出器:ot```
bas
h
# 检查缓存指标
卷曲 http://localhost:8787/v1/admin/cache/stats \
-H“授权:承载${GATEWAY_API_KEY}”
``eus 指标网关在“/metrics”处公开与 Prometheus 兼容的指标:````
bas
h
# 抓取指标
卷曲 http://localhost```
bas
h
# 使特定的缓存条目无效
curl -X POST http://localhost:8787/v1/admin/cache/invalidate \
-H“授权:承载${GATEWAY_API_KEY}”\
-H“内容类型:application/json”\
-d'{
“模式”:“kubernetes”,
“provider”:“openai-primary”
}'
```` - 缓存命中/未命中计数
- `portkey_spend_total` — 预计支出(美元)### Grafana 仪表板导入 Portkey 的官方 Grafana 仪表板(ID:`portkey-ai-gateway`)以进行开箱即用的可视化:```
jso
n
{
“仪表板”:{
"title": "Portkey AI网关概述",
“面板”:[
{
"title": "每秒请求数",
“目标”:[
{
"expr": "速率(portkey_requests_total[5m])"
}
]
},
{
"title": "P95 延迟",
````蟒蛇
导入portkey_ai

portkey = portkey_ai.Portkey(
api_key="您的网关 API 密钥",
元数据={
"user_id": "用户-12345",
“项目”:“客户支持机器人”,
“环境”:“生产”,
“团队”:“人工智能平台”
}
)

响应 = portkey.chat.completions.create(
型号=“gpt-4o”,
messages=[{"role": "user", "content": "帮助我的订单"}]
)

# 从响应中获取成本信息
print(f"输入标记:{response.usage.prompt_tokens}")
print(f"输出令牌:{response.usage.completion_tokens}")
print(f"总成本:${response.usage.estimated_cost}")
``` 图片:portkeyai/gateway:latest
端口:
- “8787:8787”
环境:
- PORTKEY_GATEWAY_API_KEY=${GATEWAY_API_KEY}
- REDIS_URL=redis://redis:6379
- DATABASE_URL=postgres://用户:pass@postgres:5432/portkey
取决于:
- 雷迪斯
- postgres
部署:
副本:3
资源:
限制:
内存:2G
中央处理器:'1.0'

雷迪斯:
图片:redis:7-alpine
卷:
- redis-数据:/数据

postgres:
图片:postgres:16-alpine
环境:
POSTGRES_DB:端口密钥
POSTGRES_USER:用户
POSTGRES_PASSWORD:${DB_PASSWORD}
卷:

bas h

获取提供商的支出报告 #

卷曲“http://localhost:8787/v1/admin/analytics/spend?start_date=2026-05-01&end_date=2026-05-19&group_by=provider”
-H“授权:承载${GATEWAY_API_KEY}” ``e 网关密钥每月 | | TLS 终止 | 必填| 使用反向代理或负载均衡器 | | 速率限制 | 必填| 配置每用户和每 IP 限制 | | PII 掩蔽 | 推荐| 启用 fo``` bas h

获取用户的支出报告 #

卷曲“http://localhost:8787/v1/admin/analytics/spend?start_date=2026-05-01&end_date=2026-05-19&group_by=user_id”
-H“授权:承载${GATEWAY_API_KEY}”

ttp
://localhost:8787/health# 预期响应
{“状态”:“健康”,“版本”:“2.5.0”,“正常运行时间”:86400}

yam l

Kubernetes 活跃度和就绪度探针 #

活性探针: http获取: 路径:/健康 po``` yam l 警报: 每日预算: 类型:预算 门槛:500#美元 期间:每日 渠道:

  • 类型:网络钩子 网址:https://hooks.slack.com/services/YOUR/WEBHOOK/URL
  • 类型:电子邮件 地址:team@company.com

异常尖峰: 类型:异常 基线乘数:3 窗口:1小时 渠道:

  • 类型:寻呼任务 Integration_key:您的 pd 密钥
nAI
、Cohere、Mistral、Together AI、Groq、Perplexity 等等。 定期添加新的提供商。### 我可以免费自行托管 Portkey AI 网关吗?是的。 Portkey AI Gateway 在 MIT 许可下开源,并且完全免费自行托管。 云版本提供了额外的托管功能,例如网络仪表板和基于使用情况定价的高级分析。### 请求缓存是如何工作的?Portkey 提供两种缓存模式:**精确匹配**(相同的请求返回缓存的响应)和**语义匹配**(基于嵌入相似性的相似请求返回缓存的响应)。 缓存可通过 TTL 和相似性阈值参数针对每个请求进行配置。### 是我的数据秒```
pytho
n
从 portkey_ai 导入 Portkey

端口密钥 = 端口密钥(api_key="your-gateway-api-key")

# 部署提示版本
提示 = portkey.prompts.deploy(
名称=“客户支持分类器”,
版本=“1.2.0”,
提示=[
{"role": "system", "content": "您是支持票证分类者。将票证分类为:账单、技术、功能请求或投诉。"},
{“角色”:“用户”,“内容”:“票证:{{ticket_content}}”}
],
型号=“gpt-4o-mini”,
参数={
“温度”:0.2,
“最大令牌”:50
}
)
``链中的提供者。 您可以配置每个目标的重试计数、超时和错误条件。### 我可以将 Portkey 与现有的 OpenAI SDK 代码一起使用吗?是的。 Portkey 提供与 OpenAI SDK 的直接兼容性。 只需将 `base_url` 更改为您的网关端点并使用您的 Portkey API 密钥:````蟒蛇
导入openai客户端 = openai.OpenAI(
api_key="your-portkey-gateway-key",
base_url =“http://localhost:8787/v1”
)# 你现有的代码保持不变
响应 = client.chat.completions.create(...)
````---







## 推荐的托管和基础设施在部署任何```
python
之前
# 渲染并执行托管提示
响应 = portkey.prompts.render(
名称=“客户支持分类器”,
变量={
"ticket_content": "本月我的订阅费用被收取了两次。"
}
)

打印(响应.选择[0].消息.内容)
# 输出:“账单”

ck " >}}** — 从中国大陆低延迟访问的香港 VPS。这与托管 dibi8.com 的 IDC 相同。附属链接 - 它们不会花费您额外的费用,并且有助于保持 dibi8.com 的运行。## 结论Portkey AI Gateway 将管理多个 LLM 提供商的复杂性转化为解决 infr``` pytho n

在提示版本之间运行 A/B 测试 #

响应 = portkey.prompts.render( 名称=“客户支持分类器”, version=“1.2.0”, # 50% 流量 test_version=“1.3.0-beta”, # 50% 流量 Variables={“ticket_content”: “上传照片时应用程序崩溃”} ) 托管在您自己的基础设施上(考虑 DigitalOcean 以轻松进行 Kubernetes 部署),Portkey 提供生产 AI 系统所需的可靠性、成本控制和可见性。从 Docker 快速入门开始,配置您的提供程序、使用回退路由设置负载平衡、启用缓存并连接您的可观察性堆栈。 在一个小时内,您将拥有一个生产级 LLM 网关,可处理 200 多个模型,并具有完整的 observab yam l 护栏: 输入验证:

  • 类型:关键字过滤器 阻止列表:[“密码”、“ssn”、“信用卡”、“秘密密钥”] 动作:阻止
  • 类型:pii_探测器 实体:[“电子邮件”、“电话”、“SSN”] 动作:面具
  • 类型:毒性检查 阈值:0.8 动作:阻止

输出验证:

  • 类型:内容政策 类别:[“仇恨”、“暴力”、“自残”] 动作:阻止
  • 类型:响应格式 必需的架构: 类型:json_object 行动:重试
````蟒蛇
# 对请求应用护栏
响应 = portkey.chat.completions.create(
型号=“gpt-4o”,
messages=[{"role": "user", "content": "用户在此输入"}],
Guardrails=["输入验证", "输出验证"]
)
``````蟒蛇
从 portkey_ai 导入 Portkey
导入 json

端口密钥 = 端口密钥(api_key="your-gateway-api-key")

def custom_validator(请求,响应):
"""自定义业务逻辑验证。"""
尝试:
数据 = json.loads(response.choices[0].message.content)
如果“置信度”不在数据中或数据[“置信度”] < 0.7:
返回 False,“置信度分数太低”
返回真,无
除了 json.JSONDecodeError:
return False,“响应必须是有效的 JSON”

portkey.guardrails.register("置信度检查", custom_validator)
``````重击
# 查询最近的请求日志
卷曲“http://localhost:8787/v1/admin/logs?limit=100&status=error”\
-H“授权:承载${GATEWAY_API_KEY}”
``````蟒蛇
# 启用每个请求的详细日志记录
响应 = portkey.chat.completions.create(
型号=“gpt-4o”,
messages=[{"角色": "用户", "内容": "你好"}],
元数据={
"trace_id": "trace-abc-123",
“session_id”:“会话-xyz-789”,
“user_id”:“用户456”
}
)

yam l 可观察性: 追踪: 启用:真 出口商: otlp 端点:http://jaeger-collector:4317 指标: 启用:真 出口商:普罗米修斯 端口:9090

# 抓取指标
卷曲 http://localhost:8787/metrics

jso n { “仪表板”:{ “title”: “Portkey AI网关概述”, “面板”:[ { “title”: “每秒请求数”, “目标”:[ { “expr”: “速率(portkey_requests_total[5m])” } ] }, { “title”: “P95 延迟”, “目标”:[ { “expr”:“histogram_quantile(0.95,portkey_request_duration_seconds_bucket)” } ] }, { “title”: “令牌使用情况”, “目标”:[ { “expr”:“按(模型)求和(portkey_tokens_total)” } ] } ] } }

yam
l
# 生产 docker-compose,使用 Redis 进行缓存,使用 PostgreSQL 进行日志
版本:'3.8'
服务:
网关:
图片:portkeyai/网关:最新
端口:
- “8787:8787”
环境:
- PORTKEY_GATEWAY_API_KEY=${GATEWAY_API_KEY}
- REDIS_URL=redis://redis:6379
- DATABASE_URL=postgres://用户:pass@postgres:5432/portkey
取决于:
- 雷迪斯
- postgres
部署:
副本:3
资源:
限制:
内存:2G
中央处理器:'1.0'

雷迪斯:
图片:redis:7-alpine
卷:
- redis-数据:/数据

postgres:
图片:postgres:16-alpine
环境:
POSTGRES_DB:端口密钥
POSTGRES_USER:用户
POSTGRES_PASSWORD:${DB_PASSWORD}
卷:
- postgres-数据:/var/lib/postgresql/data

卷:
redis 数据:
postgres 数据:
``````重击
# 网关健康端点
卷曲 http://localhost:8787/health

# 预期响应
{“状态”:“健康”,“版本”:“2.5.0”,“正常运行时间”:86400}

yam l

Kubernetes 活跃度和就绪度探针 #

活性探针: http获取: 路径:/健康 端口:8787 初始延迟秒数:10 周期秒:15

准备情况探针: http获取: 路径:/准备好 端口:8787 初始延迟秒数:5 周期秒:5

导入openai

客户端 = openai.OpenAI(
api_key="your-portkey-gateway-key",
base_url =“http://localhost:8787/v1”
)

# 你现有的代码保持不变
响应 = client.chat.completions.create(...)
````

💬 留言讨论