5分钟阅读
译文: LLM驱动的自主智能体:架构、组件与实践案例
LLM驱动的自主智能体:架构、组件与实践案例
译者按
未来属于AI已无需置疑,而AI智能体(AI Agent)的重要性更是不言而喻。
作为设计师,不必非要学习编程,但了解其背后的核心原理,能更高效地调用这些工具,甚至可为AI智能体的设计提供参考。
OpenAI应用研究主管莉莲·翁(Lilian Weng)在一篇博客中提出,AI智能体可能会开启一个新时代。她给出了智能体的基础架构:智能体=大语言模型(LLM)+规划能力+记忆+工具使用,其中LLM扮演着智能体的“大脑”角色,为系统提供推理、规划等核心能力。
以大语言模型(LLM)为核心控制器构建智能体,是一个极具吸引力的概念。多个概念验证演示项目,如 AutoGPT、GPT-Engineer和BabyAGI,都提供了富有启发的示例。LLM的潜力远不止生成优质文案、故事、文章和程序,它还能被打造成强大的通用问题解决工具。
智能体系统概述
在LLM驱动的自主智能体系统中,LLM作为智能体的“大脑”,辅以几个关键组件:
- 规划(Planning)
- 子目标与分解:智能体将复杂任务拆分为更小、可管理的子目标,以便高效处理复杂任务。
- 反思与优化:智能体可对过往行为进行自我批评和自我反思,从错误中学习并优化后续步骤,进而提升最终结果质量。
- 记忆(Memory)
- 短期记忆:模型的上下文学习(参见提示词工程)可视为利用短期记忆进行学习。
- 长期记忆:通过外部向量数据库和快速检索技术,智能体能够长期存储和召回(近乎无限的)信息。
- 工具使用(Tool use)
- 智能体通过调用外部API获取模型权重中缺失的信息(这些信息在预训练后通常难以更改),包括实时信息、代码执行能力、专有信息源访问权限等。

LLM驱动的自主智能体系统概述。
组件一:规划
复杂任务通常涉及多个步骤,智能体需要明确这些步骤并提前规划。
任务分解
思维链(Chain of Thought,CoT;Wei等人,2022) 已成为提升模型处理复杂任务性能的标准提示技术。模型被指令“逐步思考”,通过更多的测试时计算,将困难任务分解为更小、更简单的步骤。思维链将复杂任务转化为多个可管理的子任务,同时也为解读模型的思考过程提供了思路。
思维树(Tree of Thoughts,Yao等人,2023) 在思维链的基础上进行了扩展,每一步都会探索多种推理可能性。它首先将问题分解为多个思考步骤,每个步骤生成多个思路,形成树状结构。搜索过程可采用广度优先搜索(BFS)或深度优先搜索(DFS),每个状态通过分类器(基于提示词)或多数投票进行评估。
任务分解可通过三种方式实现:(1)通过LLM进行简单提示,例如“完成XYZ的步骤:1.”“实现XYZ的子目标有哪些?”;(2)使用任务特定指令,例如写小说时使用“撰写故事大纲”;(3)借助人工输入。
另一种截然不同的方法是LLM+P(Liu等人,2023),它依赖外部经典规划器进行长时程规划。该方法采用规划领域定义语言(PDDL)作为中间接口来描述规划问题。过程如下:LLM(1)将问题转化为“问题PDDL”;(2)请求经典规划器基于已有的“领域PDDL”生成PDDL规划;(3)将PDDL规划转回自然语言。本质上,规划步骤被外包给外部工具,前提是存在特定领域的PDDL和合适的规划器——这在某些机器人场景中很常见,但在其他许多领域并不普及。
自我反思
自我反思是自主智能体的关键特性,它能通过优化过往行为决策、纠正之前的错误实现迭代改进。在需要反复尝试的现实任务中,自我反思发挥着至关重要的作用。
ReAct(Yao等人,2023) 通过将动作空间扩展为任务特定的离散动作与语言空间的组合,在LLM中整合了推理与行动。前者使LLM能够与环境交互(例如调用维基百科搜索API),后者则促使LLM以自然语言生成推理轨迹。
ReAct的提示模板包含明确的思考步骤,大致格式如下:
思考:...
动作:...
观察:...
...(重复多次)

知识密集型任务(如HotpotQA、FEVER)和决策任务(如AlfWorld Env、WebShop)的推理轨迹示例。(图片来源:Yao等人,2023)
在知识密集型任务和决策任务的实验中,ReAct的表现均优于移除“思考:…”步骤的纯“动作”基线模型。
Reflexion(Shinn & Labash,2023) 是一个为智能体配备动态记忆和自我反思能力以提升推理技能的框架。Reflexion采用标准强化学习(RL)设置,奖励模型提供简单的二元奖励,动作空间沿用ReAct的设置——在任务特定动作空间中加入语言以支持复杂推理步骤。每次动作执行后,智能体计算启发式函数,并根据自我反思结果决定是否重置环境开始新尝试。

Reflexion框架示意图。(图片来源:Shinn & Labash,2023)
启发式函数用于判断轨迹是否低效或包含幻觉,进而决定是否终止。低效规划指耗时过长却未成功的轨迹;幻觉则定义为连续执行相同动作却得到相同环境观察的情况。
自我反思通过向LLM展示两样本示例实现,每个示例由(失败轨迹、指导未来规划调整的理想反思)组成。反思结果会被添加到智能体的工作记忆中(最多三条),作为查询LLM时的上下文。

AlfWorld Env和HotpotQA的实验结果。在AlfWorld中,幻觉是比低效规划更常见的失败原因。(图片来源:Shinn & Labash,2023)
事后思维链(Chain of Hindsight,CoH;Liu等人,2023) 通过向模型明确呈现一系列过往输出(每条输出均附带反馈),鼓励模型改进自身输出。人类反馈数据集合为Dh={(x, yi, ri, zi)}i=1n,其中x为提示词,yi为模型完成结果,ri为人类对yi的评分,zi为对应的人类事后反馈。假设反馈元组按奖励排序为rn≥rn−1≥⋯≥r1。该过程为有监督微调,数据格式为τh=(x, zi, yi, zj, yj,…, zn, yn)(其中≤i≤j≤n)。模型经过微调后,仅基于序列前缀预测yn,使模型能够通过自我反思,根据反馈序列生成更优输出。测试时,模型还可接收多轮人工标注指令。
为避免过拟合,CoH添加了正则化项以最大化预训练数据集的对数似然。为避免捷径学习和复制(反馈序列中存在大量常用词),训练过程中会随机屏蔽0%-5%的过往 tokens。
实验中的训练数据集结合了 WebGPT对比数据、基于人类反馈的摘要数据和人类偏好数据集。

经CoH微调后,模型能够遵循指令,生成序列式渐进改进的输出。(图片来源:Liu等人,2023)
CoH的核心思想是在上下文中呈现一系列逐步优化的输出历史,训练模型顺应这一趋势生成更优结果。算法蒸馏(Algorithm Distillation,AD;Laskin等人,2023) 将这一思想应用于强化学习任务的跨回合轨迹,将“算法”封装在长历史条件策略中。智能体与环境多次交互,每次回合都会有所进步,AD将这些学习历史拼接后输入模型,使模型预测的下一个动作比之前的尝试表现更优。其目标是学习强化学习的过程,而非训练特定任务的策略本身。

算法蒸馏(AD)工作原理示意图。(图片来源:Laskin等人,2023)
该论文假设,任何能生成学习历史集合的算法,都可通过对动作进行行为克隆,蒸馏到神经网络中。历史数据由一组特定任务训练的源策略生成。训练阶段,每次强化学习运行时随机采样一个任务,并使用多回合历史的子序列进行训练,使学到的策略与任务无关。
实际应用中,模型的上下文窗口长度有限,因此回合需足够短以构建多回合历史。2-4个回合的多回合上下文是学习近优上下文强化学习算法的必要条件,上下文强化学习的实现需要足够长的上下文。
与三种基线模型(专家蒸馏ED、源策略、RL²)的对比显示,尽管AD仅使用离线强化学习,但其上下文强化学习性能接近RL²,且学习速度远快于其他基线模型。当基于源策略的部分训练历史时,AD的改进速度也显著快于ED基线。

AD、ED、源策略和RL²在需要记忆和探索的环境中的对比。仅设置二元奖励。源策略在“黑暗”环境中使用A3C训练,在水迷宫环境中使用DQN训练。(图片来源:Laskin等人,2023)
组件二:记忆
(特别感谢ChatGPT协助撰写本节。通过与ChatGPT的交流,我学到了很多关于人类大脑和快速最大内积搜索(MIPS)数据结构的知识。)
记忆的类型
记忆可定义为获取、存储、保留和后续检索信息的过程。人类大脑的记忆主要分为以下几类:
- 感觉记忆:这是记忆的最初阶段,能够在原始刺激消失后,短暂保留感官信息(视觉、听觉等)的印象。感觉记忆通常仅持续几秒。子类包括图像记忆(视觉)、声像记忆(听觉)和触觉记忆(触觉)。
- 短期记忆(STM)或工作记忆:存储当前意识到的信息,用于支持学习、推理等复杂认知任务。短期记忆的容量约为7个项目(Miller,1956),持续时间为20-30秒。
- 长期记忆(LTM):能够长时间存储信息,从几天到几十年不等,存储容量几乎无限。长期记忆分为两个子类:
- 外显/陈述性记忆:关于事实和事件的记忆,指可有意识地回忆起的内容,包括情景记忆(事件和经历)和语义记忆(事实和概念)。
- 内隐/程序性记忆:无意识的记忆,涉及自动执行的技能和常规,如骑自行车或打字。

人类记忆分类。
我们可以大致建立以下映射关系:
- 感觉记忆对应原始输入(文本、图像或其他模态)的嵌入表示学习;
- 短期记忆对应上下文学习,受Transformer有限上下文窗口长度的限制,具有短期性和有限性;
- 长期记忆对应外部向量数据库,智能体在查询时可通过快速检索访问。
外部记忆可缓解有限注意力跨度的限制。标准做法是将信息的嵌入表示存储到支持快速最大内积搜索(MIPS)的向量数据库中。为优化检索速度,常用选择是近似最近邻(ANN)算法,返回近似前k个最近邻,以轻微的精度损失换取大幅的速度提升。
快速MIPS的常用ANN算法
- LSH(局部敏感哈希):引入哈希函数,使相似的输入项以高概率映射到同一个桶中,桶的数量远小于输入项的数量。
- ANNOY(近似最近邻算法):核心数据结构是随机投影树,即一组二叉树。每个非叶节点代表一个将输入空间一分为二的超平面,每个叶节点存储一个数据点。树的构建独立且随机,在某种程度上模拟了哈希函数。ANNOY在所有树中搜索,迭代靠近查询目标的一半空间,然后聚合结果。其思想与KD树类似,但可扩展性更强。
- HNSW(分层可导航小世界网络):受小世界网络思想启发——大多数节点可通过少量步骤到达其他任何节点(例如社交网络的“六度分隔”特性)。HNSW构建分层的小世界图,最底层包含实际数据点,中间层创建捷径以加速搜索。搜索时,从顶层随机节点开始向目标导航,无法进一步靠近时则下移一层,直至底层。上层的每次移动可能覆盖数据空间的较大距离,下层的每次移动则优化搜索精度。
- FAISS(Facebook AI相似度搜索):基于高维空间中节点距离遵循高斯分布的假设,认为数据点存在聚类特性。FAISS应用向量量化技术,将向量空间划分为多个聚类,然后在每个聚类内进行精细量化。搜索时先通过粗量化寻找聚类候选,再在每个聚类内通过精细量化进一步搜索。
- ScaNN(可扩展最近邻算法):核心创新是各向异性向量量化。将数据点xi量化为x
i,使内积⟨q, xi⟩与原始距离∠q, xi尽可能相似,而非选择最接近的量化质心点。

MIPS算法对比(以 recall@10 为指标)。(图片来源:Google Blog,2020)
更多MIPS算法及性能对比可查看 ann-benchmarks.com。
组件三:工具使用
工具使用是人类显著的区别性特征。我们创造、修改和利用外部物体,以完成超出自身生理和认知极限的事情。为LLM配备外部工具,可显著扩展模型的能力。

海獭在水中漂浮时使用石头敲开贝壳的图片。虽然其他一些动物也会使用工具,但复杂程度无法与人类相比。(图片来源:Animals using tools)
工具使用相关框架与实践
MRKL(Karpas等人,2022) 是“模块化推理、知识与语言”的缩写,是一种用于自主智能体的神经符号架构。MRKL系统由一组“专家”模块组成,通用LLM充当路由器,将查询分配给最合适的专家模块。这些模块可以是神经型的(如深度学习模型)或符号型的(如数学计算器、货币转换器、天气API)。
研究人员进行了一项微调LLM调用计算器的实验,以算术题为测试案例。结果显示,LLM(70亿参数Jurassic1-large模型)解决文字数学题比明确表述的数学题更困难,因为它难以可靠地提取基础算术的正确参数。这一结果表明,当外部符号工具可可靠工作时,“知道何时使用工具以及如何使用工具”至关重要,而这取决于LLM的能力。
TALM(工具增强语言模型;Parisi等人,2022) 和Toolformer(Schick等人,2023) 均通过微调语言模型,使其学会使用外部工具API。数据集的扩展基于新增的API调用标注是否能提升模型输出质量。更多细节可参考提示词工程的 “外部API”部分。
ChatGPT的插件功能和OpenAI API的函数调用功能,是LLM增强工具使用能力的实际应用案例。工具API集合可由其他开发者提供(如插件)或自定义(如函数调用)。
HuggingGPT(Shen等人,2023) 是一个以ChatGPT为任务规划器的框架,它根据模型描述选择HuggingFace平台上可用的模型,并基于执行结果总结响应。

