当我们讨论大型语言模型(LLM)智能体时,它们与简单程序甚至基本LLM交互的不同之处在于其自主能力。但在这里,“自主性”到底指什么?它并非指智能体拥有自己的秘密计划或愿望。相反,它是指智能体在无需人类指示每个步骤的情况下,操作并做出决策以达成指定目标的能力。想想使用简单计算器与委托研究任务之间的区别。使用计算器时,你一步步输入数字和操作,它完全是被动的响应。而一个LLM智能体,当被赋予“查找伦敦当前天气并总结明天的预报”这样的目标时,它能够自行采取一系列行动。它可能会决定使用搜索工具、解析结果,然后形成摘要,这一切都无需你手动指导每个子任务。这种朝向目标的自主推进,正是智能体自主性的核心所在。这种操作自由与传统自动化脚本形成鲜明对比。脚本就像一个非常严格的食谱:它遵循预设的命令序列,不能偏离。如果出现意外情况,脚本通常会失败或产生不正确的结果。LLM智能体凭借大型语言模型的推理能力,具备更大的灵活性。尽管其行动仍受其编程和LLM训练的指引,但它能以更具动态性的方式解释情况并选择下一步行动。需要理解的是,这种自主性并非无限。智能体在开发者设定的范围内运作。它们被赋予特定目标,能够使用一套限定的工具(我们将在第4章中进一步说明),其“思考”基于它们所用LLM中存在的模式和信息。它们不具备意识或个人意图。它们的自主性是一种功能性能力,使它们能够以一定程度的自我管理来达成目标。下图展示了不同的任务执行模式,突出了智能体自主性与直接人工控制和固定脚本的区别:digraph G { rankdir=TB; graph [fontname="Arial", fontsize=10, bgcolor="#f8f9fa"]; node [shape=box, style=rounded, fontname="Arial", fontsize=10, margin=0.25, penwidth=1.5]; edge [fontname="Arial", fontsize=9, penwidth=1]; subgraph cluster_0 { label = "直接人工控制"; style="rounded,filled"; color="#adb5bd"; bgcolor="#f1f3f5"; node [fillcolor="#e9ecef", color="#868e96"]; hc_human [label="人类"]; hc_input1 [label="输入/命令 1"]; hc_output1 [label="输出 1"]; hc_input2 [label="输入/命令 2"]; hc_output2 [label="输出 2"]; hc_human -> hc_input1 [label="提供"]; hc_input1 -> hc_output1 [label="任务 -> 结果"]; hc_human -> hc_input2 [label="提供下一步"]; hc_input2 -> hc_output2 [label="任务 -> 结果"]; } subgraph cluster_1 { label = "固定脚本自动化"; style="rounded,filled"; color="#adb5bd"; bgcolor="#f1f3f5"; node [fillcolor="#e9ecef", color="#868e96"]; s_trigger [label="触发器"]; s_script [label="脚本(固定逻辑)"]; s_actionA [label="动作 A"]; s_actionB [label="动作 B"]; s_final_output [label="最终输出"]; s_trigger -> s_script; s_script -> s_actionA [label="执行"]; s_actionA -> s_actionB [label="然后"]; s_actionB -> s_final_output [label="然后"]; } subgraph cluster_2 { label = "具备自主性的智能体"; style="rounded,filled"; color="#adb5bd"; bgcolor="#f1f3f5"; a_goal [label="总体目标", style=filled, fillcolor="#b2f2bb", color="#37b24d"]; a_agent [label="智能体\n(大语言模型核心 + 逻辑)", style=filled, fillcolor="#a5d8ff", color="#1c7ed6"]; a_observe [label="观察状态/\n信息", style=filled, fillcolor="#ffec99", color="#f59f00"]; a_think [label="思考/规划\n(决定下一步行动)", style=filled, fillcolor="#d0bfff", color="#7048e8"]; a_act [label="行动\n(使用工具,交互)", style=filled, fillcolor="#fcc2d7", color="#d6336c"]; a_outcome [label="结果/\n进展", style=filled, fillcolor="#ced4da", color="#495057"]; a_goal -> a_agent [label="赋予"]; a_agent -> a_observe [label="启动"]; a_observe -> a_think [label="告知"]; a_think -> a_act [label="决定"]; a_act -> a_observe [label="更新状态/\n获取反馈", constraint=false, style=dashed]; a_act -> a_outcome [label="导致"]; a_agent -> a_think [style=dotted, label="推理引擎"]; } }该图展示了一种演进:直接人工控制的每一步都需要持续输入。固定脚本自动化了序列但无法适应。具备自主性的智能体可以接收一个目标,然后循环进行观察、思考和行动,以朝着该目标前进。那么,为什么这种自主性有益呢?处理多步骤任务:智能体能够管理需要多个操作的任务,例如从多个来源收集信息、处理信息,然后根据结果采取行动。适应轻微变化:由于大型语言模型能够理解语境,智能体或许能够处理输入中的轻微变化或意料之外(但并非完全不可预见)的中间结果,而不会立即失败。例如,如果一个网站的布局略有变化,设计良好的智能体可能仍能找到它需要的信息。减少繁琐工作:通过不仅自动化执行,还自动化部分中间决策,智能体可以使人类用户从任务的更多操作细节中解脱出来。设想你给同事分配一项任务,比如:“请查明Alpha项目的项目经理是谁,获取他们的电子邮件地址,并替我草拟一封询问简要状态更新的介绍性邮件。”你的同事不需要你告诉他们如何找到项目经理(例如,查看内部目录、询问其他团队成员),也不需要你告诉他们草稿中每一句话的具体措辞。他们有一个目标,并具备自主决定中间步骤的能力。大型语言模型智能体力求实现类似的职能自主性,尽管是在一个更结构化和数字化的范畴。这种具备一定自主性进行操作的能力,是使大型语言模型智能体变得强大的根本所在。在学习本课程的过程中,你将了解更多关于规划(第5章)、工具(第4章)和记忆(第6章)等组成部分,它们支持并塑造了这种自主性,使智能体能够执行日益复杂的任务。