跳到主要内容

15-故障排查与反模式手册

核对日期:2026-05-18
官方资料:Agents https://docs.langchain.com/oss/javascript/langchain/agents;Guardrails https://docs.langchain.com/oss/javascript/langchain/guardrails;LangSmith observability https://docs.langchain.com/langsmith/observability-quickstart

目标

本章用于排查“能跑但不好用”的 LangChain 应用。它不是概念解释,而是把常见故障映射到检查项、日志、eval 和修复方式。

机制

排查顺序:

输入 -> 上下文 -> 模型 -> 工具 -> 输出 -> trace -> eval

不要一上来改 prompt。多数线上问题来自 schema、权限、检索、上下文预算、工具失败或 provider 差异。

TypeScript 排查表

症状优先检查修复
工具不调用tool description、schema、动态工具列表、用户意图简化工具列表,补 few-shot 或路由规则
工具误调用相似工具过多、description 重叠动态暴露工具,增加负例 eval
schema 经常失败字段太多、约束不清、模型不支持拆小 schema,增加 fallback
RAG 胡答低召回、无 citation、prompt 允许猜测低证据拒答,citation 强约束
权限泄露检索后过滤、工具无后端鉴权检索前 ACL,Tool Gateway
trace 有敏感信息日志未脱敏写 redact middleware
streaming 半截答案错误事件没处理定义 chunk/error/done 协议

Debug Checklist

  1. 保存一条失败输入,不要只口头描述。
  2. 打印实际 messages,不只看 UI。
  3. 打印最终暴露给模型的 tools。
  4. 打印 tool call input 和 schema error。
  5. 打印 retrieved document ids 和 citations。
  6. 确认 trace 脱敏。
  7. 把失败样本加入 eval。

Python 差异

Python 和 TypeScript 的排查思想一致。区别是 tracing 接入、回调、中间件和 schema 错误对象形状不同。跨语言项目要把失败样本抽成 JSON case,而不是只保留某个语言的测试。

常见反模式

反模式后果
只调 prompt问题可能在工具、检索或权限
不保存失败样本下次还会复现但没人知道原因
线上临时热改 schema前端和下游解析崩掉
trace 不脱敏调试系统变成安全风险

故障复盘模板

## 现象

## 失败输入

## 实际 messages / tools / retrieved docs

## 根因分类

## 修复

## 新增 eval

## 回归结果

练习任务

  1. 故意把 enterprise-kb-agent.tsminScore 调低,观察 ACL deny 是否仍通过。
  2. multi-tool-task-agent.ts 增加相似工具,设计误调用 eval。
  3. 给 docs check 增加“每个文档必须有练习任务”的规则。