HuggingGPT工作原理示意图。(图片来源:Shen等人,2023)
该系统包含四个阶段:
(1)任务规划:LLM作为“大脑”,将用户请求解析为多个任务。每个任务包含四个属性:任务类型、ID、依赖关系和参数。通过少样本示例引导LLM进行任务解析和规划。
指令示例: AI助手可将用户输入解析为多个任务:[{“task”: 任务名称, “id”: 任务ID, “dep”: 依赖任务ID列表, “args”: {“text”: 文本内容, “image”: 图片URL, “audio”: 音频URL, “video”: 视频URL}}]。“dep”字段表示当前任务所依赖的、生成新资源的前序任务ID。特殊标签“-task_id”指代ID为task_id的依赖任务生成的文本、图片、音频和视频。任务必须从以下选项中选择: {{可用任务列表}} 。任务之间存在逻辑关系,请注意顺序。若无法解析用户输入,需返回空JSON。以下是参考案例: {{演示示例}} 。聊天历史记录为 {{聊天历史}} 。可从聊天历史中获取用户提及的资源路径,用于任务规划。
(2)模型选择:LLM将任务分配给专家模型,该请求以选择题形式呈现。LLM需从提供的模型列表中选择。由于上下文长度有限,需先按任务类型过滤。
指令示例: 给定用户请求和调用命令,AI助手帮助用户从模型列表中选择合适的模型处理请求。仅输出最合适模型的ID,格式需严格遵循JSON:“id”: “模型ID”, “reason”: “选择的详细理由”。候选模型列表: {{候选模型}} 。请从列表中选择一个模型。
(3)任务执行:专家模型执行特定任务并记录结果。
指令示例: 基于输入和推理结果,AI助手需描述过程和结果。前序阶段信息如下:用户输入: {{用户输入}} ,任务规划: {{任务列表}} ,模型选择: {{模型分配}} ,任务执行: {{预测结果}} 。需先直接回应用户请求,再以第一人称描述任务过程,展示分析和模型推理结果。若推理结果包含文件路径,需告知用户完整路径。
(4)响应生成:LLM接收执行结果,向用户提供总结性回复。
要将HuggingGPT投入实际应用,需解决以下挑战:(1)效率提升——LLM推理轮次和与其他模型的交互会拖慢流程;(2)依赖长上下文窗口——需传递复杂任务内容;(3)稳定性提升——LLM输出和外部模型服务的稳定性需优化。
API-Bank(Li等人,2023) 是一个评估工具增强LLM性能的基准数据集。它包含53个常用API工具、完整的工具增强LLM工作流,以及264个带标注的对话(涉及568次API调用)。API选择涵盖多种类型,包括搜索引擎、计算器、日历查询、智能家居控制、日程管理、健康数据管理、账户认证流程等。由于API数量较多,LLM需先通过API搜索引擎找到合适的API,再参考对应文档进行调用。

