跳转到主要内容

评估语言模型,以及在语言模型之上构建的扩展应用程序,是很困难的。随着最近的模型发布(OpenAI、Anthropic、Google),评估正成为一个越来越大的问题。人们开始尝试解决这个问题,OpenAI发布了OpenAI/evals,专注于评估OpenAI模型。相应地,我们很高兴地宣布,我们对评估链和代理的方式进行了一些补充和改进。

问题

评估LangChain链和代理可能非常困难。这主要有两个原因:

#1:缺乏数据

在开始一个项目之前,你通常没有大量的数据来评估你的链/代理。这通常是因为大型语言模型(大多数链/代理的核心)是非常棒的少试和零试学习者,这意味着你几乎总是能够在没有大量示例数据集的情况下开始执行特定任务(文本到SQL、问答等)。这与传统的机器学习形成了鲜明的对比,在传统机器学习中,甚至在开始使用模型之前,都必须先收集一堆数据点。

#2:缺乏指标

大多数链/代理执行的任务没有很好的指标来评估性能。例如,最常见的用例之一是生成某种形式的文本。评估生成的文本比评估分类预测或数字预测要复杂得多。

解决方案

LangChain试图解决这两个问题。到目前为止,我们已经初步通过了解决方案——决不是完美的解决方案。我们非常欢迎对此的反馈、贡献、整合和思考。

到目前为止,我们对每个问题都有以下看法:

#1:缺乏数据

我们已经在拥抱脸上启动了LangChainData集社区空间。我们希望这是一个开源数据集的集合,用于评估公共链和代理。我们已经贡献了五个自己的数据集,但我们完全打算这是一项社区努力。为了贡献一个数据集,您只需要加入社区。然后,您将能够上传数据集。

我们还致力于让人们尽可能轻松地创建自己的数据集。作为第一步,我们添加了一个QAGenerationChain,它在给定一个文档的情况下,提供了问答对,可用于评估该文档中的问答任务。有关如何使用此链的示例,请参阅此笔记本。

#2:缺乏指标

我们有两种解决方案来解决缺乏指标的问题。

第一个解决方案是不使用度量,而只是依靠视觉检查结果来了解链/代理的执行情况。为了帮助实现这一点,我们已经开发(并将继续开发)跟踪,这是一种基于UI的链和代理运行可视化工具,我们于1月底首次发布。

我们建议的第二种解决方案是使用语言模型本身来评估输出。为此,我们有一些不同的链条和提示,旨在解决这个问题。

示例

我们创建了一组将上述两种解决方案结合在一起的示例,以展示我们在开发时如何对链和代理进行内部评估。除了我们策划的例子外,我们也非常欢迎这里的贡献。为了促进这一点,我们提供了一个模板笔记本,供社区成员用来构建自己的示例。

我们现有的例子有: