第 19 章:LangSmith 调试:追踪一次 AI 调用发生了什么
本章目标
这一章解决调试问题。AI 应用不能只看最终答案,还要看中间发生了什么。
为什么需要 LangSmith
普通接口调试看请求和响应就够了。AI 应用还要看:
- 使用了哪个模型
- Prompt 是什么
- 检索到了哪些文档
- 工具是否被调用
- 工具参数是什么
- 每一步耗时多少
- Token 消耗多少
- 哪一步导致结果变差
LangSmith 的价值就是把这些过程可视化。
开启 tracing
环境变量:
LANGSMITH_TRACING=true
LANGSMITH_API_KEY=your_langsmith_api_key
LANGSMITH_PROJECT=ai-kb-agent
开启后,LangChain 相关调用可以被记录到 LangSmith 项目中。
调试一次 RAG
一次知识库问答至少要观察:
用户问题
改写后的问题
检索到的 chunks
最终 Prompt
模型输出
引用来源
耗时
Token 成本
如果答案错误,不要直接改 Prompt。先判断:
- 检索结果对不对
- 上下文是否包含答案
- Prompt 是否允许模型编造
- 模型是否忽略了引用
- 用户问题是否模糊
本地日志补充
即使用 LangSmith,也建议保留业务日志:
console.log({
event: "rag_request",
question,
rewrittenQuestion,
sources: results.map((item) => item.record.metadata.source),
scores: results.map((item) => item.score),
model: process.env.CHAT_MODEL,
createdAt: new Date().toISOString()
});
生产环境要换成结构化日志系统,不要长期依赖 console.log。
评估集
准备一个 evals/rag-cases.json:
[
{
"question": "报销超过 5000 元要谁审批?",
"expectedKeywords": ["部门负责人", "审批"],
"expectedSource": "报销制度.md"
}
]
每次修改切分、Prompt、模型或向量库后,跑一遍评估集。
实战任务
完成:
- 配置 LangSmith tracing
- 跑一次普通 Chat
- 跑一次工具 Agent
- 跑一次 RAG
- 对比三种调用链路
- 准备 10 条评估问题
常见坑
不要只凭肉眼感觉优化 AI 应用。要保存测试问题和结果。
不要把敏感数据随意发送到第三方调试平台。企业项目要先确认合规要求。
不要忽略 Token 成本。调试阶段看起来便宜,规模上来后成本会放大。
本章小结
LangSmith 帮我们看清 AI 应用内部链路。下一章会补齐权限、限流、成本控制和日志。