跳到内容

智能体架构

许多LLM应用在LLM调用之前和/或之后实现特定的步骤控制流。例如,RAG 会检索与用户问题相关的文档,并将这些文档传递给LLM,以便模型的响应基于所提供的文档上下文。

我们有时希望LLM系统能够选择自己的控制流来解决更复杂的问题,而不是硬编码固定的控制流!这是智能体的一个定义:智能体是一个使用LLM来决定应用程序控制流的系统。LLM可以通过多种方式控制应用程序

  • LLM可以在两条潜在路径之间进行路由
  • LLM可以决定调用众多工具中的哪一个
  • LLM可以决定生成的答案是否足够,或者是否需要更多工作

因此,存在许多不同类型的智能体架构,它们赋予LLM不同级别的控制能力。

Agent Types

路由

路由允许LLM从指定的一组选项中选择一个步骤。这是一种控制级别相对有限的智能体架构,因为LLM通常专注于做出单一决策,并从有限的预定义选项中生成特定输出。路由通常采用几种不同的概念来实现这一点。

结构化输出

LLM的结构化输出通过提供LLM在其响应中应遵循的特定格式或模式来实现。这与工具调用类似,但更通用。虽然工具调用通常涉及选择和使用预定义函数,但结构化输出可用于任何类型的格式化响应。实现结构化输出的常见方法包括

  1. 提示工程:通过系统提示指示LLM以特定格式响应。
  2. 输出解析器:使用后处理从LLM响应中提取结构化数据。
  3. 工具调用:利用某些LLM内置的工具调用能力来生成结构化输出。

结构化输出对于路由至关重要,因为它们确保LLM的决策能够被系统可靠地解释和执行。在此操作指南中了解更多关于结构化输出的信息。

工具调用智能体

虽然路由允许LLM做出单一决策,但更复杂的智能体架构通过两种关键方式扩展了LLM的控制能力

  1. 多步决策:LLM可以连续做出一系列决策,而不仅仅是一个。
  2. 工具访问:LLM可以选择并使用各种工具来完成任务。

ReAct 是一种流行的通用智能体架构,它结合了这些扩展,并整合了三个核心概念。

  1. 工具调用:允许LLM根据需要选择和使用各种工具。
  2. 记忆:使智能体能够保留和使用之前步骤的信息。
  3. 规划:使LLM能够创建并遵循多步计划以实现目标。

这种架构允许更复杂和灵活的智能体行为,超越简单的路由,实现多步动态问题解决。与原始论文不同,今天的智能体依赖于LLM的工具调用能力,并在一系列消息上运行。

在LangGraph中,您可以使用预构建的智能体来开始使用工具调用智能体。

工具调用

当您希望智能体与外部系统交互时,工具非常有用。外部系统(例如,API)通常需要特定的输入模式或负载,而不是自然语言。例如,当我们把API绑定为一个工具时,我们让模型了解所需的输入模式。模型将根据用户的自然语言输入选择调用工具,并返回符合工具所需模式的输出。

许多LLM提供商支持工具调用,并且LangChain中的工具调用接口很简单:您只需将任何Python function 传递给 ChatModel.bind_tools(function)

Tools

内存

记忆对智能体至关重要,使其能够在问题解决的多个步骤中保留和利用信息。它在不同规模上运作

  1. 短期记忆:允许智能体访问序列中早期步骤中获取的信息。
  2. 长期记忆:使智能体能够回忆起之前交互中的信息,例如对话中的历史消息。

LangGraph提供对记忆实现的完全控制

这种灵活的方法允许您根据特定的智能体架构需求定制记忆系统。有效的记忆管理增强了智能体保持上下文、从过去经验中学习并随着时间做出更明智决策的能力。有关添加和管理记忆的实用指南,请参阅记忆

规划

在工具调用智能体中,LLM在一个while循环中被反复调用。在每一步,智能体决定要调用哪些工具,以及这些工具的输入应该是什么。然后执行这些工具,并将输出作为观察结果反馈给LLM。当智能体认为它有足够的信息来解决用户请求,并且不值得再调用任何工具时,while循环终止。

自定义智能体架构

虽然路由和工具调用智能体(如ReAct)很常见,但定制智能体架构通常能为特定任务带来更好的性能。LangGraph提供了几个强大的功能来构建定制的智能体系统

人机协作 (Human-in-the-loop)

人类参与可以显著提高智能体的可靠性,特别是对于敏感任务。这可以包括

  • 批准特定行动
  • 提供反馈以更新智能体的状态
  • 在复杂决策过程中提供指导

当完全自动化不可行或不理想时,人机协作模式至关重要。在我们的人机协作指南中了解更多信息。

并行化

并行处理对于高效的多智能体系统和复杂任务至关重要。LangGraph通过其Send API支持并行化,从而实现

  • 多状态并发处理
  • 实现类Map-Reduce操作
  • 高效处理独立子任务

有关实际实现,请参阅我们的Map-Reduce教程

子图

子图对于管理复杂的智能体架构至关重要,特别是在多智能体系统中。它们允许

  • 对单个智能体进行隔离状态管理
  • 智能体团队的层次化组织
  • 智能体与主系统之间受控通信

子图通过状态模式中的重叠键与父图通信。这使得灵活的模块化智能体设计成为可能。有关实现细节,请参阅我们的子图操作指南

反思

反思机制可以通过以下方式显著提高智能体可靠性:

  1. 评估任务完成度和正确性
  2. 为迭代改进提供反馈
  3. 实现自我纠正和学习

虽然反思通常基于LLM,但它也可以使用确定性方法。例如,在编码任务中,编译错误可以作为反馈。这种方法在此视频中得到了展示,该视频使用LangGraph进行自修正代码生成

通过利用这些功能,LangGraph能够创建复杂的、针对特定任务的智能体架构,这些架构能够处理复杂的工作流,有效协作,并持续提高其性能。