ai-proxy
ai-proxy 插件通过将插件配置转换为所需的请求格式,简化对 LLM 和向量嵌入模型的访问。该插件支持 OpenAI、DeepSeek、Anthropic、Gemini、Vertex AI 以及其他兼容 OpenAI 的 API。
转发请求前,插件会根据请求 URI 和请求体识别客户端协议。当客户端使用 Anthropic Messages,而所选服务提供方支持 OpenAI Chat Completions 而非原生 Anthropic Messages 时,插件会执行协议转换:将客户端请求转换为 OpenAI 格式,并将后端响应转换为 Anthropic 格式。该转换只支持 Anthropic Messages 的一部分功能。有关检测规则、字段映射、版本边界和限制,请参阅协议参考。
该插件还可以在访问日志而非错误日志中记录 LLM 请求信息,包括 Token 用量、模型和首字节响应时间。日志插件可以采集这些条目。
示例
以下示例演示了如何针对不同场景配置 ai-proxy。
代理到 OpenAI
以下示例演示了如何在 ai-proxy 插件中配置 API Key、模型和其他参数,并在路由上配置该插件以将用户提示词代理到 OpenAI。
获取 OpenAI API Key,并可选择将其保存到环境变量中:
export OPENAI_API_KEY=YOUR_OPENAI_API_KEY # 替换为你的 API Key
- Admin API
- ADC
- Ingress Controller
创建一个路由并按如下方式配置 ai-proxy 插件:
curl "http://127.0.0.1:9180/apisix/admin/routes" -X PUT \
-H "X-API-KEY: ${ADMIN_API_KEY}" \
--data-binary @- <<EOF
{
"id": "ai-proxy-route",
"uri": "/anything",
"methods": ["POST"],
"plugins": {
"ai-proxy": {
"provider": "openai",
"auth": {
"header": {
"Authorization": "Bearer $OPENAI_API_KEY"
}
},
"options":{
"model": "gpt-4"
}
}
}
}
EOF
❶ 指定提供商为 openai。
❷ 在 Authorization 请求头中附带 OpenAI API Key。
❸ 指定模型名称。
向该路由发送一个 POST 请求,请求体中包含系统提示词和 示例用户问题:
services:
- name: openai-service
routes:
- name: openai-route
uris:
- /anything
methods:
- POST
plugins:
ai-proxy:
provider: openai
auth:
header:
Authorization: "Bearer ${OPENAI_API_KEY}"
options:
model: gpt-4
将配置同步到网关:
adc sync -f adc.yaml
❶ 指定提供商为 openai。
❷ 在 Authorization 请求头中附带 OpenAI API Key。
❸ 指定模型名称。
- Gateway API
- APISIX CRD
apiVersion: apisix.apache.org/v1alpha1
kind: PluginConfig
metadata:
namespace: aic
name: ai-proxy-plugin-config
spec:
plugins:
- name: ai-proxy
config:
provider: openai
auth:
header:
Authorization: "Bearer YOUR_OPENAI_API_KEY"
options:
model: gpt-4
---
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
namespace: aic
name: openai-route
spec:
parentRefs:
- name: apisix
rules:
- matches:
- path:
type: Exact
value: /anything
method: POST
filters:
- type: ExtensionRef
extensionRef:
group: apisix.apache.org
kind: PluginConfig
name: ai-proxy-plugin-config
将配置应用到集群:
kubectl apply -f ai-proxy-ic.yaml
❶ 指定提供商为 openai。
❷ 在 Authorization 请求头中附带 OpenAI API Key。
❸ 指定模型名称。
apiVersion: apisix.apache.org/v2
kind: ApisixRoute
metadata:
namespace: aic
name: openai-route
spec:
ingressClassName: apisix
http:
- name: openai-route
match:
paths:
- /anything
methods:
- POST
plugins:
- name: ai-proxy
enable: true
config:
provider: openai
auth:
header:
Authorization: "Bearer YOUR_OPENAI_API_KEY"
options:
model: gpt-4
将配置应用到集群:
kubectl apply -f ai-proxy-ic.yaml
❶ 指定提供商为 openai。
❷ 在 Authorization 请求头中附带 OpenAI API Key。
❸ 指定模型名称。
发送一个 POST 请求到该路由,请求体中包含系统提示词和一个示例用户问题:
curl "http://127.0.0.1:9080/anything" -X POST \
-H "Content-Type: application/json" \
-d '{
"messages": [
{ "role": "system", "content": "You are a mathematician" },
{ "role": "user", "content": "What is 1+1?" }
]
}'
你应该会收到类似以下的响应:
{
...,
"model": "gpt-4-0613",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "1+1 equals 2.",
"refusal": null
},
"logprobs": null,
"finish_reason": "stop"
}
],
...
}
代理到 DeepSeek
以下示例演示了如何配置 ai-proxy 插件将请求代理到 DeepSeek。
获取 DeepSeek API Key,并可选择将其保存到环境变量中:
export DEEPSEEK_API_KEY=YOUR_DEEPSEEK_API_KEY # 替换为你的 API Key
- Admin API
- ADC
- Ingress Controller
创建一个路由并按如下方式配置 ai-proxy 插件:
curl "http://127.0.0.1:9180/apisix/admin/routes" -X PUT \
-H "X-API-KEY: ${ADMIN_API_KEY}" \
--data-binary @- <<EOF
{
"id": "ai-proxy-route",
"uri": "/anything",
"methods": ["POST"],
"plugins": {
"ai-proxy": {
"provider": "deepseek",
"auth": {
"header": {
"Authorization": "Bearer $DEEPSEEK_API_KEY"
}
},
"options": {
"model": "deepseek-chat"
}
}
}
}
EOF
❶ 指定提供商为 deepseek,插件会将请求代理到 https://api.deepseek.com/chat/completions。
❷ 在 Authorization 请求头中附带 DeepSeek API Key。
❸ 指定模型名称。
向该路由发送一个 POST 请求,请求体中包含系统提示词和示例用户问题:
services:
- name: deepseek-service
routes:
- name: deepseek-route
uris:
- /anything
methods:
- POST
plugins:
ai-proxy:
provider: deepseek
auth:
header:
Authorization: "Bearer ${DEEPSEEK_API_KEY}"
options:
model: deepseek-chat
将配置同步到网关:
adc sync -f adc.yaml
❶ 指定提供商为 deepseek,插件会将请求代理到 https://api.deepseek.com/chat/completions。
❷ 在 Authorization 请求头中附带 DeepSeek API Key。
❸ 指定模型名称。
- Gateway API
- APISIX CRD
apiVersion: apisix.apache.org/v1alpha1
kind: PluginConfig
metadata:
namespace: aic
name: ai-proxy-plugin-config
spec:
plugins:
- name: ai-proxy
config:
provider: deepseek
auth:
header:
Authorization: "Bearer YOUR_DEEPSEEK_API_KEY"
options:
model: deepseek-chat
---
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
namespace: aic
name: deepseek-route
spec:
parentRefs:
- name: apisix
rules:
- matches:
- path:
type: Exact
value: /anything
method: POST
filters:
- type: ExtensionRef
extensionRef:
group: apisix.apache.org
kind: PluginConfig
name: ai-proxy-plugin-config
将配置应用到集群:
kubectl apply -f deepseek-ic.yaml
❶ 指定提供商为 deepseek,插件会将请求代理到 https://api.deepseek.com/chat/completions。
❷ 在 Authorization 请求头中附带 DeepSeek API Key。
❸ 指定模型名称。
apiVersion: apisix.apache.org/v2
kind: ApisixRoute
metadata:
namespace: aic
name: deepseek-route
spec:
ingressClassName: apisix
http:
- name: deepseek-route
match:
paths:
- /anything
methods:
- POST
plugins:
- name: ai-proxy
enable: true
config:
provider: deepseek
auth:
header:
Authorization: "Bearer YOUR_DEEPSEEK_API_KEY"
options:
model: deepseek-chat
将配置应用到集群:
kubectl apply -f deepseek-ic.yaml
❶ 指定提供商为 deepseek,插件会将请求代理到 https://api.deepseek.com/chat/completions。
❷ 在 Authorization 请求头中附带 DeepSeek API Key。
❸ 指定模型名称。
向该路由发送一个 POST 请求,请求体中包含输入字符串:
curl "http://127.0.0.1:9080/anything" -X POST \
-H "Content-Type: application/json" \
-d '{
"messages": [
{
"role": "system",
"content": "You are an AI assistant that helps people find information."
},
{
"role": "user",
"content": "Write me a 50-word introduction for Apache APISIX."
}
]
}'
你应该会收到类似以下的响应:
{
...
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "Apache APISIX is a dynamic, real-time, high-performance API gateway and cloud-native platform. It provides rich traffic management features like load balancing, dynamic upstream, canary release, circuit breaking, authentication, observability, and more. Designed for microservices and serverless architectures, APISIX ensures scalability, security, and seamless integration with modern DevOps workflows."
},
"logprobs": null,
"finish_reason": "stop"
}
],
...
}
代理到 Azure OpenAI
以下示例演示了如何配置 ai-proxy 插件,将请求代理到 Azure OpenAI 等其他 LLM 服务。
获取 Azure OpenAI API Key,并可选择将其保存到环境变量中:
export AZ_OPENAI_API_KEY=YOUR_AZURE_OPENAI_API_KEY # 替换为你的 API Key
- Admin API
- ADC
- Ingress Controller
创建一个路由并按如下方式配置 ai-proxy 插件:
curl "http://127.0.0.1:9180/apisix/admin/routes" -X PUT \
-H "X-API-KEY: ${ADMIN_API_KEY}" \
--data-binary @- <<EOF
{
"id": "ai-proxy-route",
"uri": "/anything",
"methods": ["POST"],
"plugins": {
"ai-proxy": {
"provider": "azure-openai",
"auth": {
"header": {
"api-key": "$AZ_OPENAI_API_KEY"
}
},
"options":{
"model": "gpt-4"
},
"override": {
"endpoint": "https://api7-azure-openai.openai.azure.com/openai/deployments/gpt-4/chat/completions?api-version=2024-02-15-preview"
}
}
}
}
EOF
❶ 将提供商设置为 azure-openai。
❷ 在 api-key 请求头中附加 Azure OpenAI API Key。