大语言模型实战

Agent包含什么?如何定义一个Agent?Lilian Weng的博客“LLM Powered Autonomous Agents”清晰地定义了LLM驱动的Agent系统的核心模块。


(1)LLM模块

LLM模块是Agent的核心,负责处理用户输入、生成响应、执行操作等,相当于Agent的“大脑”。因为Agent不是按预设路径行动的,而是根据实时情况来动态调整其行为策略,所以LLM模块不仅是处理和生成响应的工具,而是作为一个动态的推理引擎,关键在于决定如何与外部世界互动。LLM模块在处理复杂交互和决策中处于核心地位。


(2)Planning模块

Planning模块负责制订Agent的行动计划,包括将大型任务分解为多个子目标,以及对过去的行动进行反思和改进。Agent在处理多跳任务时,其灵活性和能力需要强大的Planning模块的支持。这意味着Planning模块不仅制订行动计划,还需要能够根据代理的经验和环境变化进行适应和调整。


(3)Memory模块

Memory模块用于存储Agent的记忆,包括短期记忆(用于存储当前会话中的数据)和长期记忆(用于存储长期的数据)。记忆不仅仅是被动的信息存储,而是一个动态、可访问且可更新的系统,Memory模块被视为一种高度动态的系统。这个系统的3个特征是:动态性、可访问、可更新。动态性意味着记忆不是静止不变的,而是随着时间和环境的变化而持续演变。在Agent的上下文中,这种动态性使得记忆能够适应新的情况和需求,从而更好地支持Agent的任务执行和决策过程。可访问表示代理能够根据需要检索和使用存储在记忆中的信息。可更新指的是记忆系统不仅能存储过去的信息,还能根据新的经验和数据进行更新。这种特性允许智能代理从其交互和经验中学习,不断调整其知识库和行为模式。代理能够根据新的观察或反馈更新其记忆,从而提高对未来情况的适应能力和决策质量。


(4)Tools模块

Tools模块是Agent可以使用的工具。这个模块不仅包括LLM本身的语言功能,还包括各种外部工具,如通过API调用的数据源、计算资源和其他服务。Tools模块的核心在于为Agent提供必要的资源和能力,使其能够执行更加复杂和多样化的任务。在使用Tools模块时,Agent代理需要展现出高度的上下文意识和决策能力。这意味着Agent不仅要能够识别何时使用哪个工具,还要能够根据特定任务或情境选择最合适的工具。例如,Agent可能会根据任务的复杂性或所需的特定信息类型,决定是使用内部的LLM功能还是调用外部API。有效地使用工具不仅包括选择正确的工具,还包括如何高效地利用这些工具。这可能涉及优化工具调用的方式、减少不必要的工具使用,以及如何整合多个工具的输出以得到最佳结果。Agent在使用Tools模块时,应避免资源浪费并确保任务执行的高效性。


(5)Feedback模块

Feedback模块是Agent从用户处获得的反馈,可以帮助Agent改进性能、提高准确性。准确性是衡量一个Agent优劣的标准之一。特别是如何使代理在不同环境下可靠地运行,是人们日益增长的需求。Feedback模块通过分析用户反馈来识别和修正代理的缺陷或不足之处。例如,如果用户反馈指出代理在某些任务上表现不佳,开发者可以利用这些信息来调整代理的行为或增强其能力。

综合Lilian Weng所做的上述模块定义,一个Agent的定义涉及多个层面,如图8-1所示。它是一个集成了LLM(包含在图8-1的Agent方块内,Agent的语言能力)、Planning、Memory、Tools和Feedback等模块的系统。这些模块共同协作,使Agent 能够自主执行任务、学习并改进其行为。