我们构建并托管了一个简单的演示应用,以展示应用程序如何随着时间的推移从反馈中学习和改进。该应用名为“自学习 GPT”,它使用 LangSmith 收集反馈,然后自动使用这些反馈来随着时间的推移进行改进。它通过从反馈中创建少量示例,并将这些示例融入到提示中来实现这一点。
重要链接
- 您可以在此处访问此应用的托管版本。
- 您可以在此 YouTube 视频中深入了解其工作原理。
- 我们将在几周后与 DSPy 的 Omar Khattab 举办一场关于“LLM 系统优化”的网络研讨会 - 在此处注册。
- 如果您想提前体验支持此功能的“LangSmith Automations”,请在此处注册。
从反馈中学习
从反馈中学习几乎从一开始就是构建 LLM 系统的关键部分。ChatGPT - 这个风靡全球的应用程序 - 使用了人类反馈强化学习 (RLHF) 来驯服模型,使其可以用作通用聊天机器人。Midjourney 一直在变得越来越好 - 这可能很大程度上归功于它的反馈循环。
从反馈中学习的直觉很简单。如果您可以收集关于模型预测效果如何的反馈(以某种形式),那么您可以优化模型以产生更多类似的结果。如果您可以不断地这样做 - 那么您的模型就可以随着时间的推移不断学习和改进。这种完全自动化的持续学习可能尚未实现,但我认为大多数从业者不会质疑收集反馈的重要性。
LangSmith 中的反馈
自从我们推出 LangSmith 以来,我们就一直强调使其易于收集和跟踪反馈。我们使其易于以编程方式将反馈附加到运行中,允许您记录诸如点赞/踩之类的操作。我们添加了一个人工注释队列,允许审阅者手动向运行添加反馈。我们添加了筛选功能,允许您筛选具有特定反馈的运行。我们添加了监控功能,使其易于随时间跟踪聚合的反馈。
尽管如此 - 到目前为止,我们还没有提供太多工具或资源来使您能够轻松地将这些反馈重新融入到您的应用程序中。我们一直在添加一些功能(仍在测试阶段,还需要几周时间),这些功能为自学习 GPT 提供支持,并且正是这样做的。
自学习 GPT
那么自学习 GPT 究竟是如何工作的呢?它相对简单,并且涉及组合一系列不同的 LangSmith 功能。
首先,我们使用 LangSmith 跟踪所有运行。这为我们提供了聊天机器人轮次的完整跟踪。重要的是 - 这不仅仅是捕获 LLM 调用。这是捕获完整的跟踪。稍后我们将更深入地探讨为什么这如此重要。作为其中的一部分,我们记录了生成运行的助手的 UUID。
其次,我们以点赞/踩的形式捕获反馈,并将其记录到 LangSmith 中。我们将其附加到相应的跟踪。
第三,我们使用 LangSmith 的一项新功能,将跟踪中的相关数据自动移动到专门针对该助手的数据集中。这涉及到
- 创建过滤器。在这里,我们想要抓取所有具有正面反馈(点赞)的运行。
- 选择数据集。我们在跟踪中记录了助手 UUID,因此我们可以使用它将数据移动到专门针对该助手的数据集中。这很重要,因为每个助手都可以构建自己的数据集(因为我们期望他们学习特定的东西)。
最后,我们使用 LangSmith SDK 在运行时拉取此数据集,并将示例用作提示中的少量示例。
LangSmith Automations
支持此功能的主要新事物是自动化功能,它允许您自动将运行(根据某些过滤器和采样率)移动到数据集(或注释队列)。我们将在几周内向所有人推出此功能。同时,如果您有兴趣提前体验,请在此处注册。
重要性
我们很高兴展示这一点,原因有二。
主要原因:这是一种自动构建良好示例数据集的可靠方法。在与构建 LLM 应用程序的团队交谈时,他们通常没有良好输入/输出对的数据集。他们通常手动执行收集反馈然后移动到数据集的过程。这可以自动化该过程,并使任何人都可以轻松完成。
次要原因:将它们作为少量示例纳入是一种廉价且实用的方法,可以使用这些反馈来改进您的应用程序。以前在收集反馈时,我们唯一可以利用它来做的事情是帮助突出显示您应该查看的数据点。这更具可操作性。
请注意,这并不是使用这些数据点的唯一方法。您可以将它们用作测试集来进行回归测试。您可以使用它们来微调模型。您可以进行少量示例的动态选择。您可以以DSPy类似的方式使用这些示例来优化您的 LLM 系统。
LLM 系统优化
DSPy 是一个用于算法优化 LLM 提示和权重的框架。我们与 Omar 深入探讨了 LLM 系统的优化,并与他们进行了初步集成。我们基于 DSPy 中的许多想法创建了这个示例。
DSPy 和 LangChain 之间实际上有很多相似之处。主要是 - 它们都处理 LLM 系统的优化,而不仅仅是单个 LLM 调用的优化。其中的一个关键组成部分是跟踪,DSPy 和 LangChain 都非常强调这个概念。跟踪是 DSPy 进行的许多优化的基础,而在 LangSmith 中,我们显然也对其进行了大量强调。
跟踪整个系统尤为重要,因为您通常会在系统级别收集反馈,但系统内部可能存在多个不同的 LLM 调用,您想要优化这些调用。因此,您需要一种方法将高级反馈与低级 LLM 调用关联起来。这就是为什么必须拥有顶级的跟踪功能 - 这是我们在 LangChain 和 LangSmith 中一直强调的。
当前的自优化 GPT 并没有像 DSPy 那样深入。我们只是策划了一个少量示例数据集,我们没有尝试优化选择哪个示例是最佳的。这很容易成为下一步。我们之所以止步于此,只是因为我们相信创建此数据集已经非常有帮助,并且大多数公司甚至都在努力做到这一点。
我们非常高兴在未来探索更多关于优化的高级想法。我们将在几周后与 Omar 举办一场关于“LLM 系统优化”的网络研讨会 - 应该会很有趣。在此注册。