点击上方蓝字关注我们
随着大模型本身及生态的不断成熟,特别是开源社区大量的工具与框架发酵,可以预计在企业应用领域,大量的LLM应用正在酝酿并将投入生产。但是,从一个原型/测试阶段的应用到真正的生产力应用, 需要跨越的障碍或许比我们想象的大。本篇深入LangSmith这样一个实验性的平台,希望能对此有所启发。
LangSmith概览
软件开发者都应该对此深有感触:开发环境下的应用与真正的生产应用有着天壤之别,中间有着巨大的鸿沟需要跨越,这也是很多时候我们在评估软件工程量时永远只会低估的根本原因。特别是企业软件,涉及的业务与环境的复杂性,以及生产对性能、可靠、合规等方面的要求,会更加凸显这样的问题。
具体到以LLM为核心的应用,尽管类似Langchain这样的LLM集成开发框架解决了一部分问题:让开发基于LLM的复杂应用更加直观与简洁。但由于LLM输出的不确定性与开发框架自身的封装,我们实际中会面临类似这样一些挑战:
- 深入LLM应用的跟踪与调试
- 框架掩盖下的故障定位与纠错困难
- 不同的Prompt/LLM/数据集的对比与评测
- 评估开发的LLM应用的整体输出质量(QA)
- 抓取应用的使用记录与反馈,实现分析与洞察
LangSmith就是著名的大模型开发框架Langchain团队给出的针对性解决方案。这是一个实验性的工具平台, 用来帮助开发者调试、跟踪、测试、评估、监控生成式/LLM应用 :
LangSmith基本架构:你的LLM应用(不必一定基于langchain框架)运行时向云端发送日志/信息,开发者登录langSmith的Web UI跟踪LLM调用、管理Prompt、测试输出、管理测试集、分析正确性等。
关于LangSmith,需要了解并区别的几点:
- LangSmith 不是一个LLM的软件开发框架与工具 ,尽管它提供了SDK,但它专注在其他阶段而非开发阶段。
- LangSmith 不是一个大模型的提示(Prompt)构建工具 ,尽管它提供了一个跟踪与调试Prompt的Playground环境。
- LangSmith也 不是一个可视化LLM应用流程构建与编排工具 ,那些是Flowise或者LangFlow干的事。
- LangSmith 不绑定Langchain ,虽然它与Langchain无缝衔接,但提供SDK与非Langchain开发的LLM应用进行集成。
- LangSmith由 一个需要账号登录的云端平台 + 一套管理SDK 组成。但该SDK并非用于软件功能开发,而是用于跟踪测试。
- LangSmith 依赖于LLM应用配合使用 ,有点类似一个在线的Logger,但相比Logger组件要强大的多,且使用更直观、调试更方便。
LangSmith的Web UI展示了其整体的前端管理功能:对LLM应用运行情况的跟踪以及基于数据集的测试与评估管理。
实测:利用LangSmith跟踪与调试
企业应用使用LLM的方式往往不是简单的输入与响应,涉及到私有知识库、外部工具/API的集成等是常态,而与LLM交互的提示词工程也更复杂,这加强了跟踪与调试的复杂性。我们用一个实例:
你可能只需要简单的几行代码(基于Langchain),就可以构建一个实现了ReAct思维模式的简单AI Agent:这个初级智能体会根据你的输入进行思考,如果有必要,会使用搜索工具或者数学工具,并通过OpenAI的大模型回答你的问题:
我们实现这样一个原型很简单,但是在投入使用的时候可能会出现这样那样的问题,比如:
- 你期望它使用工具的时候它没有使用
- 输出的答案与工具结果与预期不符合
- 回答的结果有时候正确有时候错误
由于大量的细节隐藏在框架背后,导致难以“窥视“到其内部的“思考”与“决策”过程(虽然Langchain框架本身有一些跟踪调试的开关,但功能有限,且不够直观优雅)。
那么,LangSmith可以怎么做呢?最简单的,你只需要在应用中打开其跟踪:
然后你就可以在langSmith的云端中对应用的详细运行过程进行跟踪与调试:
在这个界面上你可以:
- 观察到所有的自治AI(Langchain中的Agent/Chain/Tool等)运行细节:输入输出、延时、消耗的token数量等
- 每一次运行过程中涉及到的所有的LLM调用,包括输入输出、延时、token数量等
- 你的应用的分段监控与统计信息,比如各个时间段的应用调用、LLM访问、token使用、延迟时间、整体失败率等
- 深入到每一次你的AI运行过程 :
- 查看大模型是如何遵循ReAct模式的思维链完成工作
- 过程中的每一次LLM调用的真正提示词的内容
- 把一次运行的输入输出存放到你的数据集用于下一次的测试评估
- 运行一个内置的Playground对提示次修改与重运行
查看一次运行过程中的思维决策过程
查看过程中每一次LLM调用的详细信息
在Playground对不符合预期的LLM调用Debug
再进一步:运行记录的管理
通过LangSmith的接口将运行的记录与日志在云端汇聚后,除了上文的跟踪与调试以外,这些记录是否可以进一步利用呢?答案是肯定的,LangSmith提供了一套完整的SDK用于您在自己的LLM应用中对每一次的AI应用的“ Run ”进行灵活管理。
什么是一次Run?这通常代表 你的LLM应用中一次完整任务的执行过程。 通常以用户输入(或系统输入)开始,以最终输出结束。 一次Run的过程中会包含一次或者多次的LLM调用与交互 ,并最终完成整个思维链获得输出。
比如以下这一次完整的Run(运行过程),其中包含了至少3次LLM大模型的调用,前两次辅助决策,最后一次根据前面工具的输出获得最终答案。
这样一个“Run”在LangSmith中被揭开神秘面纱后,可以看到其背后的详细执行逻辑可能是类似这样的过程:
利用LangSmith的管理SDK对你的LLM应用中的所有运行过程(Run)可以进行精确的控制,你可以:
- 随时打开或者关闭run的跟踪
- 使用特殊的测试数据集发起批量的run
- 根据特定的条件查询或导出所有的run
- 给每一次run增加自定义的tag,便于后期提取
- 给每一次run增加反馈信息,便于后期分析
- 根据需要对run的输入或者输出隐藏敏感信息
既然我们可以对每一次run进行精确的管理,那么就可以利用这个能力来做一些超越跟踪调试的任务,比如:
- 对所有的run的输入输出进行深层分析,比如分析用户的情绪倾向
- 统计一段时间内所有的应用调用情况,并利用大模型做智能分类,比如分析一段时间内是哪类产品的问题咨询最多
- 对输入及输出做分析过滤,提取高质量样本,用以改善LLM的输入提示词,比如通过提供参考样本,提高输出质量与稳定性
- 对所有的run进行质量评分比如相关性、完整性等,分析Agent或者模型的完成质量(可以利用LLM进行智能评估)
- 对每一次的run提供feedback功能,由使用者(比如客户)通过点击或者评论来反馈AI的回复质量,并进而改善输出
一个例子
我们经常在一些AI咨询的界面看到类似的反馈功能: 给AI的回复评分甚至文字反馈 :
诚然你可以通过自身的应用逻辑来实现,但现在还有一种更简洁的方法就是利用LangSmith提供的feedback功能来实现,针对每一次run的回复,你可能只需要简单的几行代码就可以在LangSmith平台上获得所有的feedback:
然后你就可以在LangSmith查看到你的AI应用所有的客户反馈与评分。你可以在此基础上做更多,比如导出低评分的回复进行分析以提高模型回复质量;或者把低评分的回复加入到测试数据集备用,用作下一次质量测试的输入等。
以上我们重点实测了LangSmith的跟踪与调试,以及如何利用SDK的运行(run)管理功能进行分析、反馈与优化。可以看到LangSmith很好的补充了LLM应用开发工具与平台生态链,通过帮助提升LLM应用的质量与体验,将LLM应用投入生产。这或许也是当前LLM生态容易被忽视的一个环节,我们也期待国内有类似的平台涌现,只有完善的开发生态,才能激发出更完善的应用。
后续我们还将对LangSmith的测试评估、Langchain Hub功能进行探索。
由于LangSmith当前尚处于邀测阶段, 文中测试的部分功能未来可能会发生调整
【参考文章】
- https://github.com/langchain-ai/langsmith-cookbook
- https://cobusgreyling.medium.com/langsmith-1dd01049c3fb
END
点击下方关注我,不迷路
点击下方体验AI小助手