点击上方蓝字关注我们
LangSmith是开源大模型应用集成框架LangChain背后公司新推出的实验性的平台。不同于LangChain专注在LLM应用的开发与集成, 其专注在大模型应用的跟踪、调试、测试、评估等工程领域 ,旨在帮助大模型应用从原型/测试阶段跨越到真正的生产阶段,这对于未来大语言模型在要求更可靠、更稳定、更安全、更高性能的企业应用场景中投入应用具有特别的意义。
上篇(原文:深入LangSmith:如何帮助大模型(LLM)应用从原型到投入生产?【上】) 中 ,我们对LangSmith的基础功能,以及如何利用该平台对LLM应用的每一次Run(一次Run代表一次自治AI输入/输出的过程,通常包括多次LLM的调用与交互)进行管理与监控,包括检索、设置Tag、增加反馈能力等。 在本文中我们将继续深入LangSmith的其他能力。
复杂推理任务的执行跟踪
我们借助国外大神的一个LLM趣味用例来深入LangSmith的跟踪功能: 使用LLM的思维树(Tree Of Thoughts)模式的提示工程来完成一个看似其不太擅长的推理任务,完成一个4*4的数独,比如:
核心解决问题的代码非常简单,借助于Langchain中的ToT Chain的组件,可以很方便的完成这个任务(省略了其他部分,感兴趣的可以网上搜索或留言):
对于这样一个例子,我们借助于框架可以很简单地实现,但是问题在于,我们如何去了解其内部推理的细节呢?LangSmith给出了答案,我们打开对应的LangSmith跟踪能力后,可以 深入跟踪到一次LLM应用执行过程的全部细节。除了调试以外,更有意义的是可以深入地学习到LLM的不断地思维与推理过程,这对于我们利用LLM解决复杂问题无疑是一个很好的途径。特别是在 使用类似Langchain的框架或其他开源项目创建LLM应用时,有时候由于框架帮你做了更多底层工作,屏蔽了一些细节,简化了开发的同时也让调试与纠错变得困难。
在这个例子中,我们可以在LangSmith平台上看到LLM如何借助于思维树模式的提示工程来通过不断的思考与回溯、反复试验,最终解决一个数独问题。可以看到LangSmith确实对其中的每个步骤进行了详细分解,对每一次LLM调用的输入输出、延时、token消耗等都有明确记录。这可以大大方便我们在利用LLM解决复杂推理任务时观察LLM的行为模式,甚至可以做类似其他集成开发环境中的Debug工作: 利用平台的工具随时修改Prompt并观察大模型响应的变化,从而获得最理想结果 。
批量数据测试与评估
基于LLM的应用与传统应用有一些非常明显的不同特征,这些特征决定了在将其投入生产时,会面临一些特别的挑战,包括:
- 最重要的一点来自于大模型输出的不确定性。 因为大模型本质上是一种概率性的动态模型,针对同一个Prompt会产生不同的输出(即使你会把Temprature参数设置0)。体现到应用中的结果就是 很难确保每一次的输出结果完全一致 ,这可能导致实际应用中会产生不可预知的结果。
- LLM的输出严重依赖于Prompt。 比如你可以通过prompt注入新的知识即可以改变输出。 所以每一次调整prompt,可能带来输出的变化,那么如何去评估一次Prompt的调整是否有效、是否带来新的问题呢?如何对一次Prompt修改方便的做一次近似的“回归”测试呢?
- 衡量不同模型之间的差异困难。 大模型进入了百模大展甚至千模大战的时代,不同的大模型架构、不同的训练语料、不同的参数规模也使得我们在选择大模型的时候面临困惑:在大部分时候,我们其实很难简单地去判断哪个大模型更适合我的应用。如何 综合衡量大模型的输出、响应时间、成本(token数量)来做选择呢?
这些挑战除了大模型本身的不断迭代升级,或者通过SFT(高效微调)来增加领域适用性,从应用开发/集成者的角度,直接解决问题的办法并不多,那么 通过对真实场景数据的批量测试与评估就有助于暴露可能存在的问题,进而优化问题并改进 。这方面,LangSmith提供了完整工具与组件,帮助我们在自定义的数据集上对LLM应用进行测试评估。
考虑一个典型的场景:智能问答(Q/A)系统。 即能够通过智能机器人来回答客户或者员工的自然语言问题,这在智能客服/咨询、企业搜索等领域有着显然的应用前景。但 我们如何利用LangSmith来评估一个智能的Q/A系统的准确性呢 ?LangSmith给出的步骤可能如下:
1. 构建一个测试的数据集,包括问题与预期答案:
此处创建了一个测试使用的dataset(此处为examples,具体内容为一个问答对的数组)
2. 通过LangSmith框架运行一个批量的评估任务:
3. 在LangSmith平台查看评估结果,并根据结果进行调整
查看本次测试运行的整体概要信息,包括调用次数、反馈出来的正确率、使用的token数量、调用延时。你可以方便的对正确性较差的测试数据进行过滤检查,分析原因后进行调优;你也可能会发现token使用的异常,并通过优化来降低token使用与成本:
当然,也可以深入到每一次任务过程的内部,查看任务执行的细节,包括如何组装Prompt,LLM如何返回,返回的内容等:
你甚至可以看到,LangSmith如何根据您应用的输出结果、以及你预期的正确答案,然后利用大模型进行正确性评估,判断你的应用回答正确还是错误:
最后,如果你对结果有所怀疑,你依然可以在线对大模型的输入输出进行调试,以 观察怎样的Prompt可以获得更好的输出结果 :
通过这样的测试以后,你会对你的QA系统的回答准确性有个评估:如果准确率明显低于你的期望,你可以通过修改Promt、增加上下文提示等手段以后,重新进行测试评估,直到达到自己的期望值。
关于正确性的评估,LangSmith提供了三种内置的评估器,这些评估有的适用于每个问题有参考答案,有的适用于问题没有参考答案,具体可以根据情况选择。
除了正确性的评估以外,LangSmith还允许你评估大模型输出的其他方面,因为不是所有的任务都有事实性的“标准答案”。比如 你可能想评估你的任务输出是否具备“创造性”、“相关性“、”简洁性“、”无害性“等等 ,LangSmith也提供很多类似的评估器。
当所有的评估器都不能满足你的应用要求,那么你可以自定义评估器,比如在构建基于向量距离的相似性,或基于字符串之间的相似性来做评估,这一切取决于自己应用的需要。
Hub:LLM应用助力神器
最后我们来看LangSmith近期推出的一个LLM应用开发的助力神器。
开发复杂任务的LLM应用的一个主要工作量往往集中在Prompt工程。 虽然在一些开发框架(比如LangChain)中内置并屏蔽了很多Prompt的信息,在简单应用的时候无需过度关心。但是在实际测试中, 由于不同的大语言模型的理解能力的差异,甚至中英文语言的差异,Prompt的调试仍然无法避免 ,特别对于一些复杂任务,比如需要借助各种外部工具的AI Agent的构建场景中,Prompt工程仍然是优化大模型输出的最有效手段。
LangSmith Hub就是一个用来发现与共享优秀的Prompt的社区。( 未来也会支持优秀的Chain(LangChain中一种完成LLM任务的自动化组件)甚至AI Agent(基于Chain与外部工具的自治AI智能体)的共享与协作)。
LangSmith Hub的入口如下,有点像常见的应用/插件商店:
你可以在此根据不同的用例场景、语言、支持的模型来过滤和发现相应的Prompt模版;也可以根据下载量、点赞等进行排序查看等。最重要的是你可以进入到每一个Prompt模版内部。比如,我需要一个让LLM能够根据自然语言生成SQL的Prompt模版,那么我可以进入这样一个共享的Prompt:
如果你想使用这个Prompt,可以首先在线测试下效果:
如果你想在应用中使用这个Prompt,除了直接参考其内容以外,如果你使用Langchain框架,可以直接在程序中导入:
你也可以进入创作Prompt的界面进行创作,有点类似Github提交自己的项目,在此可以进行各种设置,比如适用场景、语言甚至授权License模式等。
结束语
以上是我们分享与实测的一些LangSmith平台的功能与演示,作为一个实验性的新平台, LangSmith通过一系列的工具与组件,来简化LLM应用的测试、评估与监控工作,旨在帮助将LLM应用尽快达到企业级应用的性能要求,这对于推动LLM应用跨越概念与原型验证阶段,在未来企业系统中的真正落地无疑具有积极的意义。
END
点击下方关注我,不迷路
点击下方体验AI助手