创建时间: 2026-04-01最后更新: 2026-04-23

1. 前面手动搭了一整套 Tracing,LangChain 里还要再来一遍吗

在第一章的可观测性中,我们从头搭了一套完整的可观测体系:

  • TraceContext:每次请求创建一个实例,用 trace.span() 包装每个管线节点,自动记录输入、输出、耗时、状态
  • 采样策略:错误和降级全量保留,正常请求按比例采样
  • 分层存储:D1 存完整现场,KV 存聚合摘要,waitUntil 不阻塞响应

那套方案很好,但接入成本不算低。每个管线节点都要手动包一层 trace.span(),每次新增节点都要记得埋点。

manual-span.ts
1
// 前面的做法:手动包装每个节点
2
const memories = await trace.span(
3
'memory_retrieval',
4
{ query: userMessage, sessionId },
5
() => retrieveMemories(env, userMessage, sessionId)
6
)

现在进入 LangChain 体系,事情变了。

LangChain 的每个核心组件——ChatModel、Tool、Chain、Retriever——在运行时都会自动在关键节点发出事件通知。你不需要手动写 trace.span(),框架已经帮你埋好了。

这套事件通知机制就是 Callbacks

一句话概括它和前面 TraceContext 的关系:

TraceContext 是你自己搭的事件采集框架,Callbacks 是 LangChain 内建的事件采集框架。 概念一样,只是谁来做的区别。

订阅后可阅读剩余内容
AI 电子伴侣企业级项目实战
已发布145计划发布120目标已完成121%