TL;DR: 在过去的几个月中,LLM 应用中出现了几个新兴趋势:RAG、聊天界面、代理。我们最新的功能 - 对话式检索代理 - 将它们全部结合在一起。这不仅仅是堆砌流行词 - 它提供了真正的优势和卓越的用户体验。
重要链接
随着 LLM 应用开始越来越多地应用于生产用例,一些常见的趋势开始涌现
检索增强生成
LLM 只能了解它们训练过的内容。为了解决这个问题,一种称为“检索增强生成”的生成方式应运而生。在这种技术中,文档被检索出来,然后插入到提示中,并指示语言模型仅根据这些文档进行响应。这既有助于为语言模型提供额外的上下文,也有助于使其保持可靠性。
聊天界面
随着 ChatGPT 的爆炸式增长,聊天界面已成为与语言模型交互的主要方式。能够询问有关先前响应的后续问题 - 尤其是在上下文窗口变得越来越长的情况下 - 证明是非常宝贵的。
代理
“代理”这个术语现在可能已被过度使用。我们所说的“代理”是指步骤序列事先未知,而是由语言模型决定的系统。这可以使系统在处理边缘情况时具有更大的灵活性。但是,如果无限制,它可能会变得非常不可靠。
在 LangChain,我们从一开始就拥有针对这些趋势的组件。我们构建的首批应用程序之一是基于 Notion 数据库的 RetrievalQA
系统。我们试验并突破了各种不同形式的内存的边界,从而实现了各种类型的聊天机器人。当然,我们也有许多类型的代理,从使用 ReAct 风格提示的“旧”代理,到由 OpenAI Functions 提供支持的较新代理。
我们之前也结合过这些想法。ConversationalRetrievalQA
- 一个启动时执行检索步骤的聊天机器人 - 是我们最受欢迎的链之一。从几乎一开始,我们就为代理添加了内存支持。
然而,我们从未真正将这三个概念结合在一起。直到现在。借助我们的对话式检索代理,我们捕捉到了所有这三个方面。让我们深入探讨这到底包含什么,以及为什么这是一个卓越的检索系统。
该系统的基本轮廓包括
- OpenAI Functions 代理
- 本身就是
retrievers
的工具 - 它们接收一个字符串,并返回文档列表 - 一种新型内存,它不仅记住
human <-> ai
交互,还记住ai <-> tool
交互
代理可以决定何时调用检索系统(如果需要)。如果调用了,则返回检索到的文档,并且代理可以使用它们来推理下一步该做什么,无论是直接响应还是执行不同的检索步骤。请注意,这依赖于以下几点
- 更长的上下文窗口:如果上下文窗口很短,那么您就无法将所有文档都返回到代理的工作内存中
- 更好的语言模型:如果语言模型不够好,无法推理出它们何时应该检索文档,那么这将无法工作
幸运的是,语言模型正在变得更好,并且上下文窗口也越来越长!
这是一个 LangSmith 跟踪,显示了它在实际操作中的样子
https://smith.langchain.com/public/1e2b1887-ca44-4210-913b-a69c1b8a8e7e/r

让我们将其与大多数人使用的 ConversationalRetrievalQA
链进行比较。对话式检索代理具有的优势是
- 并非总是查找检索系统中的文档。有时,这是不需要的!如果用户只是在说“你好”,您不应该查找任何内容
- 可以执行多个检索步骤。在
ConversationalRetrievalQA
中,提前完成一个检索步骤。如果该检索步骤返回错误的结果,那么您就倒霉了!但是使用代理,您可以尝试不同的搜索查询,看看是否会产生更好的结果 - 借助这种新型内存,您可以避免检索步骤!这是因为它记住了
ai <-> tool
交互,因此也记住了先前的检索结果。如果用户提出的后续问题可以通过这些结果来回答,则无需执行另一个检索步骤! - 更好地支持关于对话的元问题 - “我已经问了多少个问题?”等等。由于旧链将问题反向引用为“独立的”并且独立于对话历史记录,以便有效地查询向量存储,因此它在处理此类问题时会遇到困难。
请注意,存在一些缺点/危险
- 使用代理,它们有时可能会失控。这就是为什么我们在 AgentExecutor 中添加了控制,以将它们限制在一定的最大步骤数内。还值得注意的是,这是一个非常专注的代理,因为它只被赋予一个工具(以及一个非常简单的工具)。一般来说,代理被赋予的工具越少(越简单),它就越有可能可靠。
- 通过记住
ai <-> tool
交互,有时可能会占用上下文窗口。这就是为什么我们包含了一个标志来禁用该类型的内存,并且更普遍地使内存具有相当大的即插即用性。
这个新的代理同时存在于 Python 和 JS 中 - 您可以使用这些指南开始使用
LLM 应用正在快速发展。我们的 NotionQA 演示是我们最早完成的演示之一 - 尽管那只是大约 9 个月前,但自那时以来,最佳实践已经发生了巨大变化。目前,这代表了我们对 GenAI 问答系统应该是什么样子的最佳猜测,它结合了 RAG 的可靠性、聊天的用户体验和代理的灵活性。
我们还有一些关于如何进一步改进它的想法 - 我们将在未来几周内陆续推出这些想法。与往常一样,我们很乐意听取您的任何建议或想法。