当大模型开始“碎碎念”:聊聊大模型日志分析与调优系统是怎么设计的
作者:Echo_Wish
很多团队在做大模型系统的时候,一开始都很兴奋:
模型上线了。
API 跑起来了。
用户也开始调用了。
但过一段时间,问题就开始出现:
- 为什么有些请求 延迟特别高?
- 为什么 Token 消耗越来越离谱?
- 为什么同样的 Prompt,结果有时候好有时候差?
- 为什么 GPU 利用率只有 30%?
这时候你就会发现:
大模型系统最缺的不是模型,而是“可观测性”。
传统系统我们有:
- 日志(Logs)
- 指标(Metrics)
- 链路追踪(Tracing)
但到了 LLM 系统,事情变复杂了,因为你需要观察的不只是系统性能,还包括:
Prompt
Token
Latency
模型输出质量
上下文长度
调用成本
所以今天咱就聊一个很实用的话题:
如何设计一个“大模型日志分析与调优系统”。
一、先想清楚:大模型日志到底要记录什么
很多团队最开始的日志是这样的:
2026-03-05 request success
看完基本等于没看。
大模型系统日志至少要包含五类信息:
| 类别 | 内容 |
|---|---|
| 请求信息 | 用户、接口、时间 |
| Prompt信息 | prompt内容 |
| Token信息 | input token / output token |
| 性能信息 | 延迟、GPU耗时 |
| 结果信息 | 输出文本 |
一个比较完整的日志结构可以是这样:
{
"request_id": "req_123",
"user_id": "user_88",
"model": "llama3-70b",
"prompt": "Explain Kubernetes",
"input_tokens": 120,
"output_tokens": 300,
"latency_ms": 1850,
"gpu_time_ms": 1600,
"response": "Kubernetes is..."
}
这样日志才有分析价值。
二、日志采集架构设计
在真实系统里,大模型日志一般不会直接写文件,而是进入日志系统。
一个比较常见的架构是:
API Gateway
│
▼
Model Service
│
▼
Log Collector
│
▼
Kafka
│
▼
ClickHouse / Elasticsearch
│
▼
分析系统
简单说就是:
服务 → 日志流 → 数据仓库 → 分析
这样可以支持:
- 实时监控
- 历史分析
- 成本统计
三、Python示例:记录LLM调用日志
我们可以在调用模型的时候统一封装日志。
import time
import uuid
import json
def call_llm(prompt):
request_id = str(uuid.uuid4())
start = time.time()
# 模拟模型调用
response = "This is an answer about AI"
latency = (time.time() - start) * 1000
log = {
"request_id": request_id,
"prompt": prompt,
"response": response,
"latency_ms": latency,
"input_tokens": len(prompt.split()),
"output_tokens": len(response.split())
}
print(json.dumps(log))
return response
call_llm("Explain machine learning")
这一步其实就是:
统一日志格式。
四、Token成本分析(很多团队忽略的关键)
很多公司上线大模型后第一个震惊的事情是:
账单爆炸。
因为 Token 消耗很容易失控。
比如统计 Token 使用量:
import pandas as pd
df = pd.read_json("llm_logs.json", lines=True)
df["total_tokens"] = df["input_tokens"] + df["output_tokens"]
print("平均token:", df["total_tokens"].mean())
print("最大token:", df["total_tokens"].max())
分析后可能发现:
平均 token:320
最大 token:4500
这说明:
Prompt 太长了。
优化方式通常包括:
- Prompt压缩
- RAG 检索优化
- 上下文截断
五、延迟分析:为什么有些请求特别慢
LLM 延迟一般来自三个地方:
排队时间
推理时间
网络时间
我们可以做简单分析:
import pandas as pd
df = pd.read_json("llm_logs.json", lines=True)
slow = df[df["latency_ms"] > 3000]
print("慢请求数量:", len(slow))
进一步可以画分布:
import matplotlib.pyplot as plt
plt.hist(df["latency_ms"], bins=50)
plt.xlabel("Latency ms")
plt.ylabel("Count")
plt.show()
这样你就能看到:
系统到底卡在哪。
六、Prompt质量分析(很多团队没做)
大模型系统还有一个很特别的调优点:
Prompt质量。
比如统计最常见Prompt:
top_prompt = df["prompt"].value_counts().head(10)
print(top_prompt)
你可能会发现:
Explain AI
Explain AI
Explain AI
用户一直问一样的问题。
那就可以:
做缓存。
七、缓存优化(能省一大半成本)
大模型系统一个经典优化是:
Prompt Cache
思路非常简单:
相同Prompt → 直接返回历史结果
示例:
cache = {
}
def cached_llm(prompt):
if prompt in cache:
return cache[prompt]
result = call_llm(prompt)
cache[prompt] = result
return result
很多场景下:
可以减少 40% 以上调用。
八、质量评估日志(未来最重要)
未来的大模型日志不仅要记录性能,还要记录:
回答质量。
比如:
用户点赞
用户点踩
用户重试
日志结构可以这样:
{
"request_id": "req_123",
"rating": 4,
"retry": false
}
这样可以训练:
自动Prompt优化系统。
九、一个完整的大模型日志平台
综合起来,一个成熟系统大概是这样:
用户请求
│
▼
API Gateway
│
▼
LLM Service
│
▼
日志采集
│
▼
Kafka
│
▼
ClickHouse
│
├─ Token分析
├─ 延迟分析
├─ Prompt分析
└─ 成本分析
最终你会得到一个 LLM Observability 平台。
最后聊点我的真实感受
这两年我见过很多公司做大模型系统,有一个很有意思的现象:
大家都在卷:
模型大小
RAG效果
推理速度
但很少有人认真做:
LLM日志系统。
其实真正成熟的 AI 系统一定有三件东西:
监控
日志
反馈
没有这些东西,大模型就像一辆:
没有仪表盘的跑车。
你可能开得很快,但你根本不知道:
- 油还剩多少
- 发动机温度多少
- 什么时候会爆缸