AI Agent 第十三篇:【2026零基础AI教程13】LangSmith全链路监控实战,日志追踪、耗时分析、报错定位、流程可视化,企业调试必备工具
🎯 前言
上一篇我们搞定了 Checkpoint断点持久化,解决了AI工作流「中断丢进度、重复执行、稳定性差」的生产级问题,让我们的LangGraph项目真正具备线上运行的基础条件。
但随着工作流越来越复杂:分支路由、并行任务、循环迭代、子流程嵌套、断点续传叠加,我们会遇到新的调试痛点:
-
本地代码正常,线上运行莫名报错,完全找不到问题节点
-
工作流执行耗时过长,不知道是模型慢、节点慢还是逻辑冗余
-
多轮迭代、子流程嵌套执行,看不到完整执行链路,流程黑盒
-
报错只有笼统提示,无法定位具体:哪一步出错、入参是什么、状态怎么变
-
无法统计Token消耗、调用次数、模型耗时,成本完全不可控
如果说Checkpoint是AI项目的稳定性兜底,那 LangSmith 就是企业AI项目的可视化监控与调试神器。
本篇零基础手把手实战LangSmith全链路监控,无需复杂部署、一行代码开启,实现全流程可视化、日志追溯、性能分析、报错精准定位、成本统计,彻底告别AI工作流黑盒调试,是大厂生产环境标配工具。
一、LangSmith核心认知(小白一次性弄懂)
1.1 什么是LangSmith?
LangSmith 是 LangChain 官方配套的大模型应用全链路监控、调试、评测平台,完美适配所有 LangGraph 工作流。
它可以把我们看不见的代码执行过程、节点流转、状态变化、模型调用、耗时消耗,全部可视化展示在网页后台。
1.2 核心解决的问题
-
解决流程黑盒:清晰看到每一个节点执行顺序、是否执行、是否跳过
-
解决报错难定位:精准定位报错节点、错误原因、入参出参
-
解决性能未知:统计每个节点耗时、模型响应耗时、总链路耗时
-
解决成本不可控:实时统计输入/输出Token、单次消耗、累计消耗
-
解决无法复盘:所有运行记录永久留存,支持随时回溯复盘
1.3 企业生产必备理由
个人Demo可以靠print打印调试,企业级复杂AI系统绝对不能靠print。
线上排查问题、迭代优化性能、核算模型成本、优化Prompt、修复隐性Bug,全部依赖LangSmith,是2026年大模型工程化的标准刚需工具。
二、LangSmith核心能力清单
-
全链路可视化追踪:DAG流程图动态展示执行路径,分支、循环、子流程一目了然
-
细粒度日志记录:每一步State状态变更、入参、出参、Prompt内容完整留存
-
性能耗时分析:节点耗时、LLM耗时、网络耗时精准拆分
-
Token成本统计:精准统计单次调用、累计调用Token消耗
-
报错堆栈定位:运行异常精准定位到具体代码节点与原因
-
会话线程管理:按thread_id分类所有任务,断点续传流程完整追溯
-
项目分组管理:多项目、多环境隔离,适配大型项目迭代
三、前期准备:账号与密钥配置
3.1 注册账号(免费够用)
直接官网注册:www.langsmith.com,支持Github/邮箱登录,个人免费额度完全满足学习、测试、小型项目使用。
3.2 获取API Key
-
登录后台,进入个人设置(Settings)
-
找到 API Keys 栏目
-
新建密钥,复制生成的LANGSMITH_API_KEY
无需部署服务器、无需搭建数据库,开箱即用。
3.3 环境依赖
本系列环境已自带,无需额外安装,确保版本匹配即可:
pip install langchain==0.3.0
pip install langgraph==1.1.0
pip install langchain-openai python-dotenv
四、完整可运行实战代码(开启全链路监控)
基于上一篇断点续传迭代工作流改造,全程无侵入、一行配置开启LangSmith监控,完美兼容断点持久化能力。
from dotenv import load_dotenv
import os
import time
from typing import TypedDict, Literal
from langchain_openai import ChatOpenAI
from langgraph.graph import StateGraph, START, END
from langgraph.checkpoint.memory import MemorySaver
# 加载环境变量
load_dotenv()
# ===================== LangSmith核心监控配置(全局开启)=====================
# 开启全链路追踪
os.environ["LANGCHAIN_TRACING_V2"] = "true"
# 填写你的LangSmith密钥
os.environ["LANGCHAIN_API_KEY"] = os.getenv("LANGSMITH_API_KEY")
# 项目名称(后台自动分组展示)
os.environ["LANGCHAIN_PROJECT"] = "LangGraph-2026-生产级实战"
# =========================================================================
# --------------------------
# 1、全局状态定义
# --------------------------
class IterState(TypedDict):
user_requirement: str
content: str
check_result: str
iter_count: int
# --------------------------
# 2、模型与持久化初始化
# --------------------------
llm = ChatOpenAI(
api_key=os.getenv("API_KEY"),
base_url=os.getenv("BASE_URL"),
model="gpt-3.5-turbo",
temperature=0.3
)
# 内存断点持久化
memory = MemorySaver()
# --------------------------
# 3、业务节点定义
# --------------------------
def create_content(state: IterState) -> IterState:
prompt = f"根据需求撰写一篇优质短文案:{state['user_requirement']}"
res = llm.invoke(prompt)
state["content"] = res.content.strip()
state["iter_count"] = 0
return state
def check_content(state: IterState) -> IterState:
prompt = f"""
质检文案,达标输出【达标】,不达标输出【不达标】+优化问题
文案:{state['content']}
"""
res = llm.invoke(prompt)
state["check_result"] = res.content.strip()
return state
def optimize_content(state: IterState) -> IterState:
time.sleep(1.5)
prompt = f"""
根据问题优化文案,只修复瑕疵不重写整体:
原文:{state['content']}
问题:{state['check_result']}
"""
res = llm.invoke(prompt)
state["content"] = res.content.strip()
state["iter_count"] += 1
print(f"✅ 第{state['iter_count']}次迭代优化完成")
return state
# --------------------------
# 4、循环路由逻辑
# --------------------------
def route_iter(state: IterState) -> Literal["optimize", "end"]:
if state["iter_count"] >= 3:
return "end"
if "达标" in state["check_result"]:
return "end"
return "optimize"
# --------------------------
# 5、搭建带监控+断点的生产工作流
# --------------------------
graph = StateGraph(IterState)
graph.add_node("create_content", create_content)
graph.add_node("check_content", check_content)
graph.add_node("optimize", optimize_content)
graph.add_edge(START, "create_content")
graph.add_edge("create_content", "check_content")
graph.add_conditional_edges("check_content", route_iter, {"optimize": "optimize", "end": END})
graph.add_edge("optimize", "check_content")
# 绑定持久化+监控
iter_workflow = graph.compile(checkpointer=memory)
# --------------------------
# 6、运行测试
# --------------------------
if __name__ == "__main__":
config = {"configurable": {"thread_id": "2026_langsmith_demo_001"}}
user_req = "写一篇零基础AI学习入门短文案,适合新手、简洁吸引人"
result = iter_workflow.invoke({"user_requirement": user_req}, config=config)
print("\n🎉 任务执行完成!")
print("最终文案:", result["content"])
print("最终迭代次数:", result["iter_count"])
print("\n👉 前往LangSmith后台查看全链路监控日志")
五、.env环境变量配置(关键)
在本地.env文件中新增一行LangSmith密钥,和大模型密钥同级配置:
API_KEY=你的大模型密钥
BASE_URL=你的代理地址
LANGSMITH_API_KEY=你的LangSmith密钥
六、后台监控页面全功能解读
运行代码后,打开LangSmith后台,即可看到本次完整运行记录,核心可查看四大核心数据:
6.1 可视化执行链路
系统自动绘制DAG执行流程图,清晰展示:
-
哪些节点成功执行
-
分支路由走了哪条路径
-
循环迭代执行了几次
-
哪些节点被跳过、哪些节点重复执行
彻底告别代码猜逻辑,流程流转100%可视化。
6.2 完整状态追溯
每一个节点执行前后的 State全局状态 全部留存:
用户需求、初稿内容、质检结果、迭代次数,每一次变更都可回溯,精准定位状态异常问题。
6.3 耗时性能分析
后台自动拆分耗时明细:
-
LLM模型响应耗时
-
节点代码执行耗时
-
整体链路总耗时
轻松优化瓶颈节点,大幅提升工作流响应速度。
6.4 Token成本统计
自动统计:输入Token、输出Token、单次消耗,长期运行可直观看到整体成本,避免盲目消耗。
七、报错调试实战演示
当工作流线上报错时,LangSmith可以直接定位:
-
精准定位报错具体节点
-
查看报错前的入参数据是否异常
-
查看Prompt是否存在问题
-
查看模型返回结果是否为空/异常
相比本地print调试,效率提升10倍以上,是线上排错的唯一方案。
八、新手高频坑点避坑指南
坑1:开启追踪后看不到日志
原因:LANGCHAIN_TRACING_V2 未设置为 true、密钥填写错误、网络不通。
解决:严格核对三个环境变量,确保全部配置生效。
坑2:项目名称混乱,日志杂乱
解决:不同业务工作流配置不同 LANGCHAIN_PROJECT,自动分组归类,方便管理。
坑3:只监控模型,不监控节点
说明:新版LangGraph默认全链路监控,包含自定义节点、LLM调用、状态变更,无需额外配置。
坑4:本地正常,后台无记录
解决:代码运行必须走完完整链路,中途强制终止可能导致日志上报不全。
九、生产级高阶用法
-
团队协作监控:多人共用密钥,统一后台查看所有项目日志,团队排错协同
-
版本迭代对比:不同版本工作流执行效果、耗时、Token消耗对比,精准优化
-
自定义标签分组:按场景、版本、环境打标签,批量管理任务
-
告警通知配置:任务报错、超时自动推送通知,实时感知线上异常
-
数据集评测:基于历史运行日志,快速构建评测数据集,迭代模型与Prompt效果
十、零基础自测巩固
1、LangSmith在AI工程化落地中的核心作用是什么?
2、开启LangSmith全链路监控必须配置的三个环境变量是什么?
3、相比传统print打印调试,LangSmith的核心优势体现在哪里?
✅ 本篇核心总结
1、LangSmith是LangGraph企业级落地的标配监控工具,彻底解决AI工作流黑盒问题;
2、一行配置即可开启全链路追踪,可视化流程、状态、耗时、Token、报错信息;
3、搭配上一篇Checkpoint断点持久化,实现稳定运行+可监控、可追溯、可排错的生产双保障;
4、所有线上AI Agent、复杂工作流,必须开启LangSmith监控,是工程化成熟的标志。
📌 下一篇预告
第十四篇:【2026零基础AI教程14】LangGraph异常熔断、重试、兜底容错机制实战,彻底解决线上报错、超时、崩溃问题,打造高可用AI系统
更多推荐


所有评论(0)