大语言模型实战

在探讨Agent的行为决策机制时,我们不仅关注它们如何执行任务,更重要的是理解它们如何做出这些决策。Agent的决策过程不是静态的或预先设定的;相反,它依赖于一系列动态和适应性强的机制。这些机制使得代理能够根据实时数据、用户输入和自身先前的行动来灵活调整其行为。本节将深入分析这些机制及其对Agent功能的正确性和稳定性的影响。


1. 非确定性行为序列


要理解Agent的行为决策机制,首先要理解非确定性行为序列。非确定性行为序列是指在一个Agent程序的上下文中,Agent的行为不是预先设定的固定步骤,而是基于实时数据和情况动态决定的。这与传统的、严格顺序的程序流程有显著区别。

首先,非确定性行为序列在实时反应方面,Agent的每一步行动都会考虑到最新的用户输入。这使得Agent能够针对当前情境做出响应,而不是依赖于预设的脚本。

其次,非确定性行为序列会基于历史行动的考量。Agent在决定下一步行动时,不仅会考虑当前的输入,还会考虑之前的行动和它们的结果。这种基于历史的决策使Agent能够从过去的经验中学习,并据此调整其行为。

非确定性行为序列又是如何实现的呢?依靠LLM作为推理工具,帮助Agent决定如何与外部世界互动,而不仅仅是用于生成回复的工具。另外,它还允许Agent探索多种可能的行动路径(包含正确和错误的路径),而不是单一、线性的解决方案。这种探索能力是Agent应对复杂、非线性问题的关键。

非确定性行为序列使得Agent能够适应不断变化的环境和用户需求,提供更加个性化和有效的响应。在处理复杂或多变任务时,这种动态决策机制使Agent能够更加灵活地应对各种情况,从而提高效率和成功率。

总结来说,非确定性行为序列对于构建高效、智能的Agent系统至关重要,是智能代理高度灵活和适应性的体现。它使得Agent能够根据实时输入和过去的经验,动态地做出合理的决策。


2. 使用工具与外部世界连接

为了弥补LLM无法更新实时信息等问题,Agent可以连接到各种外部工具和资源。这些工具包括搜索引擎API(如DuckDuckGo或Google搜索)、数据库,以及其他可以提供额外数据和计算能力的服务。通过这种方式,Agent能够访问和利用不在其直接知识库中的信息。例如,如果需要获取特定的事实信息,Agent可能会使用搜索API来查询互联网上的相关数据。同样,对于数学问题,Agent可以利用外部的数学处理工具或API来获得精确的计算结果。

这种连接到外部工具和资源的能力极大地提高了Agent的功能性和准确性。它允许Agent执行超出其原生语言模型能力范围的任务,从而更有效地服务于用户。

另外,动态选择和使用这些工具也非常重要。Agent需要能够根据任务的需求和上下文,智能地决定何时以及如何使用特定的外部资源。


3. 错误恢复和处理多步骤任务


相比于传统的链式操作,Agent在错误恢复和处理多步骤任务方面有以下优势:

1)相对于简单的链式操作(如一个接一个地执行预定义的任务,即传统的自动化任务程序),Agent能够更灵活地应对变化。这是因为Agent不仅仅执行一系列固定的步骤,而是能够根据当前的上下文和之前的行动结果动态地调整其行为。这种灵活性使得Agent能够适应复杂和不断变化的环境,处理那些不可预见或非线性的任务。当然,在执行结果的稳定性方面,传统自动化程序的执行结果稳定性强,而LLM驱动的Agent还有很长的一段路需要走,尤其对于数据要求精准的领域。

2)Agent可以执行多步骤的、需要多阶段推理的任务。这是因为Agent具备高级的规划和决策能力,能够将大型任务分解为可管理的子任务,并在整个过程中动态调整策略。

3)Agent更擅长从错误中恢复。在链式操作中,一个错误可能导致整个过程失败。而Agent能够识别错误发生的环节,采取措施进行纠正,甚至在必要时改变策略或工具的选择。这种能力使得Agent在面对复杂、多变的任务时更加鲁棒。

所以,Agent的灵活性和强大源于它能够根据实时数据和先前经验做出复杂决策的能力。这使得它在处理多变环境和复杂任务时,相比于简单的链式操作,具有显著优势。


4. Agent的行动与观察的循环


Agent的循环起始于用户的输入或查询。这是整个决策过程的触发点,Agent需要理解和解析用户的请求来确定后续的行动路径。

在接收到用户的查询后,Agent利用LLM来判断应该采取哪种行动。这一步涉及评估不同的工具选项和决定最合适的输入。LLM在这里发挥着类似“大脑”的作用,对用户的查询进行理解和解析,然后基于这些信息推断出最佳的行动方案。