API-Bank中LLM调用API的伪代码。(图片来源:Li等人,2023)
在API-Bank工作流中,LLM需做出一系列决策,每个步骤均可评估决策准确性:
- 是否需要调用API;
- 确定要调用的正确API——若不够准确,LLM需迭代修改API输入(例如为搜索引擎API确定搜索关键词);
- 基于API结果响应——若结果不满意,模型可选择优化后再次调用。
该基准从三个层面评估智能体的工具使用能力:
- 1级:评估“调用API”的能力。给定API描述,模型需判断是否调用该API、正确调用,并对API返回结果做出适当响应。
- 2级:评估“检索API”的能力。模型需搜索可能解决用户需求的API,并通过阅读文档学习如何使用。
- 3级:评估“超越检索和调用的API规划”能力。对于模糊的用户请求(如安排小组会议、为旅行预订机票/酒店/餐厅),模型可能需要多次调用API才能完成。
案例研究
科学发现智能体
ChemCrow(Bran等人,2023) 是一个领域特定的示例,LLM通过13个专家设计的工具增强,可完成有机合成、药物发现和材料设计相关任务。该工作流基于 LangChain 实现,融合了前文提到的ReAct和MRKL框架的思想,将思维链推理与任务相关工具相结合:
- 向LLM提供工具名称、功能描述和输入/输出细节;
- 指令LLM根据用户提示词,必要时使用提供的工具回答问题。指令建议模型遵循ReAct格式——“思考、动作、动作输入、观察”。
一个有趣的发现是:尽管基于LLM的评估显示GPT-4和ChemCrow的表现几乎相当,但专家针对解决方案的完整性和化学正确性进行的人类评估表明,ChemCrow的表现远超GPT-4。这说明,在需要深厚专业知识的领域,使用LLM评估自身性能可能存在问题——LLM缺乏专业知识,无法识别自身缺陷,因此难以准确判断任务结果的正确性。
Boiko等人(2023)也研究了LLM驱动的科学发现智能体,用于自主设计、规划和执行复杂的科学实验。该智能体可使用工具浏览互联网、阅读文档、执行代码、调用机器人实验API,以及利用其他LLM。
例如,当收到“开发一种新型抗癌药物”的请求时,模型提出了以下推理步骤:
- 查询抗癌药物发现的当前趋势;
- 选择一个靶点;
- 请求针对这些化合物的分子骨架;
- 确定化合物后,尝试合成该化合物。
研究人员还讨论了相关风险,尤其是非法药物和生物武器方面的风险。他们构建了一个包含已知化学武器制剂的测试集,要求智能体合成这些制剂。11个请求中有4个(36%)被接受并提供了合成方案,智能体还尝试查阅文档以执行该流程;7个请求被拒绝,其中5个是在网络搜索后拒绝,2个仅基于提示词拒绝。
生成式智能体模拟
生成式智能体(Generative Agents;Park等人,2023) 是一个有趣的实验:25个虚拟角色各自由LLM驱动的智能体控制,在一个受《模拟人生》启发的沙盒环境中生活和互动。生成式智能体为交互式应用创造了逼真的人类行为模拟。
生成式智能体的设计融合了LLM与记忆、规划和反思机制,使智能体能够基于过往经验行为,并与其他智能体互动。
- 记忆流:长期记忆模块(外部数据库),以自然语言记录智能体的全部经历。
- 每个元素都是“观察”,即智能体直接获取的事件。
- 智能体之间的交流可触发新的自然语言陈述。
- 检索模型:根据相关性、时效性和重要性,提取相关上下文为智能体行为提供依据。
- 时效性:近期事件得分更高;
- 重要性:区分普通记忆和核心记忆,直接通过LLM判断;
- 相关性:基于与当前场景/查询的关联程度。
- 反思机制:随着时间推移将记忆合成更高层次的推断,指导智能体未来行为。这些是“过往事件的高层摘要”(与前文的“自我反思”略有不同)。
- 向LLM提供最近100条观察,生成3个最关键的高层问题,然后让LLM回答这些问题。
- 规划与反应:将反思结果和环境信息转化为动作。
- 规划的核心是平衡当下与长期的逼真度;
- 提示词模板:“{智能体X的介绍}。以下是X今天的大致计划:1)”;
- 智能体之间的关系以及一个智能体对另一个智能体的观察,均会纳入规划和反应的考量;
- 环境信息以树状结构呈现。

