#任务拆解

《智能体设计模式》第六章「规划模式」完成翻译,目前已翻译章节: 00 - 前言部分 01 - 第一章:提示链模式 02 - 第二章:路由模式 03 - 第三章:并行模式 04 - 第四章:反思模式 05 - 第五章:工具使用模式 06 - 第六章:规划模式 规划模式让智能体具备前瞻性思维能力,能够将复杂任务拆解为更小且可管理的步骤,并制定实现预期结果的策略。通过规划能力,智能体不再只是对眼前输入作出反应,而是能够自主规划从初始状态到目标状态的完整路径。这里为大家梳理几个关键要点: 1. 核心理念:从被动响应到主动规划 规划模式的核心在于建立「理解目标 → 制定计划 → 执行步骤 → 灵活调整」的智能流程,让智能体具备战略性、目标导向的执行能力。 - 传统模式的局限:基础智能体只能对眼前输入作出反应,缺乏处理复杂多步骤任务的能力,无法将高层次目标拆解为可执行的子任务。 - 规划模式的价值:智能体能够接收高层次目标并自主拆解为有序的执行步骤,在遇到阻碍时灵活调整路线,从而有效处理包含多个步骤和相互依赖的复杂任务。 2. 规划的关键特征 规划模式通过以下特征实现智能化的任务执行: - 目标驱动:接收高层次的目标声明(做什么)而非具体指令(如何做」,由智能体自主决定实现路径。 - 即时生成:计划不是预先存在的,而是根据当前状况和目标要求即时生成的。 - 灵活应变:初步计划只是出发点,智能体能够接纳新信息并在遇到阻碍时动态调整策略。 - 结构化分解:将复杂目标拆解为一系列更小、可执行的步骤或子目标,按逻辑顺序处理依赖关系。 3. 典型应用场景 规划模式在四大领域展现出核心价值: - 流程自动化:编排复杂工作流,如新员工入职流程,包括创建账户、分配培训、部门协调等有序子任务。 - 机器人与自主导航:进行状态空间遍历,生成从起始状态到目标状态的最优路径,同时遵守环境约束。 - 结构化信息整合:生成研究报告等复杂输出,规划包含信息收集、数据归纳、内容结构化、迭代打磨等阶段。 - 多步骤问题解决:制定并对系统化流程进行诊断、实施解决方案,并在必要时升级处理。 4. 实现框架与特点 - CrewAI:通过定义明确的智能体角色和任务,支持先规划后执行的工作流,适合结构化的多步骤任务。 - Google 深度研究:利用多步骤动态迭代流程,把用户提示拆解为研究计划,循环执行搜索与分析,生成带引用的结构化报告。 - OpenAI 深度研究接口:提供编程化控制能力,支持 MCP 协议连接私有知识库,展示完整的中间步骤(推理、搜索、代码执行)。 5. 使用时机与权衡 当任务复杂度超出单一操作范围时,应当使用规划模式,但需要权衡灵活性与可预测性: - 适用场景:任务需要多个相互依赖的步骤才能完成;「如何做」的方案需要探索而非已经明确;需要自动化处理复杂的工作流程;需要生成全面、综合的结果。 - 权衡考量:当问题的解决方法已经清楚且可重复时,固定流程比动态规划更有效;规划增加灵活性的同时也引入了不确定性;需要在自主性和可预测性之间找到平衡。 - 核心价值:将智能体从简单的被动响应者提升为战略性、目标导向的执行者,能够管理复杂流程并产出全面综合的结果。 点击项目链接 可双语对照阅读,跟踪最新翻译进展,也欢迎加入交流群一起阅读讨论、反馈问题或随个 Star ~
宝玉
11个月前
问:体验了一下 AI 编程,我发现这个编程能力受限于上下文的限制,对于大型项目的构建能力偏弱,不知道有没有什么好的方法能够解决这个问题呢? 答:编程能力确实受限于上下文的限制,但是使用 Cursor 这样的开发工具,有一些技巧可以让你在大型项目中,也能大幅提升效率。 核心是两点: 1. 将复杂任务拆分成小任务,每次只实现一个小任务 2. 每次交互选取最相关的上下文,让它可以照葫芦画瓢 既然我们知道大语言模型的上下文窗口长度是有限的,那么就需要最大化的利用好上下文。最简单有效的就是每次任务小一点,输入的代码和提示词少一点,这样就可以让模型在上下文窗口限制内很好的完成任务。 比如说我要让 Cursor 帮我实现一个爬虫,抓取某个网站的数据,要抓一级页面、二级页面、三级页面、四级页面。每一级页面还有很多细节。 如果我一次性要求 AI 去实现,那可能无法实现,或者完成的不好。但是我可以拆成若干小任务。 所以我第一步会要求 Cursor 帮我实现一个最基本的爬虫功能,能抓取网页、能解析网页内容,能保存内容到静态文件,这个任务 Cursor 能完成的很好。 第二步我要求 Cursor 帮我实现抓取首页,把页面的 HTML 结构发给它,让它能解析首页的内容成结构化的数据,并且保存到一个 sqlite 数据库。这个任务 Cursor 能完成代码,执行时可能会有点小问题,但是稍微修改就能正常运行。并且对代码细节进行半手动半AI辅助的完善。 第三步继续要求 Cursor 实现一个记录抓取位置的功能,让它可以中断后从上一次抓取位置继续。然后再完善优化代码。 第四步让它对去抓取二级页面,提供二级页面的结构给它,并且把之前优化好的抓取解析代码添加到上下文,让它去抓取二级页面。由于提供了优化好的代码参考,新的代码也会参考优化好的代码。 后面的步骤都是类似的,就是把之前写好的优化好的代码作为上下文,加上新的需求,让它去实现。 这样一步步下来,一个复杂的模块就完成了,而使用过程中也没有超出上下文长度。 所以不用担心上下文窗口长度的限制,也不用担心你的项目太大它不理解,核心是要把复杂任务拆成简单的任务,要一点点迭代,先优化好前面的代码,然后生成新的代码的时候参照前面优化好的代码。 同步发布于博客: