零基础学 Agent:规划能力——让 Agent 自己把事情做完 第 5 期

发布时间:2026/7/9 22:43:59

零基础学 Agent:规划能力——让 Agent 自己把事情做完 第 5 期 大家好我是AI淇橦学。上期我们做了两件大事接入了智谱API给Agent装上了真正的AI大脑建立了客户知识库智谱能理解「南山区那家传感器公司」这种模糊描述找到正确客户。可说实话做完之后我发现一个挺尴尬的问题每次只能处理一个客户处理完才能处理下一个。假设你今天要给5个客户出报价单——你得跑5次程序每次输入客户描述、等智谱判断、确认、输入产品信息……重复5遍。如果是20个客户就是20遍。这期我们来彻底解决这个问题给Agent加上规划能力让它自己读取批量任务、制定执行计划、逐个处理完毕。做完这期你会得到准备一份批量任务清单列好客户描述和产品信息Agent读取清单后智谱自主分析每个任务、匹配客户、制定执行计划你确认计划后Agent逐个处理实时显示进度全部完成后生成汇总报告一、没有规划能力是什么体验先感受一下为什么规划能力这么重要。现在的程序处理5个客户是这样的第1次python agent.py → 输入描述 → 等智谱判断 → 确认 → 输入产品信息 → 完成第2次python agent.py → 输入描述 → 等智谱判断 → 确认 → 输入产品信息 → 完成第3次第5次重复以上步骤...你等于是在「推着Agent走」——每一步都需要你触发。有了规划能力之后是这样的python agent.py --batch 批量任务.json 智谱正在分析批量任务制定执行计划... 智谱制定的执行计划 [1/3] 深圳科技有限公司智谱置信度95%产品工业传感器套件 XS-2000B × 1报价¥58,000.00元智谱备注客户偏好传感器套件价格敏感建议确认交货期[2/3] 上海贸易集团智谱置信度92%产品基础套件 XS-1000 × 10报价¥32,000.00元智谱备注批量采购客户需开增值税发票注意备注说明[3/3] 北京智能装备公司智谱置信度88%产品高精度控制套件 XS-4000 × 1报价¥125,000.00元智谱备注客户注重稳定性预算充足可适当强调售后服务共3个任务智谱已完成分析。确认执行(y/n)你y[1/3] 处理中深圳科技有限公司... ✅ 完成[2/3] 处理中上海贸易集团... ✅ 完成[3/3] 处理中北京智能装备公司... ✅ 完成✅ 全部完成汇总报告已生成output/批量报价汇总_20250615.txt你说了一次目标智谱自己分析、自己规划、自己执行。而且注意计划里多了一行「智谱备注」——这是真正的AI规划才有的东西它在分析每个任务时结合客户历史偏好给出了提示不是死板的字段组装。坦白说看完这个输出我觉得效率提升相当明显。二、这期智谱具体做什么在规划能力里智谱api参与两个关键环节环节一批量客户匹配把所有任务的customer_keyword一次性发给智谱让它统一判断每个关键词对应哪个客户同时给出置信度和匹配理由。这比上期一个一个搜索更高效智谱还能发现任务之间的关联比如两个任务描述的是同一个客户。环节二执行计划分析每个任务匹配到客户后智谱结合客户资料行业、备注、历史偏好分析这个任务生成一条「智谱备注」——比如发现客户历史上要求开增值税发票就会在计划里提醒你。这是固定逻辑做不到的只有真正理解客户资料的AI才能做。三、目标漂移批量操作最危险的问题在讲实操之前必须先说清楚批量场景特有的风险目标漂移。⚠️什么是目标漂移你告诉Agent做A它做着做着变成做B了——没有报错反而悄悄偏离了目标去做了一件「相关但你没要求」的事。在我们的报价单场景里目标漂移可能是这样的你说「帮我批量生成这3份报价单」智谱实际做的生成了报价单还顺手分析了每个客户的付款风险还建议你修改某份报价单的金额……结果报价单生成了但智谱做了一堆你没要求的事甚至可能修改了客户资料文件。批量操作里目标漂移的后果被无限放大——出错的不仅仅是一份文件可能是全部。防范方法给智谱的prompt加明确边界「只做客户匹配和计划分析不修改任何文件不做报价单之外的建议」执行前展示完整计划让你确认智谱列出它打算做什么你看完再决定是否执行所有写入只在output文件夹代码层面限制写入范围不依赖智谱自觉这三条在下面的实操里都会体现。说实话这些安全机制比功能本身更重要——批量场景一旦出错代价是很大的。四、实操开始给Agent加上规划能力在第3、4期的基础上继续不需要新建项目。这期的实操分4步准备批量任务清单用Codex生成planner.py智谱做计划分析修改主程序支持批量模式运行测试看到智谱自主规划的完整流程第一步准备批量任务清单在sales-agent文件夹里新建文件批量任务.json复制以下内容{task_name: 6月第三周报价批次,created_date: 2025-06-15,instructions: 只生成报价单不修改任何客户资料文件不做报价单之外的建议,tasks: [{customer_keyword: 深圳科技,product_name: 工业传感器套件,product_model: XS-2000B,quantity: 1,unit_price: 58000,notes: 含安装调试服务交货期15天},{customer_keyword: 上海贸易,product_name: 基础套件,product_model: XS-1000,quantity: 10,unit_price: 3200,notes: 批量采购需开增值税发票},{customer_keyword: 北京智能,product_name: 高精度控制套件,product_model: XS-4000,quantity: 1,unit_price: 125000,notes: 含一年免费维保}]} 注意instructions字段——这是给智谱的约束指令明确告诉它只能做什么、不能做什么是防止目标漂移的第一道防线。你的文件夹结构现在应该是1sales-agent/├── templates/│ └── 报价单模板.docx├── output/├── customers/│ └── 客户资料.json├── config.json├── agent.py├── llm.py├── memory.py└── 批量任务.json ← 新增第二步用Codex生成planner.py打开Codex发送以下提示词 发给Codex的提示词直接复制使用我在做一个销售报价单Agent需要一个规划模块文件名planner.py。已有llm.py提供ask_zhipu、ask_zhipu_json和memory.py提供search_customer、load_config。【需要实现的功能】1. load_batch_tasks(file_path)- 读取批量任务JSON文件- 验证格式必须有tasks数组每个task必须有customer_keyword- 返回{task_name: ..., instructions: ..., tasks: [...]}- 打印读取到X个任务2. make_plan(batch_data, customers)- 这是核心函数用智谱来分析所有任务并制定执行计划- 参数batch_data是load_batch_tasks返回的完整数据customers是客户列表- 实现步骤步骤A用智谱批量匹配客户构造以下prompt发给ask_zhipu_json「以下是客户列表{把每个客户格式化为编号|公司名|联系人|行业|备注}以下是需要处理的任务列表{把每个任务格式化为序号|customer_keyword|product_name|quantity|unit_price}约束指令{batch_data[instructions]}请为每个任务找到最匹配的客户并分析任务。返回JSON数组每个元素格式{task_index: 0,matched_customer_id: C001,confidence: 0.95,match_reason: 关键词深圳科技与公司名高度匹配,total_price: 58000.0,zhipu_note: 该客户偏好传感器套件对价格敏感建议在备注中说明交货期}如果某个任务找不到匹配客户matched_customer_id返回nullconfidence返回0」步骤B根据智谱的返回结果组装完整的执行计划列表每个计划项包含- task_index、customer完整客户对象、confidence、match_reason- product_name、product_model、quantity、unit_price、total_price格式化为「¥XX,XXX.00元」- notes、zhipu_note- statusconfidence 0.6时为ready否则为needs_confirm步骤C打印完整的计划预览格式如下 智谱制定的执行计划 [1/3] 深圳科技有限公司置信度95%产品工业传感器套件 XS-2000B × 1报价¥58,000.00元智谱备注该客户偏好传感器套件对价格敏感[2/3] ...共X个任务就绪X个待确认X个- 返回完整的计划列表3. execute_plan(plan, template_path, output_folder, config)- 遍历执行计划逐个处理- 跳过status为needs_confirm的任务在执行前已提示用户- 对每个ready任务a. 调用read_file读取模板每次重新读取不复用文档对象b. 组装字段数据客户名称、联系人、联系电话 → 来自customer对象报价日期 → 今天日期从config读取格式销售员 → config[salesperson_name]产品名称、产品型号、数量、单价、总金额、备注 → 来自plan项c. 调用write_content填写内容d. 调用save_file另存为新文件报价单_{客户名称}_{日期}.docxe. 打印[X/总数] 处理中客户名... ✅ 完成 / ❌ 失败原因- 每个任务记录结果成功/失败/跳过/原因- 返回执行结果列表4. generate_summary_report(plan, results, output_folder, task_name)- 生成文本汇总报告保存到output文件夹- 文件名批量报价汇总_{task_name}_{日期}.txt- 报告内容任务名、执行时间、成功/失败/跳过数量、每条任务结果- 打印 汇总报告已生成【技术要求】- 从llm.py导入ask_zhipu_json- 从agent.py导入read_file、write_content、save_file- 从memory.py导入load_config、save_quote_history- 代码有清晰的中文注释- 每个函数要有错误处理单个任务失败不影响其他任务- 所有写入只能在output文件夹内不能修改templates和customers里的文件Codex自动生成并写入planner.py。从它的操作来看已经顺利完成并按照预期实现了。第三步修改主程序支持批量模式打开Codex对话框发送以下提示词修改agent.py 发给Codex的提示词直接复制使用请帮我修改agent.py的main()函数让程序支持两种运行方式。【方式一单个客户模式保留第4期功能不改动】直接运行python agent.py进入交互模式- 加载配置和客户数据- 提示输入客户描述调用智谱匹配客户- 确认后手动输入产品信息生成单份报价单【方式二批量模式新增】运行python agent.py --batch 批量任务.json进入批量模式1. 加载配置和客户数据2. 调用load_batch_tasks读取任务文件3. 打印提醒「⚠️ 批量模式将生成X份报价单所有文件保存到output文件夹原始文件不会被修改」4. 打印「 智谱正在分析批量任务制定执行计划...」5. 调用make_plan让智谱分析任务并生成计划这步会调用智谱API6. 如果计划中有needs_confirm的任务打印「⚠️ 以下任务智谱匹配置信度较低将被跳过[列出任务]」7. 提示用户确认「以上计划是否正确确认后开始执行 (y/n)」8. 用户输入y后调用execute_plan批量执行9. 执行完成后调用generate_summary_report生成汇总报告【技术要求】- 用sys.argv或argparse识别--batch参数- 从planner.py导入load_batch_tasks、make_plan、execute_plan、generate_summary_report- 代码有清晰的中文注释第四步运行测试先确认单个客户模式没被影响1python agent.py跑一遍确认第4期的智谱语义搜索功能还正常工作。再运行批量模式1python agent.py --batch 批量任务.json你会看到智谱真正参与规划的完整过程 Agent启动中...✅ 已加载配置✅ 已读取3个客户 读取批量任务批量任务.json✅ 读取到3个任务⚠️ 批量模式将生成3份报价单所有文件保存到output原始文件不会被修改 智谱正在分析批量任务制定执行计划... 智谱制定的执行计划 [1/3] 深圳科技有限公司置信度95%产品工业传感器套件 XS-2000B × 1报价¥58,000.00元备注含安装调试服务交货期15天智谱备注客户偏好传感器套件对价格敏感建议确认交货期是否满足需求[2/3] 上海贸易集团置信度92%产品基础套件 XS-1000 × 10报价¥32,000.00元备注批量采购需开增值税发票智谱备注批量采购客户注意备注中已说明需开增值税发票[3/3] 北京智能装备公司置信度88%产品高精度控制套件 XS-4000 × 1报价¥125,000.00元备注含一年免费维保智谱备注客户注重稳定性和售后服务一年免费维保是重要卖点共3个任务就绪3个待确认0个以上计划是否正确确认后开始执行 (y/n)y 开始执行批量任务...[1/3] 处理中深圳科技有限公司...✅ 完成 → output/报价单_深圳科技有限公司_20250615.docx[2/3] 处理中上海贸易集团...✅ 完成 → output/报价单_上海贸易集团_20250615.docx[3/3] 处理中北京智能装备公司...✅ 完成 → output/报价单_北京智能装备公司_20250615.docx 汇总报告已生成output/批量报价汇总_6月第三周报价批次_20250615.txt✅ 全部完成成功3份失败0份注意看「智谱备注」这一行——这是真正的AI规划才有的东西。智谱读懂了每个客户的历史备注结合当前任务给出了针对性的提示这是写死的逻辑规则做不到的。第五步验收结果功能验收单个客户模式仍然正常第4期功能没被破坏批量模式能正确读取批量任务.json计划预览中每个任务都有智谱的置信度和备注用户输入n时程序停止不执行任何操作output文件夹里生成了3份报价单内容正确汇总报告存在包含每份报价单的处理状态templates/和customers/里的原始文件未被修改加一个低置信度测试把批量任务.json里一个任务的customer_keyword改成「火星科技公司」不存在的客户重新运行批量模式。期望结果智谱返回这个任务的confidence为0matched_customer_id为null计划预览里这条任务显示「待确认」执行时这条任务被跳过汇总报告里显示「跳过1份原因智谱未找到匹配客户」五、遇到问题怎么办情况一make_plan里智谱返回的JSON解析失败在Codex对话框里说「planner.py里make_plan调用ask_zhipu_json时解析失败请检查发给智谱的prompt在末尾加上更强的约束『只返回JSON数组本身不要有任何解释文字、不要有markdown代码块标记不要有json』」情况二智谱计划里所有任务都是needs_confirm置信度都很低在Codex对话框里说「make_plan里发给智谱的客户列表格式需要优化智谱无法正确匹配客户请修改客户信息的格式化方式确保每个客户的公司名称、行业、联系人都清楚呈现在prompt里」情况三某份报价单打开是空白的在Codex对话框里说「output/报价单_xxx.docx打开是空白请检查execute_plan里是否每次都重新调用了read_file读取模板确认没有复用同一个文档对象——每份报价单必须从干净的模板开始不能继承上一份的内容」情况四智谱API调用太慢批量任务等很久这是正常现象。智谱分析3个任务大约需要3-8秒。如果任务很多比如20个可以在Codex对话框里说「请优化make_plan把所有任务一次性发给智谱分析而不是逐个调用API——现在是1次API调用分析所有任务不要改成多次调用」六、这期做了什么——小结这期你给Agent装上了真正的AI规划能力planner.py智谱批量分析任务、匹配客户、生成带备注的执行计划agent.py升级支持单个模式和批量模式智谱的参与从「搜索一个客户」升级到「分析一批任务、给出完整规划」现在的文件结构sales-agent/├── templates/├── output/├── customers/├── config.json├── agent.py ← 工具 主程序第3期起├── llm.py ← 智谱API封装第4期加入├── memory.py ← 记忆 单客户搜索第4期├── planner.py ← 智谱规划 批量执行本期新增└── 批量任务.json坦白说做完这个功能之后我觉得效率提升相当明显。以前要跑5次程序现在一次就能批量处理完而且还有汇总报告省了不少事。现在Agent能批量处理任务了但还有一个问题没解决智谱和程序都说「全部成功」但填进报价单的内容真的是对的吗金额有没有填错位置客户名称有没有张冠李戴下期我们来解决这个问题——让智谱在保存每份文件之前先自己检查结果是否正确。下期预告Agent说「全部完成」不代表全部正确。第6期我们给它加上智谱自检——在保存前让智谱审查每份报价单判断字段有没有遗漏、内容有没有填错位置。我们还会故意制造两种错误看智谱能不能发现并拦截。思考题你看了智谱给每个任务写的备注有没有觉得它的分析准确还是有什么明显的错误评论告诉我我会在下期开头汇总。关注公众号「AI淇橦学」和AI一起成长。有问题或建议后台留言即可。

相关新闻