ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

基于OpenTelemetry与ClickHouse构建AI应用性能与成本监控体系

基于OpenTelemetry与ClickHouse构建AI应用性能与成本监控体系 你的AI应用上线后用户反馈“响应慢”月底一看账单“费用高”问题到底出在哪里是模型选型不对还是代码写得烂很多时候开发者面对的是一个黑盒只知道总调用次数和总费用却说不清是哪个接口、哪个用户、在什么时间消耗了最多的Token也定位不了延迟的瓶颈究竟在模型推理、网络传输还是业务逻辑处理。这就是AI响应延迟与Token消耗监控要解决的核心问题。它不是一个可有可无的“运维看板”而是直接关系到用户体验、运营成本和系统稳定性的关键基础设施。没有它你就像在迷雾中开车既不知道油Token用在了哪里也不知道路上响应链路哪里在堵车。本文将为你彻底解密如何构建一套轻量、高效且可落地的AI应用监控体系。我们将聚焦于两个最核心的指标响应延迟和Token消耗并使用当前云原生领域的事实标准OpenTelemetry进行数据采集最终将数据存入高性能分析型数据库ClickHouse进行存储与查询。这不是一个理论构想而是一个包含完整代码示例、配置步骤和排查清单的实战指南。读完本文你将能清晰理解为什么传统的应用监控如Prometheus难以直接套用在AI应用上。亲手搭建一套从代码埋点、数据收集、存储到可视化的完整监控流水线。掌握方法快速定位延迟瓶颈分析Token消耗模式从而优化模型使用策略与成本。避开陷阱了解在实施过程中常见的配置错误、性能问题和数据口径误区。我们将从最根本的问题出发一步步拆解直到你能在自己的开发环境中运行起第一个监控示例。1. 为什么传统监控对AI应用“力不从心”在深入技术方案之前我们必须先厘清一个关键认知给AI应用做监控和给一个普通的Web服务做监控本质需求有何不同一个典型的Web API监控核心是请求量QPS、错误率Error Rate、响应时间P99 Latency。这些指标通过中间件拦截或Agent注入相对容易获得。然而当这个API背后调用的是GPT-4、Claude或一个自研的大模型时故事就变了核心成本指标是Token而非简单的请求次数。一次调用消耗100个Token和消耗10000个Token成本相差百倍。你需要知道每个请求的输入Prompt和输出Completion各消耗了多少Token不同用户、不同业务场景的Token消耗模式是怎样的是否有异常的“长文本”请求在悄无声息地消耗你的预算延迟构成极其复杂。AI请求的延迟不再是“服务器处理时间”。它被拆分为多个阶段网络时间从你的服务器到AI服务提供商如OpenAI的网络往返延迟。排队时间如果使用共享或繁忙的API请求可能在服务端排队等待。Token生成时间Time to First Token / Per-token Latency模型生成第一个Token和后续每个Token的速度这直接决定了流式输出的用户体验。总完成时间生成全部内容所需的总时间。 仅仅一个“总耗时”指标无法帮你定位瓶颈是在网络、服务端还是模型本身。数据维度需要高度定制。你需要关联的维度远不止IP和接口名模型名称gpt-4-turbo和gpt-3.5-turbo的性能与成本天差地别。用户/会话ID用于分析用户行为与成本归属。业务标签例如“客服问答”、“代码生成”、“内容总结”用于不同场景的ROI分析。传统的Metrics监控系统如Prometheus擅长处理规整的、维度固定的数值指标但对于这种每次请求都携带大量动态、结构化属性如modelgpt-4, input_tokens1500, user_id123的场景其数据模型和查询能力就显得捉襟见肘。这正是我们需要引入OpenTelemetry和ClickHouse组合的原因。2. 技术栈选型OpenTelemetry ClickHouse 为何是绝配面对上述挑战我们的技术选型需要满足几个条件能携带丰富维度、能处理追踪链路、能高效存储和查询时间序列数据、最好还是开源且生态丰富。2.1 OpenTelemetry云原生可观测性的“普通话”OpenTelemetry简称OTel是一套由CNCF孵化的开源标准它统一了日志、指标和追踪三大可观测性数据的采集与传输。你可以把它理解为监控领域的“普通话”。核心优势标准化一套API和SDK支持多种语言Java, Python, Go, JS等避免被某个厂商的Agent锁死。高维数据模型其核心数据模型Span代表一个工作单元和Metric可以附加任意数量的键值对属性Attributes完美适配我们需要记录的model、input_tokens等信息。链路追踪Tracing原生支持可以轻松创建一个追踪链路记录从收到用户请求、调用AI API、到返回结果的全过程并自动计算各阶段的耗时。在本方案中的角色OTel SDK集成在你的AI应用代码中负责生成包含丰富属性的Span和Metric数据并将其发送到收集器Collector。2.2 ClickHouse为分析而生的数据库ClickHouse是一个开源的列式数据库管理系统以其在在线分析处理OLAP场景下惊人的查询速度而闻名。核心优势极速聚合查询对于“按模型、按天统计总Token消耗和平均延迟”这类分析型查询速度比传统关系型数据库快几个数量级。高压缩比列式存储对监控类数据压缩效果极好大幅降低存储成本。灵活的表引擎MergeTree系列引擎特别适合时间序列数据支持TTL自动过期删除简化了数据生命周期管理。在本方案中的角色作为监控数据的存储与分析引擎。OTel Collector将处理后的数据写入ClickHouse我们后续的所有查询和可视化都基于ClickHouse进行。2.3 整体架构全景图整个监控系统的数据流如下所示[你的AI应用] --(携带Token、延迟等属性的OTel数据)-- [OTel Collector] --(格式化后数据)-- [ClickHouse] | v [Grafana / 自研面板]你的应用程序通过OTel SDK埋点将数据推送到OTel Collector。Collector作为一个可配置的中间件可以对数据进行过滤、加工、批处理然后通过其强大的插件生态将数据导出到ClickHouse。最后你可以使用Grafana连接ClickHouse数据源来制作监控大盘或者通过API直接查询进行分析。3. 环境准备与组件部署接下来我们开始动手搭建。假设你已有一个正在开发或测试中的AI应用例如基于Python的FastAPI服务。我们将从零开始部署监控基础设施。3.1 前提条件操作系统Linux (Ubuntu 20.04 或 CentOS 7) 或 macOS。生产环境推荐Linux。Docker Docker Compose我们将使用容器化方式快速部署OTel Collector和ClickHouse这是最简洁且环境一致的方式。你的AI应用一个能调用AI服务如OpenAI API的Python应用。我们将以它为例进行埋点。3.2 部署ClickHouse首先创建一个工作目录并编写docker-compose.yml文件来定义ClickHouse服务。# docker-compose.yml version: 3.8 services: clickhouse: image: clickhouse/clickhouse-server:latest container_name: ai-monitor-clickhouse ports: - 8123:8123 # HTTP API端口用于查询和管理 - 9000:9000 # Native TCP协议端口用于高性能数据写入和查询 volumes: - ./clickhouse_data:/var/lib/clickhouse # 数据持久化 - ./clickhouse_config.xml:/etc/clickhouse-server/config.d/custom-config.xml:ro # 自定义配置 environment: CLICKHOUSE_DB: ai_telemetry CLICKHOUSE_USER: admin CLICKHOUSE_PASSWORD: your_secure_password # 请务必修改 ulimits: nproc: 65535 nofile: soft: 262144 hard: 262144同时创建一个简单的自定义配置文件调整一些默认设置以适应监控场景!-- clickhouse_config.xml -- yandex logger levelinformation/level console1/console /logger !-- 允许接收来自Collector的插入 -- listen_host0.0.0.0/listen_host /yandex启动ClickHousedocker-compose up -d clickhouse使用docker-compose logs -f clickhouse查看日志确认服务正常启动。你可以通过http://localhost:8123/play使用默认用户default密码为空访问ClickHouse的Web UI进行简单测试。3.3 部署OpenTelemetry CollectorOTel Collector是数据管道的中枢。我们使用其发行版之一otelcol-contrib它包含了许多社区贡献的导出器和接收器。创建Collector的配置文件otel-collector-config.yaml# otel-collector-config.yaml receivers: otlp: protocols: grpc: endpoint: 0.0.0.0:4317 # 接收来自应用的gRPC OTLP数据 http: endpoint: 0.0.0.0:4318 # 接收来自应用的HTTP OTLP数据 processors: batch: # 批处理处理器提升写入效率 send_batch_size: 1000 timeout: 10s memory_limiter: check_interval: 1s limit_mib: 512 spike_limit_mib: 256 exporters: clickhouse: endpoint: tcp://clickhouse:9000?databaseai_telemetry # 指向ClickHouse服务 username: admin password: your_secure_password # 与docker-compose中一致 logs_table_name: otel_logs traces_table_name: otel_traces metrics_table_name: otel_metrics ttl_days: 30 # 数据保留30天 timeout: 5s debug: verbosity: detailed # 开发时开启生产环境建议关闭 service: pipelines: traces: receivers: [otlp] processors: [memory_limiter, batch] exporters: [clickhouse, debug] # debug仅用于调试 metrics: receivers: [otlp] processors: [memory_limiter, batch] exporters: [clickhouse, debug] logs: receivers: [otlp] processors: [memory_limiter, batch] exporters: [clickhouse, debug]将Collector服务添加到docker-compose.yml# 在docker-compose.yml的services部分添加 otel-collector: image: otel/opentelemetry-collector-contrib:latest container_name: ai-monitor-collector command: [--config/etc/otel-collector-config.yaml] volumes: - ./otel-collector-config.yaml:/etc/otel-collector-config.yaml ports: - 4317:4317 # OTLP gRPC端口 - 4318:4318 # OTLP HTTP端口 depends_on: - clickhouse启动Collectordocker-compose up -d otel-collector至此监控后端的基础设施ClickHouse OTel Collector已经就绪。它们将在后台运行等待你的应用发送数据。4. 在AI应用中集成OpenTelemetry SDK现在我们进入核心环节改造你的AI应用让它能产生我们关心的监控数据。我们以一个Python FastAPI应用为例它使用openai库调用GPT模型。4.1 安装必要的Python库pip install opentelemetry-api opentelemetry-sdk opentelemetry-instrumentation-fastapi opentelemetry-instrumentation-requests opentelemetry-exporter-otlp-proto-http openaiopentelemetry-sdkOTel的核心SDK。opentelemetry-instrumentation-fastapi自动为FastAPI应用创建Span的插件。opentelemetry-instrumentation-requests自动为requests库openai库底层使用创建Span的插件这能捕获到网络请求的延迟。opentelemetry-exporter-otlp-proto-http将数据通过HTTP协议发送到我们Collector的导出器。4.2 初始化OpenTelemetry并埋点创建一个文件otel_setup.py来初始化OTel# otel_setup.py import os from opentelemetry import trace from opentelemetry.sdk.trace import TracerProvider from opentelemetry.sdk.trace.export import BatchSpanProcessor from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter from opentelemetry.instrumentation.fastapi import FastAPIInstrumentor from opentelemetry.instrumentation.requests import RequestsInstrumentor def setup_telemetry(service_name: str): 初始化OpenTelemetry追踪。 设置将数据发送到本地Collector并自动检测FastAPI和Requests库。 # 设置全局的TracerProvider tracer_provider TracerProvider() trace.set_tracer_provider(tracer_provider) # 创建OTLP导出器指向我们部署的Collector otlp_exporter OTLPSpanExporter( endpointhttp://localhost:4318/v1/traces, # Collector的OTLP HTTP端点 ) # 将导出器添加到Span处理器 span_processor BatchSpanProcessor(otlp_exporter) tracer_provider.add_span_processor(span_processor) # 自动检测埋点FastAPI和Requests库 # 注意需要在创建FastAPI app之后调用FastAPIInstrumentor.instrument_app(app) RequestsInstrumentor().instrument() print(fOpenTelemetry initialized for service: {service_name})接下来修改你的主应用文件例如main.py# main.py from fastapi import FastAPI, HTTPException import openai from openai import OpenAI import asyncio from opentelemetry import trace from otel_setup import setup_telemetry import os # 1. 初始化OpenTelemetry (必须在创建app之前) setup_telemetry(service_nameai-assistant-service) # 2. 创建FastAPI应用 app FastAPI(titleAI Assistant API) # 3. 对FastAPI应用进行自动化埋点 from opentelemetry.instrumentation.fastapi import FastAPIInstrumentor FastAPIInstrumentor.instrument_app(app) # 4. 初始化OpenAI客户端请替换为你的API Key client OpenAI(api_keyos.getenv(OPENAI_API_KEY)) # 获取一个Tracer tracer trace.get_tracer(__name__) app.post(/v1/chat/completions) async def chat_completion(prompt: str, model: str gpt-3.5-turbo): 处理聊天补全请求并记录详细的Token和延迟信息。 # 为这个请求创建一个顶级Span with tracer.start_as_current_span(openai_chat_completion) as span: # 将关键属性记录到Span中 span.set_attribute(ai.request.model, model) span.set_attribute(ai.request.user_prompt, prompt[:100]) # 记录前100字符避免过长 try: # 记录请求开始时间精确到毫秒 import time start_time time.time() # 调用OpenAI API response client.chat.completions.create( modelmodel, messages[{role: user, content: prompt}], streamFalse, # 为简化示例使用非流式 ) # 计算总耗时 end_time time.time() total_duration_ms (end_time - start_time) * 1000 # 从响应中提取Token使用量 usage response.usage prompt_tokens usage.prompt_tokens completion_tokens usage.completion_tokens total_tokens usage.total_tokens # 将延迟和Token信息作为属性记录到Span span.set_attribute(ai.metrics.total_duration_ms, total_duration_ms) span.set_attribute(ai.metrics.prompt_tokens, prompt_tokens) span.set_attribute(ai.metrics.completion_tokens, completion_tokens) span.set_attribute(ai.metrics.total_tokens, total_tokens) span.set_attribute(ai.response.id, response.id) # 你也可以将这次调用记录为一个Metric指标这里以事件形式记录在Span中 # 更复杂的Metric记录可以使用Meter API return { content: response.choices[0].message.content, model: model, usage: usage.dict(), response_time_ms: total_duration_ms } except openai.APIConnectionError as e: span.record_exception(e) span.set_status(trace.Status(trace.StatusCode.ERROR, str(e))) raise HTTPException(status_code503, detailfNetwork error: {e}) except openai.APIError as e: span.record_exception(e) span.set_status(trace.Status(trace.StatusCode.ERROR, str(e))) raise HTTPException(status_codee.status_code, detailfOpenAI API error: {e})这段代码做了以下几件关键事情初始化OTel配置SDK将数据发送到本地的Collector。自动化埋点通过FastAPIInstrumentor和RequestsInstrumentor自动为HTTP请求和openai库发起的网络请求创建子Span这样我们就能看到从接收到用户请求到AI API返回的完整链路。手动增强埋点在核心的/v1/chat/completions接口中我们手动创建了一个Spanopenai_chat_completion并将模型名称、用户提示截断、Token用量、总耗时等业务核心属性记录了上去。这是生成我们监控分析所需数据的关键步骤。4.3 运行并测试确保Collector和ClickHouse正在运行 (docker-compose ps)。设置你的OpenAI API Keyexport OPENAI_API_KEYyour-key。启动你的FastAPI应用uvicorn main:app --reload --host 0.0.0.0 --port 8000。使用curl或Postman发送一个测试请求curl -X POST http://localhost:8000/v1/chat/completions \ -H Content-Type: application/json \ -d {prompt: 请用Python写一个快速排序函数, model: gpt-3.5-turbo}观察Collector的日志确认数据被接收和导出docker-compose logs -f otel-collector | grep -E Exporting|Traces如果一切正常你的请求数据已经被Collector处理并写入ClickHouse。5. 在ClickHouse中查询与分析监控数据数据已经入库现在我们通过ClickHouse来验证数据并开始分析。5.1 连接ClickHouse并查看数据使用Docker命令进入ClickHouse客户端docker-compose exec clickhouse clickhouse-client --user admin --password your_secure_password --database ai_telemetry在ClickHouse客户端中查看OTel Collector自动创建的表结构-- 查看追踪Traces表结构 DESCRIBE TABLE otel_traces;你会看到类似以下的列其中SpanAttributes、ResourceAttributes等列是嵌套的Map类型存储着我们记录的属性┌─name────────────────────┬─type─────────────────────────────────────┐ │ Timestamp │ DateTime64(9) │ │ TraceId │ String │ │ SpanId │ String │ │ ParentSpanId │ String │ │ TraceState │ String │ │ SpanName │ String │ │ SpanKind │ Int8 │ │ ServiceName │ String │ │ SpanAttributes │ Map(LowCardinality(String), String) │ │ ... └─────────────────────────┴──────────────────────────────────────────┘5.2 编写核心分析查询现在我们可以编写SQL查询从海量Span数据中提取出我们关心的响应延迟和Token消耗信息。查询1按模型统计平均响应时间、P95响应时间及总调用次数SELECT SpanAttributes[ai.request.model] AS model, count() AS total_requests, avg(cast(SpanAttributes[ai.metrics.total_duration_ms], Float64)) AS avg_latency_ms, quantile(0.95)(cast(SpanAttributes[ai.metrics.total_duration_ms], Float64)) AS p95_latency_ms FROM otel_traces WHERE SpanName openai_chat_completion -- 筛选我们手动创建的Span AND has(SpanAttributes, ai.request.model) -- 确保有模型属性 AND Timestamp now() - INTERVAL 1 HOUR -- 查询最近1小时数据 GROUP BY model ORDER BY total_requests DESC;这个查询能帮你一目了然地看出哪个模型最慢以及其延迟分布。查询2按模型和用户或会话统计Token消耗总量与成本估算SELECT SpanAttributes[ai.request.model] AS model, -- 假设我们从ResourceAttributes或SpanAttributes中记录了userId ResourceAttributes[user.id] AS user_id, sum(cast(SpanAttributes[ai.metrics.prompt_tokens], UInt64)) AS total_prompt_tokens, sum(cast(SpanAttributes[ai.metrics.completion_tokens], UInt64)) AS total_completion_tokens, sum(cast(SpanAttributes[ai.metrics.total_tokens], UInt64)) AS total_tokens, -- 一个简单的成本估算示例 (假设GPT-3.5价格) total_tokens * 0.002 / 1000 AS estimated_cost_usd FROM otel_traces WHERE SpanName openai_chat_completion AND has(SpanAttributes, ai.request.model) AND Timestamp now() - INTERVAL 1 DAY -- 查询最近1天数据 GROUP BY model, user_id ORDER BY total_tokens DESC LIMIT 20;这个查询是成本管控的核心。它能帮你快速定位“消耗大户”是某个模型被过度使用还是某个用户产生了异常高的消耗。查询3追踪单个慢请求的完整链路当发现一个P99延迟极高的请求时你需要定位瓶颈。通过TraceId可以还原整个调用链SELECT Timestamp, SpanName, ParentSpanId, cast(SpanAttributes[ai.metrics.total_duration_ms], Float64) as duration_ms, SpanAttributes FROM otel_traces WHERE TraceId your_slow_trace_id_here -- 替换为具体的TraceId ORDER BY Timestamp ASC;这个查询会按时间顺序列出该次请求的所有Span你可以清晰地看到时间主要消耗在哪个环节是网络请求requests.request还是你的业务逻辑openai_chat_completion。6. 构建监控仪表盘Grafana命令行查询毕竟不便我们需要一个可视化仪表盘。Grafana是连接ClickHouse并制作图表的最佳选择。安装并运行Grafana。可以将其添加到docker-compose.yml中也可以单独安装。在Grafana中添加ClickHouse数据源。使用HTTP URLhttp://clickhouse:8123Docker网络内或http://localhost:8123宿主机数据库名ai_telemetry以及对应的用户名密码。创建Dashboard。面板1请求量与延迟趋势。用一个Time series图表查询每秒请求数count() over time和平均延迟。面板2模型维度对比。用Bar gauge或Stat图表展示不同模型的总请求数、平均Token消耗。面板3Token消耗Top N用户。用Table面板运行上面查询2的变体按天或按小时展示。面板4慢请求追踪列表。用一个Table面板列出最近一段时间内延迟超过阈值如5秒的请求并显示其TraceId方便直接点击跳转到详细链路视图需配置Trace Jaeger或Tempo等但通过ClickHouse查询也能实现基本功能。通过这样一个Dashboard你和你的团队就能在同一个屏幕上实时掌握AI服务的健康度、性能与成本消耗。7. 常见问题与排查思路在实施过程中你可能会遇到以下问题问题现象可能原因排查方式解决方案应用启动后Collector收不到数据1. 应用OTel SDK配置错误端点、端口2. Collector服务未正常运行或端口未暴露3. 网络策略/防火墙阻止1. 检查应用日志查看OTel初始化是否有报错。2.docker-compose logs otel-collector查看Collector日志。3.curl -v http://localhost:4318/v1/traces测试Collector端点是否可达。1. 确认otel_setup.py中的endpoint指向正确的Collector地址。2. 确保docker-compose.yml中端口映射正确且容器处于运行状态。3. 检查宿主机防火墙或Docker网络设置。ClickHouse中查询不到数据1. Collector到ClickHouse写入失败2. 表名或数据库名不匹配3. 数据写入延迟批处理1. 查看Collector日志中关于clickhouseexporter的错误。2. 登录ClickHouseSHOW TABLES确认表是否存在。3. 检查Collector配置中的batch处理器timeout可能数据还在缓冲区。1. 检查ClickHouse的username/password和endpoint配置。2. 确认otel-collector-config.yaml中的database和*_table_name与ClickHouse内一致。3. 调小batch的timeout值如改为1s用于调试。Span中缺少自定义属性如ai.metrics.total_tokens1. 埋点代码未执行到span.set_attribute处2. 属性值类型问题或Key拼写错误3. OTel SDK版本兼容性问题1. 在代码中打印日志确认span.set_attribute被调用。2. 使用Collector的debugexporter查看原始Span数据是否包含该属性。3. 检查OTel SDK和Collector的版本。1. 确保在try块内且在API调用成功后设置属性。2. 属性Key保持一致使用字符串类型值。3. 尝试使用基础数据类型String, Int, Float。查询性能慢特别是聚合查询1. 数据量过大未使用合适的索引2. ClickHouse配置过低3. 查询语句未优化1. 使用EXPLAIN语句查看查询计划。2. 监控ClickHouse的CPU和内存使用率。1. 为Timestamp和常用的属性如SpanName,SpanAttributes[ai.request.model]创建投影Projection或物化视图。2. 根据数据保留策略TTL及时删除旧数据。3. 避免对Map列进行全扫描使用has函数先行过滤。Token计数不准或为01. OpenAI响应中未返回usage字段某些模型或错误时2. 流式响应streamTrue的处理方式不同1. 打印完整的OpenAI响应检查usage对象是否存在。2. 查阅OpenAI API文档确认当前使用的模型支持usage字段。1. 在代码中添加对response.usage的判空逻辑。2. 如果是流式响应需要累加每个chunk中的usage如果提供或自行估算。8. 最佳实践与进阶建议当监控系统稳定运行后可以考虑以下优化和进阶方案使其更加强大和可靠区分环境与标签在初始化OTel时通过Resource对象添加环境environmentprod/staging、版本service.versionv1.2.0等标签。这样可以在同一个ClickHouse中区分不同环境的数据查询时用ResourceAttributes[environment]过滤。监控数据采样全量采集所有请求的Trace数据在高并发下可能对性能和存储造成压力。可以配置采样策略例如1对慢请求如3s100%采样2对正常请求进行随机采样如10%。这可以在OTel SDK或Collector中配置。建立告警机制不要只满足于事后查看。利用Grafana Alert或Prometheus Alertmanager通过Collector将指标导出到Prometheus建立告警规则。例如延迟告警某个模型的P95延迟连续5分钟超过阈值。错误率告警AI API调用错误率超过1%。成本异常告警每小时Token消耗量超过日常平均值的200%。细化Metric指标除了在Span中记录属性对于高频核心指标如每秒Token消耗量、请求速率应使用OTel的Meter API创建真正的Metric。Metric更适合做聚合和告警而Span更适合做链路分析。可以将Metric也导出到ClickHouse或Prometheus。安全与隐私敏感信息脱敏在Collector中配置attributes处理器过滤或脱敏Span中的敏感信息如完整的Prompt可能包含PII信息。示例中我们只记录了前100个字符。访问控制确保ClickHouse和Grafana的访问权限受到严格控制生产环境的监控数据应视为敏感数据。性能开销评估在生产环境全面启用前进行压力测试评估OTel SDK和Collector对应用本身性能延迟、吞吐的影响。通常开销在1%-5%是可接受的批处理处理器能有效降低网络I/O压力。通过本文的步骤你不仅搭建了一套监控系统更掌握了一种面向AI应用的可观测性方法论。这套方法的核心在于将业务语义模型、Token注入到通用的可观测性数据模型Trace, Metric中再借助强大的分析引擎ClickHouse进行多维下钻与聚合。从此AI服务的性能与成本对你而言不再是黑盒每一个慢请求、每一分Token消耗都有迹可循优化决策也因此有了坚实的数据支撑。建议你将此方案在测试环境充分验证然后逐步灰度到生产环境开始你的数据驱动的AI服务优化之旅。
返回列表