LangChain V1.0 核心解析(拓展):LangSmith监控工具

34 阅读3分钟

LangSmith监控工具

LangSmith核心概念详解

  大模型的行为往往存在不确定性,尤其在开发复杂的AI Agent应用程序时,过程中常包含众多子步骤。若希望掌握每一步的执行状态与结果,一方面可采用Debug方式实现实时控制,另一方面也可借助特定工具来观察和调试中间的交互流程。Langsmith 就是为应对这一挑战而设计的工具平台,由 LangChainLangGraph 的团队创建。其核心目标是赋予LLM应用全面的可观测性,具体通过两大功能支柱实现:一是提供覆盖全链路的跟踪、日志与实时分析能力;二是构建集成的监控与调试环境,让每一个中间步骤都清晰可见。

  • Project (项目):蓝色方块代表整个项目,可能是一个单独的应用程序或服务。
  • Traces (轨迹):绿色方块代表项目在不同条件或配置下的执行路径。每个轨迹可以是一个特定的用户会话、一个功能的执行,或者应用在特定输入下的行为。
  • Runs (运行):每个轨迹下的黄色方块表示特定轨迹的单次执行。这些是执行的实例,每个实例都是轨迹在特定条件下的实际运行。
  • Feedback, Tags, Metadata (反馈、标签、元数据):这部分显示了系统如何利用用户或自动化工具生成的反馈、标签和元数据来增强轨迹的管理和过滤。反馈可以用于改进未来的运行,标签和元数据可用于分类和筛选特定的轨迹或运行,以便在LangSmith的用户界面中更容易地管理和审查

Trace (追踪)

一次完整应用执行的全链路记录,从用户输入到最终输出的整个调用树。它可视化LLM应用的执行路径,帮助开发者快速定位问题。

  • 作用:提供端到端的可见性,捕获所有输入、输出和中间步骤,是调试和性能分析的基础。

image.png LangSmith可以追踪从用户输入到最终输出的完整流程,只要执行了invoke或者stream方法,就会自动记录一条Trace。包括:

  • Agent决策过程
  • 工具调用详情
  • LLM调用参数和响应
  • 检索结果质量
  • 执行耗时分析

Run(运行单元)、Feedback(反馈)、Metadata(元数据)

  • Run:Trace中的单个执行节点,每个LLM调用、工具调用或函数执行都会生成一个Run,形成父子关系的树状结构。

    • 作用:记录具体操作细节(如token消耗、延迟、参数), granular 级别的监控和成本分析。
  • Feedback:对单个Run的质量评估,包含标签(如"answer_correctness")和分数(0-1或分类),可人工标注或自动计算。

    • 作用:构建评估数据集,驱动持续优化。支持在线(实时用户反馈)和离线(批量评估)两种模式。

    • 注意:LangSmith不会自动生成Feedback,必须由开发者主动在代码中调用API显式创建反馈记录。

  • Metadata:附加在Run上的键值对信息(如{"version": "v1.2", "env": "production"}),用于标记运行环境、模型版本等。

    • 作用:支持跨维度筛选、分组分析(如对比不同版本的性能差异)。

image.png

配置步骤

  1. 创建一个LangSmith 账户

  注册并等登录后,可以直接查看到仪表板:

image.png

  创建一个API密钥:

image.png 创建环境变量

image.png

# 1.导入相关库
from langchain.agents import create_agent
from langchain_tavily import TavilySearch
from langchain_deepseek import ChatDeepSeek
from dotenv import load_dotenv
load_dotenv(override=True)

# 2.导入模型和工具
web_search = TavilySearch(max_results=2)

# 3.创建模型
model = ChatDeepSeek(model="deepseek-chat")

# 4.创建Agent
agent = create_agent(
    model=model,
    tools=[web_search],
    system_prompt="你是一名多才多艺的智能助手,可以调用工具帮助用户解决问题。"
)

# 5.运行Agent获得结果
result = agent.invoke(
    {"messages": [{"role": "user", "content": "请帮我查询2024年诺贝尔物理学奖得主是谁?"}]}
)

print(result['messages'][-1].content)