LangChain 可以算是 LLM 时代做 AI 应用开发必备的框架和平台,从模型选择、数据库链接与各种 Agent 搭建等,AI 应用的搭建、运行和管理都可以在 LangChain 上进行。

某种意义上,LangChain 可能是最了解 Agent(智能体)的平台。

最近,LangChain 创始人 Harrison Chase 发表了一系列对于 Agent 的设计、规划和用户交互设计的探讨。对于当下如何理解 Agent、如何设计 AI 应用的交互上,有很多来自第一线的认知,推荐一读。

一些有意思的点:

  • 什么是智能体?每个人似乎都有不同的定义,吴恩达的建议是,「与其争论什么应被归类为真正的智能体,不如承认系统具有不同程度的智能体特性(agentic)」,就像自动驾驶汽车有不同的自动化等级一样。
  • 目前最主流的 UX 是「流式聊天」,一个很典型的例子是 ChatGPT,用户通过自然语言和 LLM 进行交互,不过,不少创业者相信,除了聊天之外,还有更多的 UX 模式值得考虑。
  • 和流式聊天最大的区别在于,非流式聊天的响应是以完整的批次返回的,这是个缺点,因为你不知道系统内部发生了什么,但另一方面,Linus Lee 提到,「我有意将界面设计得尽可能不透明」,不透明的界面需要一定程度的信任,但信任一旦建立,你就只需要把任务委派给智能体,而不必过多干预。
  • 如何建立用户对智能体的信任?一个简单的方式,把每次操作展示给用户。除此之外,不仅让用户看到发生了什么,还要让他们能够纠正智能体的操作。用户可以在工作流中途暂停,提供反馈,然后让智能体继续执行。
  • 需要将用户从「在循环中」转变为「在循环上」。「在循环上」意味着智能体需要向用户展示其执行的所有中间步骤,用户可以在工作流中途暂停,提供反馈,然后让智能体继续执行。一个已经实现了类似用户体验的应用是 Devin——AI 软件工程师。

一、什么是智能体?

大模型LLM应用开发:手把手教你设计 Agent 用户交互(一)什么是智能体?_ai

「什么是智能体?」

我几乎每天都会被问到这个问题。在 LangChain,我们构建工具帮助开发者创建大语言模型(LLM)应用程序,特别是那些作为推理引擎并与外部数据和计算资源交互的系统。这些系统通常被称为「智能体」。

每个人似乎对智能体的定义都有些不同。我的定义可能比大多数人更加技术化:

智能体是一个使用大语言模型(LLM)来决定应用程序控制流的系统。

即便如此,我承认我的定义并不完美。人们通常认为智能体是高级的、自主的、类似人类的——但如果是一个简单的系统,LLM 只是在两条不同路径之间进行路由选择呢?这符合我的技术定义,但与人们普遍对智能体应具备的能力认知不一致。要精确定义什么是智能体,确实非常困难!

因此,我非常喜欢 Andrew Ng 上周的推文。在推文中,他建议「与其争论什么应被归类为真正的智能体,不如承认系统具有不同程度的智能体特性(agentic)。」就像自动驾驶汽车有不同的自动化等级一样,我们也可以将智能体的能力视作一个光谱。我非常赞同这一观点,并且认为 Andrew 表达得非常到位。未来,当再有人问我什么是智能体时,我将转而讨论什么是「智能体特性」。

原文地址:https://x.com/AndrewYNg/status/1801295202788983136

1、什么是智能体特性?

去年我在一场关于 LLM 系统的 TED 演讲中使用了下面这张幻灯片,来讨论 LLM 应用中不同的自主性级别。

大模型LLM应用开发:手把手教你设计 Agent 用户交互(一)什么是智能体?_AI大模型_02

系统越依赖 LLM 来决定其行为方式,它就越具有「智能体特性」。

使用 LLM 将输入路由到特定的下游工作流中,表现出少许「智能体」行为。这会归类为上图中的 Router(路由器)类别。

如果你使用多个 LLM 执行多个路由步骤呢?这会介于 Router 和 State Machine(状态机)之间。

如果其中一个步骤是在决定是否继续或结束——实际上允许系统循环运行直到完成?那么这就会归类为 State Machine。

如果系统能够构建工具,记住它们,并在后续步骤中再次使用它们?这与 Voyager 论文所实现的功能类似,并且是非常具有智能体特性的,属于更高的 Autonomous Agent(自主智能体)类别。

论文地址:https://arxiv.org/abs/2305.16291

这些关于「智能体特性」的定义仍然相当技术化。我更倾向于这种技术性的定义,因为在设计和描述 LLM 系统时,这种定义非常实用。

2、「智能体特性」有什么用?

正如所有概念一样,我们有必要思考,为什么我们需要「智能体特性」这个概念?它有什么帮助?

了解系统的智能体特性能够指导你在开发过程中做出决策——包括构建、运行、与之交互、评估,甚至是监控。

系统的智能体特性越强,编排框架的作用就越大。如果你正在设计一个复杂的智能体系统,拥有一个具备这些概念的抽象框架能够加速开发。这个框架应该支持一流的分支逻辑和循环控制。

系统的智能体特性越强,运行难度就越大。它会变得更加复杂,有些任务可能需要很长时间才能完成。这意味着你可能需要将任务设为后台运行。同时,也需要具备持久执行能力,以应对任务过程中出现的错误。

系统的智能体特性越强,你就越希望在系统运行时进行交互。你会希望能够观察系统内部正在发生的事情,因为具体步骤可能无法提前预知。你还需要在某个时间点调整智能体的状态或指令,以便当它偏离既定轨道时纠正回来。

系统的智能体特性越强,你就越需要为此类应用构建一个评估框架。由于随机性会逐步累积,因此你可能需要多次进行评估。你不仅需要测试最终输出,还需要评估中间步骤,检查智能体的行为效率。

系统的智能体特性越强,你就越需要一种全新的监控框架。你希望能够深入分析智能体执行的每一个步骤,还希望可以根据智能体执行的步骤来查询运行情况。

理解并运用系统的智能体能力光谱,能提升开发过程的效率与稳健性。