一旦确定了行动计划和所需工具,Agent就会执行相应的操作。这可能包括调用外部API、访问数据库或执行计算任务等。

执行操作后,Agent会收集结果或反馈。这些观察结果是对先前行动的直接响应,提供了执行效果的关键信息。

Agent随后将观察结果反馈到LLM中。这允许模型根据最新的信息调整和优化后续行动。这个步骤是一个迭代过程,Agent通过不断地学习和适应来提升其响应的相关性和准确性。

这个循环将持续进行,直到满足预定的停止条件。停止条件可以是LLM认为问题已得到解决,或达到了某个预设的迭代次数限制。

整个“行动与观察的循环”体现了Agent在理解用户需求、选择合适行动、执行并评估结果方面的动态能力。这个循环确保了Agent在处理各种任务时的灵活性和适应性,使其能够在多变的环境中有效工作。


5. Agent的思考和行动策略


Agent的思考和行动策略在其发展中发挥了至关重要的作用。这些策略不仅加强了Agent的自我评估和迭代学习能力,还为它们提供了适应复杂、不断变化任务和环境所需的工具。通过结合动态记忆和自我反思,Agent能够更加高效地运用过去的经验,以优化其未来的行为和决策。在这一过程中,ReAct策略和Reflexion策略发挥了关键作用。

首先,ReAct策略是Agent技术使用较广泛的思考和行动策略。ReAct策略的提示词格式如下:

 

 

ReAct策略,即“理性思考后行动”(Reasoning and then Acting),是一个结合了链式思考(提示词格式中Thought的描述)和行动步骤(提示词格式中Action的描述)的Agent框架,提高了语言模型作为推理引擎的能力。ReAct策略依赖于“链式思考”这一概念。在这个过程中,Agent会通过逐步逻辑推理来处理复杂问题。

这种方法类似于人类解决问题时的步骤化思考,帮助Agent更准确地理解问题和构建解决方案。图8-2展示了两种环境下的思考和行动过程,左侧是HotpotQA的问答系统操作过程,右侧是AlfWorld Env环境下的任务执行过程。

 

(图片来源:https://arxiv.org/abs/2210.03629)

在完成链式思考后,ReAct策略要求Agent采取实际行动。这意味着Agent不仅仅停留在理论推理(提示词格式中Observation的描述)上,而是将这些推理转化为具体的、可执行的动作。通过ReAct策略,Agent不只是执行预设的命令或响应,而是能够根据不同情境和输入信息做出更加复杂和适应性强的决策。

这样,ReAct策略通过结合推理和行动,提高了Agent的准确性和可靠性。在解决复杂任务时,这种策略能够确保Agent考虑到所有相关因素,并基于全面的分析做出最佳决策。这对于在多变和不确定的实际应用场景中部署Agent至关重要。

其次,Reflexion框架为Agent提供了动态记忆和自我反思的能力,这对于提高Agent的推理技巧至关重要。Reflexion框架的特色是动态记忆,它允许Agent存储和检索过去的经验和知识,而自我反思则使得Agent能够基于这些信息进行深入的思考和学习。Agent将这些反思添加到自己的工作记忆中。工作记忆作为Agent当前任务的上下文,可以在后续查询LLM时被利用。这样,Agent能够根据过去的经验和反思来做出更加合理和高效的决策。自我反思的过程促进了Agent的持续学习和进化。通过不断地分析和改进自己的行为,Agent能够更好地适应新的挑战和环境,提高其整体性能。

为了实现自我反思,Agent通过给LLM展示特定的例子来创建反思过程。这些例子通常包括两种情况:一是失败的轨迹,即Agent在过去尝试中的不成功行动;二是自我反思,即对于如何改进行动计划的思考。图8-3展示了Agent运用Reflexion框架

进行反思的完整过程。

 

 

自我反思使Agent能够回顾和分析过去的决策和行动,识别其中的不足或错误。这种能力对于Agent的持续学习和适应至关重要,特别是在处理复杂、多变任务时。

总的来说,ReAct策略和Reflexion框架的结合为Agent的实现提供了较明朗的方向性指导。ReAct策略和Reflexion策略使代理能够考虑到与特定问题相关的上下文信息,例如在CoT_context类型的Agent中所体现的上下文感知能力为Agent在解决特定问题时提供了丰富的信息背景。在第10章使用LangChain框架实现AutoGPT的代码实践中,采用的是Reflexion框架和ReAct策略。

另外值得注意的是,Reflexion框架通过使用像HotpotQA这样的数据集进行实验,促进了数据驱动的学习和决策过程。这种方法使代理能够基于实际数据和案例进行学习和适应。