“我们这里的问题是沟通不畅” - 《监狱风云》(1967)
沟通是生活中最难的部分。它也是构建 LLM 应用中最难的部分。
新员工刚加入公司时,无论他们多聪明,都需要大量的沟通。这可能包括获取一本关键流程和最佳实践的指南,由经理介入帮助新员工快速上手,以及获取访问特定软件的权限来正确完成工作。在快速适应的过程中,给予和接受持续的反馈可确保新员工在其岗位上取得成功。
正如新员工入职需要周到的沟通一样,构建代理也需要高标准的良好沟通。无论底层 LLM 有多智能,它们仍然需要适当的上下文才能可靠地运行,而这种上下文需要被恰当地传达。
我的意思不是说模型就不会出错,或者它们没有改进的空间。但绝大多数情况下,问题都归结为基本的沟通问题。
如果我们相信沟通是构建 LLM 应用的关键部分,那么从这个公理出发,我们可以得出一些关于代理的其他“热门观点”,这些观点应该能够成立。我在下面简要列出了一些。所有这些都可以(也许都会)成为独立的博客文章。
为什么提示工程不会消失
随着模型的改进,诸如 给 LLM “小费”或担心 JSON 与 XML 格式等提示工程技巧将变得近乎过时。但是,你仍然需要有效地、清晰地与模型沟通,并为其提供清晰的指令,告诉它如何处理各种场景。
诊断代理为何不工作的最佳技巧是,简单地查看对 LLM 的实际调用以及提示的确切输入——然后确保,如果你将这些输入提供给你认识的最聪明的人,他们应该能够像你期望的那样做出回应。如果他们做不到,那么你需要澄清你的请求,通常是通过调整提示。这个过程,即提示工程,不太可能很快消失。
为什么代码将构成代理“认知架构”的重要组成部分
提示是与 LLM 沟通它们应如何作为代理系统一部分行事的一种方式,但代码同样重要。代码是传达系统应如何行事的绝佳方式。与自然语言相比,代码能让你更精确地沟通你期望系统采取的步骤。
有些指令只能用自然语言传达给代理。其他指令可以是代码或语言。代码可以更精确、更高效,因此在构建代理的“认知架构”时,有很多地方我们发现代码比提示更有用。
为什么你需要一个代理框架
作为代理开发者,你需要编写一些代码来最好地向代理传达它应该做什么。这构成了你应用程序的认知架构,是你竞争优势和护城河的一部分。
代理框架通过让你专注于重要的代码部分——代理应该做什么——来促进这一点,同时处理与你的应用程序认知架构无关的常见问题,例如
- 清晰地流式传输代理正在做什么
- 持久化以实现多租户内存
- 支持“人机协作”交互模式的基础设施
- 以容错、水平可扩展的方式运行代理
为什么 LangGraph 是最可控的代理框架很重要
你想要一个代理框架,它能够处理上面列出的一些问题,但同时又能让你尽可能清晰地沟通(通过提示和代码)代理应该做什么。任何阻碍这一点的代理框架都只会碍事——即使它让入门更容易。坦白说,这就是我们在 langchain 中看到的——它让入门容易,但存在内置的提示、硬编码的 while 循环,并且不易于扩展。
我们用 LangGraph 解决了这个问题。
没有任何内置的东西会限制你可以构建的认知架构。节点和边只不过是 Python 函数——你可以在其中放入任何你想要的东西!
代理在其认知架构中将大量使用代码。代理框架可以帮助消除一些常见的 基础设施需求。但它们不能限制你的代理的认知架构。这将阻碍你准确传达你想要发生的事情的能力,代理将不可靠。
为什么 LangGraph 这样的代理框架会一直存在
我经常被问到一个有点普遍的问题:“随着模型越来越好,是否还会需要 LangGraph 这样的框架?”潜在的假设是,模型将变得如此之好,以至于不再需要 LLM 周围的任何代码。
不会。
如果你使用 LangGraph 来激发模型更好的通用推理能力,那么,也许吧。
但大多数人并非如此使用它。
沟通是其中的关键部分,而代码是沟通的关键部分。沟通不会消失,代码也不会消失——LangGraph 也不会消失。
为什么构建代理是一项多学科的努力
我们很快注意到的一件事是,构建代理的团队不仅仅由工程师组成。
一个关键领域是提示工程,领域专家通常会为提示编写最佳的自然语言指令,因为他们比工程师更了解 LLM 应该如何表现。
然而,领域专家的价值远不止于提示。他们可以审查代理的整个“认知架构”,以确保所有逻辑(无论是用语言还是代码表达)都是正确的。像 LangGraph Studio 这样的工具,可以可视化代理的流程,使这个过程更加容易。
领域专家还可以帮助调试代理为何出错,因为代理经常因为沟通失败而出错——这是领域专家能够很好地发现的一个差距。
为什么我们将 LangSmith 打造成最用户友好的“LLM Ops”工具
由于 AI 工程需要多个团队协作,以弄清楚如何最好地使用 LLM 进行构建,“LLM Ops”工具如 LangSmith 也侧重于促进这种协作。大多数分类流程归结为——“看看你的数据!”,我们希望在 LangSmith 中轻松地查看大量、主要是文本的响应。
从一开始,我们就投入了大量精力来构建一个用于可视化代理跟踪的美观 UI。这种美观是有目的的——它使得各种技术水平的领域专家更容易理解正在发生的事情。它比 JSON 日志更清晰地传达了正在发生的事情。
LangSmith 还在其他方面促进了跨团队协作——最值得注意的是,提示游乐场——但我喜欢以跟踪为例,因为它如此微妙但又如此重要。
为什么人们会要求我们将 LangSmith 跟踪暴露给他们的最终用户
出于上述相同的原因,我们有许多公司要求将 LangSmith 跟踪暴露给他们的最终用户。理解代理在做什么不仅对开发者很重要——对最终用户也很重要!
当然,还有其他(更用户友好)的方法来做到这一点,而不是使用我们的跟踪。但听到这个请求仍然令人欣慰。
为什么 UI/UX 是 AI 创新的最重要的领域
这篇博文大部分内容都集中在构建 AI 代理时沟通的重要性,但这同样适用于最终用户。允许用户以透明、高效和可靠的方式与代理进行交互,对于采用至关重要。
我们已经讨论了我们看到的各种新兴的代理 UX(这里,这里,和这里),但这个领域还处于非常早期。
沟通是你所需的一切,因此最能促进这种人机交互模式的 UI/UX 将带来更好的产品。
沟通至关重要
沟通可以意味着很多事情。它是人类体验的一个组成部分。随着代理试图完成越来越多像人类一样的任务,我坚信良好的沟通技巧将使你成为一名更好的代理开发者——无论是通过提示、代码还是 UX 设计。
沟通不仅仅是用自然语言表达,它还可以涉及代码以更精确地沟通。最能清晰传达事物的人是那些最了解它的人,因此构建这些代理将成为跨职能的。
我将以乔治·伯纳德·肖的一句话结束:“沟通中最大的问题是,它已经发生的幻觉。”如果我们想要一个 LLM 应用能够解决现实问题的未来,我们就需要弄清楚如何更好地与它们沟通。
感谢 Nuno Campos、Julia Schottenstein 和 Linda Ye 阅读此文的草稿。