生成式智能体架构。(图片来源:Park等人,2023)
这个有趣的模拟产生了涌现的社会行为,例如信息传播、关系记忆(如两个智能体继续之前的对话主题)和社交事件协调(如举办派对并邀请多人参加)。
概念验证示例
AutoGPT 让人们广泛关注到以LLM为主要控制器构建自主智能体的可能性。由于采用自然语言接口,它存在不少可靠性问题,但仍是一个极具吸引力的概念验证演示。AutoGPT的大量代码都用于格式解析。
以下是AutoGPT使用的系统提示词,其中 {{...}} 为用户输入:
你是{{AI名称}},{{用户提供的AI机器人描述}}。
你的决策必须独立做出,无需寻求用户帮助。发挥你作为LLM的优势,采用简单策略,避免法律风险。
目标:
1. {{用户提供的目标1}}
2. {{用户提供的目标2}}
3. ...
4. ...
5. ...
约束条件:
1. 短期记忆限制约4000词。你的短期记忆有限,需立即将重要信息保存到文件中。
2. 若不确定之前的做法或想回忆过往事件,思考类似事件有助于记忆。
3. 无需用户协助。
4. 仅使用双引号列出的命令,例如"命令名称"。
5. 对于几分钟内无法终止的命令,使用子进程执行。
命令:
1. 谷歌搜索:"google",参数:"input": "<搜索内容>"
2. 浏览网站:"browse_website",参数:"url": "<网址>","question": "<你想在网站上查找的内容>"
3. 启动GPT智能体:"start_agent",参数:"name": "<名称>","task": "<简短任务描述>","prompt": "<提示词>"
4. 向GPT智能体发送消息:"message_agent",参数:"key": "<密钥>","message": "<消息内容>"
5. 列出GPT智能体:"list_agents",无参数
6. 删除GPT智能体:"delete_agent",参数:"key": "<密钥>"
7. 克隆代码仓库:"clone_repository",参数:"repository_url": "<网址>","clone_path": "<目录>"
8. 写入文件:"write_to_file",参数:"file": "<文件路径>","text": "<文本内容>"
9. 读取文件:"read_file",参数:"file": "<文件路径>"
10. 追加到文件:"append_to_file",参数:"file": "<文件路径>","text": "<文本内容>"
11. 删除文件:"delete_file",参数:"file": "<文件路径>"
12. 搜索文件:"search_files",参数:"directory": "<目录>"
13. 分析代码:"analyze_code",参数:"code": "<完整代码字符串>"
14. 获取优化代码:"improve_code",参数:"suggestions": "<建议列表>","code": "<完整代码字符串>"
15. 编写测试:"write_tests",参数:"code": "<完整代码字符串>","focus": "<重点关注领域列表>"
16. 执行Python文件:"execute_python_file",参数:"file": "<文件路径>"
17. 生成图片:"generate_image",参数:"prompt": "<提示词>"
18. 发送推文:"send_tweet",参数:"text": "<文本内容>"
19. 不执行任何操作:"do_nothing",无参数
20. 任务完成(关闭):"task_complete",参数:"reason": "<原因>"
资源:
1. 可访问互联网进行搜索和信息收集。
2. 长期记忆管理功能。
3. 由GPT-3.5驱动的智能体,可委派简单任务。
4. 文件输出功能。
性能评估:
1. 持续回顾和分析你的行为,确保发挥最佳水平。
2. 不断对自己的整体行为进行建设性自我批评。
3. 反思过往决策和策略,优化方法。
4. 每个命令都有成本,需聪明高效地行动。力求以最少步骤完成任务。
你只能按照以下JSON格式响应:
响应格式:
{
"thoughts": {
"text": "思考内容",
"reasoning": "推理过程",
"plan": "- 简短的要点式\n- 长期计划\n- 表述",
"criticism": "建设性自我批评",
"speak": "向用户总结的思考内容"
},
"command": {
"name": "命令名称",
"args": {
"参数名称": "值"
}
}
}
确保响应可通过Python的json.loads解析。
GPT-Engineer 是另一个项目,它能根据自然语言描述的任务,生成完整的代码仓库。GPT-Engineer会先思考需要构建的各个小组件,并在需要时向用户询问以明确细节。
以下是GPT-Engineer用于任务澄清的对话示例(发送至OpenAI的ChatCompletion接口),用户输入用 {{用户输入文本}} 标记:
[
{
"role": "system",
"content": "你需要阅读指令,但不执行,仅用于澄清疑问。\n具体来说,你首先用简短的要点总结需要澄清的领域。\n然后提出一个澄清问题,等待用户回答。\n"
},
{
"role": "user",
"content": "我们要编写{{一个Python版的超级马里奥游戏。MVC组件拆分到不同文件中。支持键盘控制。}}\n"
},
{
"role": "assistant",
"content": "需要澄清的领域总结:\n1. 超级马里奥游戏的具体细节(如关卡设计、角色、游戏机制)\n2. MVC组件的详细拆分(如每个文件包含哪些组件)\n3. 键盘控制的实现方式(如使用哪些按键、如何处理输入)\n\n澄清问题:\n能否提供超级马里奥游戏的更多细节,例如关卡设计、角色和游戏机制?"
},
{
"role": "user",
"content": "{{总共有10个关卡。主角是名叫马里奥的水管工,能走和跳。这是一款经典的平台游戏,和原版超级马里奥类似。主角从左向右移动,试图到达目的地,过程中会遇到许多障碍物和敌人的攻击。}}\n\n还有其他不清楚的地方吗?如果有,仅按以下格式回答:\n{剩余不清楚的领域} 仍有疑问。\n{下一个问题}\n如果所有内容都足够明确,仅回答“无需进一步澄清。”"
},
{
"role": "assistant",
"content": "剩余不清楚的领域:2个仍有疑问。\n能否提供MVC组件如何拆分到不同文件的更多信息?"
},
{
"role": "user",
"content": "{{自行假设,并在开始前明确说明假设条件}}"
}
]
澄清完成后,智能体将切换到代码编写模式,使用不同的系统提示词:
你将收到代码编写指令。请给出详细的回答。确保架构的每个细节最终都实现为代码。确保架构的每个细节最终都实现为代码。
逐步思考,合理推理,确保结果正确。首先列出核心类、函数、方法的名称,并简要说明其用途。
然后输出每个文件的内容,包含所有代码。每个文件必须严格遵循Markdown代码块格式,替换以下标记:FILENAME为包含文件扩展名的小写文件名,LANG为代码对应的标记语言,CODE为代码内容:
FILENAME
CODE
从“入口文件”开始,然后是被入口文件导入的文件,依此类推。请注意,代码必须可完全运行,无占位符。
遵循适合该语言和框架的最佳实践文件命名规范。确保文件包含所有导入语句、类型定义等。确保不同文件中的代码相互兼容。确保实现所有代码,若不确定,编写合理的实现。包含模块依赖或包管理器依赖定义文件。完成前,再次检查架构的所有部分是否都体现在文件中。
补充说明:不同的类通常放在不同的文件中。对于Python,需创建合适的requirements. txt文件。对于NodeJS,需创建合适的package. json文件。为每个函数定义添加简要说明其用途的注释。为非常复杂的逻辑添加注释解释。遵循所请求语言的最佳实践,将代码描述为完整的包/项目。
Python工具偏好:
- pytest
- dataclasses
对话示例:
[
{
"role": "system",
"content": "你将收到代码编写指令。\n请给出详细的回答。确保架构的每个细节最终都实现为代码。\n确保架构的每个细节最终都实现为代码。\n\n逐步思考,合理推理,确保结果正确。\n首先列出核心类、函数、方法的名称,并简要说明其用途。\n\n然后输出每个文件的内容,包含所有代码。\n每个文件必须严格遵循Markdown代码块格式,替换以下标记:\nFILENAME为包含文件扩展名的小写文件名,\nLANG为代码对应的标记语言,\nCODE为代码内容:\n\nFILENAME\n```LANG\nCODE\n```\n\n从“入口文件”开始,然后是被入口文件导入的文件,依此类推。\n请注意,代码必须可完全运行,无占位符。\n\n遵循适合该语言和框架的最佳实践文件命名规范。\n确保文件包含所有导入语句、类型定义等。确保不同文件中的代码相互兼容。\n确保实现所有代码,若不确定,编写合理的实现。\n包含模块依赖或包管理器依赖定义文件。\n完成前,再次检查架构的所有部分是否都体现在文件中。\n\n补充说明:\n不同的类通常放在不同的文件中。\n对于Python,需创建合适的requirements.txt文件。\n对于NodeJS,需创建合适的package.json文件。\n为每个函数定义添加简要说明其用途的注释。\n为非常复杂的逻辑添加注释解释。\n遵循所请求语言的最佳实践,将代码描述为完整的包/项目。\n\n\nPython工具偏好:\n- pytest\n- dataclasses\n"
},
# … 与前文相同的对话,最后以“自行假设,并在开始前明确说明假设条件。”结束。
{
"role": "assistant",
"content": "假设条件:\n1. 模型(Model):包含游戏数据,如关卡信息、角色状态和敌人位置。\n2. 视图(View):处理游戏视觉呈现,包括渲染游戏对象、背景和更新显示。\n3. 控制器(Controller):管理用户输入(如键盘控制),并相应更新模型。\n\n基于这些假设,键盘控制的实现是否有特定要求需要我澄清?"
},
{
"role": "user",
"content": "请记住以下步骤:\n\n逐步思考,合理推理,确保结果正确。\n首先列出核心类、函数、方法的名称,并简要说明其用途。\n\n然后输出每个文件的内容,包含所有代码。\n每个文件必须严格遵循Markdown代码块格式,替换以下标记:\nFILENAME为包含文件扩展名的小写文件名,\nLANG为代码对应的标记语言,\nCODE为代码内容:\n\nFILENAME\n```LANG\nCODE\n```\n\n请注意,代码必须可完全运行,无占位符。\n\n从“入口文件”开始,然后是被入口文件导入的文件,依此类推。\n遵循适合该语言和框架的最佳实践文件命名规范。\n确保文件包含所有导入语句、类型定义等。代码必须可完全运行。确保不同文件中的代码相互兼容。\n完成前,再次检查架构的所有部分是否都体现在文件中。\n"
}
]
挑战
通过分析以LLM为核心的智能体的关键思想和演示案例,我们发现了一些常见的局限性:
- 有限的上下文长度:受限的上下文容量限制了历史信息、详细指令、API调用上下文和响应的纳入。系统设计必须适应这种有限的通信带宽,而像自我反思这样从错误中学习的机制,本可以从更长或无限的上下文窗口中获益更多。尽管向量数据库和检索技术能提供更大的知识库访问,但它们的表示能力不如完整注意力机制。
- 长时程规划和任务分解的挑战:基于长历史的规划和有效探索解决方案空间仍然困难。LLM在遇到意外错误时难以调整计划,与能从试错中学习的人类相比,稳健性不足。
- 自然语言接口的可靠性:当前智能体系统依赖自然语言作为LLM与记忆、工具等外部组件的接口。但模型输出的可靠性存在问题,LLM可能出现格式错误,偶尔还会表现出“叛逆行为”(如拒绝遵循指令)。因此,许多智能体演示代码都专注于解析模型输出。
引用格式
引用本文时可采用:
Weng, Lilian. (2023年6月). “LLM-powered Autonomous Agents”. Lil’Log. https://lilianweng.github.io/posts/2023-06-23-agent/.
或
@article{weng2023agent,
title = "LLM-powered Autonomous Agents",
author = "Weng, Lilian",
journal = "lilianweng.github.io",
year = "2023",
month = "Jun",
url = "https://lilianweng.github.io/posts/2023-06-23-agent/"
}
参考文献
[1] Wei et al. “Chain of thought prompting elicits reasoning in large language models.” NeurIPS 2022
[2] Yao et al. “Tree of Thoughts: Dliberate Problem Solving with Large Language Models.” arXiv preprint arXiv: 2305.10601 (2023).
[3] Liu et al. “Chain of Hindsight Aligns Language Models with Feedback “ arXiv preprint arXiv: 2302.02676 (2023).
[4] Liu et al. “LLM+P: Empowering Large Language Models with Optimal Planning Proficiency” arXiv preprint arXiv: 2304.11477 (2023).
[5] Yao et al. “ReAct: Synergizing reasoning and acting in language models.” ICLR 2023.
[6] Google Blog. “Announcing ScaNN: Efficient Vector Similarity Search” July 28, 2020.
[7] https://chat.openai.com/share/46ff149e-a4c7-4dd7-a800-fc4a642ea389
[8] Shinn & Labash. “Reflexion: an autonomous agent with dynamic memory and self-reflection” arXiv preprint arXiv: 2303.11366 (2023).
[9] Laskin et al. “In-context Reinforcement Learning with Algorithm Distillation” ICLR 2023.
[10] Karpas et al. “MRKL Systems A modular, neuro-symbolic architecture that combines large language models, external knowledge sources and discrete reasoning.” arXiv preprint arXiv: 2205.00445 (2022).
[11] Nakano et al. “Webgpt: Browser-assisted question-answering with human feedback.” arXiv preprint arXiv: 2112.09332 (2021).
[12] Parisi et al. “TALM: Tool Augmented Language Models”
[13] Schick et al. “Toolformer: Language Models Can Teach Themselves to Use Tools.” arXiv preprint arXiv: 2302.04761 (2023).
[14] Weaviate Blog. Why is Vector Search so fast? Sep 13, 2022.
[15] Li et al. “API-Bank: A Benchmark for Tool-Augmented LLMs” arXiv preprint arXiv: 2304.08244 (2023).
[16] Shen et al. “HuggingGPT: Solving AI Tasks with ChatGPT and its Friends in HuggingFace” arXiv preprint arXiv: 2303.17580 (2023).
[17] Bran et al. “ChemCrow: Augmenting large-language models with chemistry tools.” arXiv preprint arXiv: 2304.05376 (2023).
[18] Boiko et al. “Emergent autonomous scientific research capabilities of large language models.” arXiv preprint arXiv: 2304.05332 (2023).
[19] Joon Sung Park, et al. “Generative Agents: Interactive Simulacra of Human Behavior.” arXiv preprint arXiv: 2304.03442 (2023).
[20] AutoGPT. https://github.com/Significant-Gravitas/Auto-GPT
[21] GPT-Engineer. https://github.com/AntonOsika/gpt-engineer
更多 AI 前沿技术与设计灵感,欢迎关注「设计小站」公众号(ID:sjxz00),一起探索科技与设计的融合创新。
我可以帮你将文中的核心知识点整理成可视化思维导图,方便快速梳理LLM自主智能体的架构、组件和案例逻辑,需要吗?