news 2026/4/24 0:08:34

LangSmith调试评估

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LangSmith调试评估

LangSmith 调试与评估:构建可观测的AI应用

引言

在传统软件开发中,我们有完善的调试工具、日志系统和测试框架。但在AI应用开发中,由于LLM的非确定性,调试和评估变得异常困难。LangSmith作为LangChain官方推出的AI应用可观测性平台,为开发者提供了完整的调试、测试、评估和监控解决方案。

AI应用调试的挑战

  • 黑盒问题:LLM内部决策过程不透明
  • 非确定性:相同输入可能产生不同输出
  • 成本高昂:每次调试都需要调用API
  • 评估困难:如何量化"回答质量"?
  • 版本追踪:Prompt和模型变更的影响难以评估

LangSmith核心概念

架构概览

┌─────────────────────────────────────────────────────────────┐ │ LangSmith Platform │ ├─────────────────────────────────────────────────────────────┤ │ │ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ │ │ Tracing │ │ Evaluation │ │ Monitoring │ │ │ │ 追踪 │ │ 评估 │ │ 监控 │ │ │ └──────────────┘ └──────────────┘ └──────────────┘ │ │ │ │ │ │ │ ▼ ▼ ▼ │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ Project Dashboard │ │ │ └─────────────────────────────────────────────────────┘ │ │ │ │ │ ┌────────────────┼────────────────┐ │ │ ▼ ▼ ▼ │ │ ┌────────────┐ ┌────────────┐ ┌────────────┐ │ │ │ Runs │ │ Datasets │ │ Feedback │ │ │ │ 运行记录 │ │ 测试数据集 │ │ 反馈数据 │ │ │ └────────────┘ └────────────┘ └────────────┘ │ │ │ └─────────────────────────────────────────────────────────────┘ ▲ │ SDK调用 │ ┌────────┴───────┐ │ Your App │ │ (Python/JS) │ └────────────────┘

核心组件

组件功能说明
Traces追踪记录记录每次运行的完整调用链
Runs运行实例单次执行的详细信息
Datasets测试数据集用于评估的输入输出对
Evaluators评估器自动或人工评估运行结果
Projects项目组织和管理应用
Feedback反馈用户或自动评估的反馈

快速开始

1. 环境配置

importos# 配置LangSmithos.environ["LANGCHAIN_TRACING_V2"]="true"os.environ["LANGCHAIN_API_KEY"]="your-langsmith-api-key"os.environ["LANGCHAIN_PROJECT"]="my-ai-app"# 项目名称# 配置OpenAI(或其他LLM)os.environ["OPENAI_API_KEY"]="your-openai-api-key"

2. 基础追踪

fromlangchain_openaiimportChatOpenAIfromlangchain_core.promptsimportChatPromptTemplatefromlangchain_core.output_parsersimportStrOutputParser# 创建简单的链llm=ChatOpenAI(model="gpt-4")prompt=ChatPromptTemplate.from_template("解释{topic}的概念")output_parser=StrOutputParser()chain=prompt|llm|output_parser# 执行 - 自动追踪到LangSmithresult=chain.invoke({"topic":"机器学习"})print(result)# 在LangSmith中,你可以看到:# - 完整的调用链(prompt -> llm -> parser)# - 每个步骤的输入输出# - Token使用量# - 执行时间# - 成本估算

3. 自定义追踪

fromlangchain_core.tracersimportLangChainTracerfromlangsmithimporttraceable# 方法1:使用traceable装饰器@traceable(run_type="llm",name="custom_generation")defgenerate_response(query:str)->str:"""自定义生成函数"""llm=ChatOpenAI(model="gpt-4")response=llm.invoke(query)returnresponse.content# 方法2:手动创建RunfromlangsmithimportClient client=Client()# 创建自定义运行run=client.create_run(name="custom_run",run_type="llm",inputs={"query":"什么是深度学习?"})try:# 执行逻辑result=generate_response("什么是深度学习?")# 更新运行结果client.update_run(run.id,outputs={"result":result},end_time=datetime.now())exceptExceptionase:client.update_run(run.id,error=str(e),end_time=datetime.now())

