跳到主要内容
版本:3.9.x

监控 AI 流量并跟踪大语言模型成本

本指南介绍如何使用内置 AI 日志、APISIX 上下文变量和标准可观测性集成,观察 AI 流量并估算大语言模型成本。

概览

AI 可观测性不同于传统 API 可观测性。对于大语言模型工作负载,需要具备 Token 级可见性、模型归因,以及首 Token 延迟等延迟细分数据。

通过 API7 AI 网关,可以收集:

  • 请求和响应模型元数据。
  • 提示词和补全 Token 数。
  • 端到端及上游耗时信号。
  • 可选的请求/响应内容载荷级日志。

网关不会直接计算账单。成本跟踪通过将 Token 用量映射到服务提供方定价得出。

前置条件

  • 安装 Docker

  • 安装 cURL,用于发送请求并验证服务。

  • 拥有一个正在运行的 API7 网关实例。

  • 从控制台获取令牌,并保存到环境变量:

    export API_KEY=your-dashboard-token   # 请替换为你的控制台令牌
  • {gateway_group_id} 替换为网关组 ID。如果正在按照快速入门操作,请使用 default

  • 如果使用 Admin API 示例,请创建或复用一个服务。如果尚无服务,请按照创建或复用服务操作,然后保存其 ID:

    export SERVICE_ID=your-service-id         # 请替换为你的服务 ID

内置 AI 日志

ai-proxyai-proxy-multi 支持以下 logging 配置:

  • logging.summaries(布尔值):记录 request_modelmodeldurationprompt_tokenscompletion_tokensupstream_response_time
  • logging.payloads(布尔值):记录请求消息、流式标记和响应文本内容。

在路由范围启用日志,或在适用时通过共享插件策略启用:

curl -k "https://localhost:7443/apisix/admin/routes?gateway_group_id={gateway_group_id}" -X PUT \
-H "X-API-KEY: ${API_KEY}" \
-d '{
"id": "ai-observability",
"service_id": "'"$SERVICE_ID"'",
"paths": ["/ai"],
"plugins": {
"ai-proxy": {
"provider": "openai",
"auth": { "header": { "Authorization": "Bearer '"$OPENAI_API_KEY"'" } },
"options": { "model": "gpt-4o" },
"logging": {
"summaries": true,
"payloads": false
}
}
}
}'

❶ 在 ai-proxy 插件上启用 AI 日志。

❷ 记录摘要级字段(模型及 Token/耗时元数据),用于成本和性能分析。

❸ 默认禁用载荷日志,以减少敏感内容暴露。

对于多模型路由,请在每个 ai-proxy-multi 实例中应用相同的 logging 字段:

curl -k "https://localhost:7443/apisix/admin/routes?gateway_group_id={gateway_group_id}" -X PUT \
-H "X-API-KEY: ${API_KEY}" \
-d '{
"id": "ai-observability-multi",
"service_id": "'"$SERVICE_ID"'",
"paths": ["/ai-multi"],
"plugins": {
"ai-proxy-multi": {
"instances": [
{
"name": "openai-primary",
"provider": "openai",
"auth": { "header": { "Authorization": "Bearer '"$OPENAI_API_KEY"'" } },
"options": { "model": "gpt-4o-mini" },
"logging": {
"summaries": true,
"payloads": false
},
"weight": 1
}
]
}
}
}'

❶ 在 ai-proxy-multi 中按实例配置 logging.summarieslogging.payloads

完整配置说明请参阅 ai-proxyai-proxy-multi

AI 流量的 APISIX 变量

以下 APISIX 上下文变量可用于访问日志、外部日志插件和自定义可观测性管道:

变量说明
llm_time_to_first_token流式响应的首 Token 延迟(TTFT)。
llm_prompt_tokens模型服务提供方报告的提示词 Token 数。
llm_completion_tokens模型服务提供方报告的补全 Token 数。
llm_model实际生成响应的模型。
request_llm_model客户端请求的模型。
llm_response_text上下文中捕获的响应文本内容。

Prometheus 集成

使用标准 prometheus 插件导出网关指标。AI 流量的内置指标包括:

  • apisix_llm_latency(直方图)—— LLM 请求的端到端延迟,带有路由、服务、消费者和服务提供方标签。
  • apisix_llm_prompt_tokens(计数器)—— 累计提示词 Token 数,带有路由、URI、主机、服务提供方和模型标签。
  • apisix_llm_completion_tokens(计数器)—— 累计补全 Token 数,带有路由、URI、主机、服务提供方和模型标签。
  • apisix_llm_active_connections(仪表)—— 当前活跃的 LLM 连接数,带有路由、URI、主机、服务提供方和模型标签。

PromQL 查询示例:

# 所有路由上当前活跃的 LLM 连接数
sum(apisix_llm_active_connections)
# 按活跃 LLM 连接数排序的路由
topk(10, sum by (route) (apisix_llm_active_connections))
# 告警条件示例:活跃连接数持续偏高
avg_over_time(sum(apisix_llm_active_connections)[5m:]) > 200

请根据部署和流量特征调整标签及阈值。

将 AI 请求记录到外部系统

可以将 APISIX 日志插件与 AI 上下文变量组合,把包含 AI 元数据的结构化日志转发到 ELK、Loki 或 Splunk 等系统。

结构化日志负载示例:

{
"route_id": "27bcdea2-7586-47ad-9262-a3adf4b6699e",
"service_id": "d8402098-2f80-4e08-afab-21b9ebc62090",
"model": "deepseek-chat",
"request_model": "",
"prompt_tokens": 11,
"completion_tokens": 16,
"duration_ms": 3991,
"ttft_ms": 2159,
"upstream_response_time": 1133
}
备注
  • route_idservice_id 是网关为路由和服务分配的 UUID。
  • 如果客户端未显式指定模型,request_model 为空,模型由插件配置决定。
  • duration_ms 不是内置 AI 日志字段。请在日志格式配置中使用 $latency(请求总耗时)和 $upstream_latency(上游响应时间)来测量请求持续时间。

生产遥测默认使用摘要日志。仅在具备适当数据处理控制且需要短期调试时启用载荷日志。

构建成本看板

API7 网关提供 Token 用量信号,成本则在外部计算:

estimated_cost = (prompt_tokens × prompt_price_per_token) + (completion_tokens × completion_price_per_token)

Grafana 看板中常见的面板包括:

  • 按消费者统计成本(每小时/每天)。
  • 按模型统计成本。
  • 提示词与补全 Token 分布。
  • 支出趋势和预算阈值告警。

实施方式:

  1. 导出 AI 日志/指标。
  2. 使用服务提供方定价元数据丰富记录。
  3. 在日志或指标管道中计算估算成本。
  4. 在 Grafana 中进行可视化并配置告警。

有关 Token 治理控制,请参阅基于 Token 的限流和配额管理

OpenTelemetry 追踪

使用标准 opentelemetry 插件追踪 AI 请求生命周期中以下环节的延迟:

  • 客户端请求进入。
  • 网关处理。
  • 上游大语言模型调用。
  • 响应发出。

这有助于判断延迟来自客户端行为、网关插件,还是上游模型/服务提供方响应时间。

后续步骤