模型
本指南将介绍如何创建调用方发送给 AISIX 的模型别名,并说明单目标模型、多目标模型和集成模型如何进入请求链路。
模型会把面向调用方的模型别名连接到 AISIX 应调用的上游目标 。单目标模型通过一个服务提供方密钥指向一个上游模型;多目标模型指向多个目标模型别名,并让 AISIX 在请求时选择其中一个;集成模型会把聊天请求扇出到多个 panel 模型,再让 judge 模型综合生成最终答案。
建议先从单目标模型开始。当调用方需要用一个稳定名称承载故障转移、轮询或加权目标选择时,再创建多目标模型。当调用方需要基于多个模型响应获得一个综合答案时,再创建集成模型。
准备工作
请先准备以下内容:
- 一个 Admin 监听器可用的自托管网关。
- 网关
config.yaml中的 Admin Key。 - 上游凭证对应的服务提供方密钥 ID。如果还没有,请先配置服务提供方凭证。
创建单目标模型
单目标模型会把一个 AISIX 模型别名映射到一个上游模型。
使用准备好的服务提供方密钥 ID 创建单目标模型:
export AISIX_ADMIN_KEY="admin-local-only-change-me"
export PROVIDER_KEY_ID="YOUR_PROVIDER_KEY_ID"
curl -sS -X POST "http://127.0.0.1:3001/admin/v1/models" \
-H "Authorization: Bearer ${AISIX_ADMIN_KEY}" \
-H "Content-Type: application/json" \
-d '{
"display_name": "gpt-4o-prod",
"provider": "openai",
"model_name": "gpt-4o",
"provider_key_id": "'"${PROVIDER_KEY_ID}"'"
}'
你应该会看到类似下面的响应:
{
"id": "677c847f-d92d-4f0e-b445-8b449764f06a",
"value": {
"display_name": "gpt-4o-prod",
"provider": "openai",
"model_name": "gpt-4o",
"provider_key_id": "YOUR_PROVIDER_KEY_ID"
},
"revision": 1
}
如果后续需要更新、查看或删除该模型,请复制高亮的 id。
display_name 是调用方在 model 中发送的名称。model_name 是 AISIX 发送给服务提供方的上游模型 ID 或部署名称。两者可以相同,也可以不同。
创建多目标模型
当一个面向调用方的别名需要从多个目标模型中选择时,多目标模型会很有用。它使用 routing 配置块,而不是直接保存自己的服务提供方密钥或上游模型名称。
请先创建目标模型,然后创建多目标模型,并通过 display_name 引用这些目标别名:
curl -sS -X POST "http://127.0.0.1:3001/admin/v1/models" \
-H "Authorization: Bearer ${AISIX_ADMIN_KEY}" \
-H "Content-Type: application/json" \
-d '{
"display_name": "chat-prod",
"routing": {
"strategy": "failover",
"targets": [
{"model": "gpt-4o-primary"},
{"model": "gpt-4o-secondary"}
],
"retries": 1,
"max_fallbacks": 1,
"retry_on_429": true
}
}'
你应该会看到类似下面的响应:
{
"id": "134c4b01-09e6-41b7-97c7-f4e9a608f4c2",
"value": {
"display_name": "chat-prod",
"routing": {
"strategy": "failover",
"targets": [
{
"model": "gpt-4o-primary"
},
{
"model": "gpt-4o-secondary"
}
],
"retries": 1,
"max_fallbacks": 1,
"retry_on_429": true
}
},
"revision": 1
}
如果后续需要更新、查看或删除该多目标模型,请复制高亮的 id。
根据网关选择第一个目标的方式来选择策略:
| 策略 | 适用场景 |
|---|---|
failover | 一个目标是主目标,后续目标作为备用。 |
round_robin | 多个相似目标需要简单分发请求。 |
weighted | 不同目标需要接收不同比例的流量。 |
第一个目标选定后,后续故障转移仍会按目标顺序进行。详细路由行为请参见路由与故障转移。