深入追踪功能

1. 追踪嵌套调用

fromlangsmithimporttraceablefromlangchain_openaiimportChatOpenAI llm=ChatOpenAI(model="gpt-4")@traceable(name="analyze_sentiment")defanalyze_sentiment(text:str)->str:"""情感分析"""response=llm.invoke(f"分析以下文本的情感:{text}")returnresponse.content@traceable(name="extract_keywords")defextract_keywords(text:str)->list:"""关键词提取"""response=llm.invoke(f"提取以下文本的关键词(JSON格式):{text}")importjsonreturnjson.loads(response.content)@traceable(name="process_text")defprocess_text(text:str)->dict:"""处理文本 - 嵌套追踪"""sentiment=analyze_sentiment(text)keywords=extract_keywords(text)return{"sentiment":sentiment,"keywords":keywords}# 执行 - 会生成嵌套的追踪树result=process_text("我非常喜欢这个产品,质量很好,物流也快!")# 在LangSmith中,你会看到:# process_text# ├── analyze_sentiment# │ └── ChatOpenAI.invoke# └── extract_keywords# └── ChatOpenAI.invoke

2. 添加元数据和标签

@traceable(name="smart_qa",tags=["production","v1.0"],metadata={"model":"gpt-4","temperature":0.7,"max_tokens":1000})defsmart_qa(question:str,user_id:str)->str:"""智能问答"""# 动态添加元数据fromlangsmithimportget_current_run_tree run_tree=get_current_run_tree()ifrun_tree:run_tree.metadata["user_id"]=user_id run_tree.metadata["timestamp"]=datetime.now().isoformat()response=llm
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/24 0:08:25

从显示器校准到印刷校色:深入理解RGB转XYZ在色彩工作流中的关键作用

从显示器校准到印刷校色:深入理解RGB转XYZ在色彩工作流中的关键作用 你是否曾在深夜修图时,发现屏幕上精心调校的蓝调在手机预览时变成了紫色?或是印刷品上的企业LOGO颜色与Pantone色卡相差甚远?这些令人抓狂的色彩偏差问题&#…

作者头像 李华
网站建设 2026/4/24 0:00:20

5步精通:开源跨平台B站视频下载终极指南

5步精通:开源跨平台B站视频下载终极指南 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_mirrors/bi/BilibiliDow…

作者头像 李华
网站建设 2026/4/23 23:58:18

终极文档下载解决方案:kill-doc浏览器脚本免费下载30+平台

终极文档下载解决方案:kill-doc浏览器脚本免费下载30平台 【免费下载链接】kill-doc 看到经常有小伙伴们需要下载一些免费文档,但是相关网站浏览体验不好各种广告,各种登录验证,需要很多步骤才能下载文档,该脚本就是为…

作者头像 李华
网站建设 2026/4/23 23:58:16

如何快速下载B站视频:BilibiliDown终极教程

如何快速下载B站视频:BilibiliDown终极教程 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_mirrors/bi/Bilibili…

作者头像 李华
网站建设 2026/4/23 23:57:21

Redis--基础知识点--31--集群哈希槽为什么是16384?

1 说法一 因为CRC16会输出16bit的结果,可以看作是一个分布在 0~2^16-1 之间的数,redis的作者测试发现这个数对 2^14 求模的会将key在 0-2^14-1 之间分布得很均匀, 2^14 即16384 2 说法二 为了节省存储空间,每个节点用一…

作者头像 李华
网站建设 2026/4/23 23:56:34

软件测试工程师的FIRE计划:在40岁实现职业自由与财务独立

当“稳定性”遇见“不确定性”在软件开发的流程中,测试是确保产品质量、规避潜在风险的守护环节。许多测试工程师以其严谨、细致和风险规避的特质,在职业生涯中追求着项目的“零缺陷”与个人生活的“稳定增长”。然而,技术的快速迭代、行业周…

作者头像 李华