
training dataAPI logsfine-tuningmigrationon-device AIsegment:mobile-builder
API 日志转训练数据:利用云端 AI 历史记录进行微调
您现有的云端 AI API 日志就是一个现成的训练数据集。如何从 API 交互日志中提取、清洗和格式化微调数据,用于端侧模型。
EErtas Team·
如果您目前在使用云端 AI API(OpenAI、Anthropic、Google Gemini),您已经在生成训练数据了。每次 API 调用都包含一个输入(用户的请求)和一个输出(模型的回复)。这就是一个训练样本。
您的 API 日志是从云端 AI 迁移到端侧 AI 的最快路径。您不需要从零开始创建数据集。您已经有了。
API 日志包含什么
一个典型的 API 调用日志条目:
{
"timestamp": "2026-03-15T14:22:03Z",
"model": "gpt-4o-mini",
"messages": [
{
"role": "system",
"content": "You are the shopping assistant for StyleApp..."
},
{
"role": "user",
"content": "Find me a blue dress for a summer wedding"
},
{
"role": "assistant",
"content": "Here are some suggestions for a summer wedding...\n\n1. Floral midi dress in navy blue...\n2. Light blue chiffon maxi dress..."
}
],
"tokens_used": {"input": 1842, "output": 387},
"latency_ms": 1203
}
这个日志条目已经是微调所需的精确格式。messages 数组就是一个训练对话。
提取流程
步骤 1:导出您的日志
日志的存储位置取决于您的架构:
如果您自己记录 API 调用: 从您的数据库(PostgreSQL、MongoDB 等)或日志聚合服务(Datadog、CloudWatch 等)导出。
如果您使用 OpenAI 的 API: API 默认不存储日志。您需要自己的日志中间件。如果还没有,现在就设置。每次未来的 API 调用都是潜在的训练样本。
# 简单的日志中间件示例
import json
import datetime
def log_api_call(request_messages, response_content, model, tokens):
log_entry = {
"timestamp": datetime.datetime.utcnow().isoformat(),
"model": model,
"messages": request_messages + [
{"role": "assistant", "content": response_content}
],
"tokens_used": tokens,
}
with open("api_logs.jsonl", "a") as f:
f.write(json.dumps(log_entry) + "\n")
步骤 2:质量过滤
不是每个 API 回复都是好的训练数据。过滤掉:
失败的回复: 超时错误、格式错误的输出、拒绝回复。
低质量输出: 用户立即重试的回复(表示不满意),或被截断的输出。
异常值: 不代表典型行为的异常长或短的回复。
离题交互: 如果用户偶尔提出离题问题,除非您希望模型处理它们,否则排除。
def is_quality_example(log_entry):
messages = log_entry["messages"]
assistant_msg = next(
(m for m in reversed(messages) if m["role"] == "assistant"), None
)
if not assistant_msg:
return False
content = assistant_msg["content"]
# 过滤过短的回复
if len(content) < 50:
return False
# 过滤错误回复
if "I apologize" in content and "I cannot" in content:
return False
# 过滤截断的回复
if log_entry.get("finish_reason") == "length":
return False
return True