【Agent从入门到实践】11 执行模块:Agent如何“完成动作”
各位AI入门的小伙伴们,上一节咱们搞定了决策模块——Agent知道“该做什么”了对吧?就像咱们决定好“去A店买奶茶”,接下来是不是得起身、走路、下单、拿奶茶?这就是执行模块的活儿!今天咱们就聊聊Agent的“手脚”——执行模块到底是怎么把“决策”变成“实际动作”的?还是老规矩,大白话+代码实战,全程不搞复杂概念,看完你就懂Agent是怎么和外部世界互动的~“翻译+执行+反馈”。翻译:把决策指令翻译
文章目录
目前国内还是很缺AI人才的,希望更多人能真正加入到AI行业,共同促进行业进步。想要系统学习AI知识的朋友可以看看我的教程 http://blog.csdn.net/jiangjunshow,教程通俗易懂,风趣幽默,从深度学习基础原理到各领域实战应用都有讲解。
前言
各位AI入门的小伙伴们,上一节咱们搞定了决策模块——Agent知道“该做什么”了对吧?就像咱们决定好“去A店买奶茶”,接下来是不是得起身、走路、下单、拿奶茶?这就是执行模块的活儿!
今天咱们就聊聊Agent的“手脚”——执行模块到底是怎么把“决策”变成“实际动作”的?还是老规矩,大白话+代码实战,全程不搞复杂概念,看完你就懂Agent是怎么和外部世界互动的~
一、先搞懂:执行模块的本质——“把想法变成行动”
咱们先举个生活例子:你让孩子“把玩具放进收纳箱”,孩子的动作是:
- 走到玩具旁边(移动动作);
- 弯腰拿起玩具(抓取动作);
- 走到收纳箱前(移动动作);
- 把玩具放进箱子(放置动作)。
这一系列动作,就是“执行”——把“收纳玩具”这个决策,变成具体的身体动作。Agent的执行模块也是一样的逻辑!
它的核心作用超简单:
- 接收决策模块传来的“指令”(比如“去A店买三分糖珍珠奶茶”);
- 把指令拆分成“能被外部系统理解的具体动作”(比如“打开导航APP→搜索A店→规划路线→步行到A店→向店员下单→接收奶茶”);
- 执行这些动作,同时接收外部系统的“反馈”(比如“导航显示已到达A店”“店员说奶茶做好了”);
- 把反馈传给决策模块,确认任务是否完成(比如“奶茶拿到了,任务完成!”)。
用一句话总结:执行模块就是Agent的“执行者”,负责把“决策指令”翻译成“实际动作”,并和外部世界打交道 。
二、执行模块的3个关键步骤(通俗版拆解)
还是用“Agent帮你买奶茶”的场景,一步步看执行模块是怎么干活的:
步骤1:指令拆解(把“大目标”拆成“小动作”)
决策模块给出的指令是“去A店买三分糖珍珠奶茶”——这个指令太笼统了,Agent没法直接执行,得拆成“一步步能落地的小动作”,就像咱们写“购物清单”一样。
拆解后的动作序列:
- 打开手机导航APP(调用导航系统);
- 输入“A店”关键词搜索(操作导航APP);
- 选择“步行路线”并开始导航(获取导航指引);
- 按照导航路线步行到A店门口(移动动作,接收位置反馈);
- 走进店里,对店员说“我要一杯三分糖加珍珠的奶茶”(语音输出/文字输出);
- 支付18元(调用支付系统);
- 接收店员递来的奶茶(感知模块确认“拿到奶茶”);
- 向决策模块反馈“任务完成”(结束执行)。
你看,拆解后的每个动作都很具体,而且每个动作都对应一个“外部交互对象”(导航APP、店员、支付系统)——这就是执行模块的核心:把抽象指令拆成“可交互、可验证”的具体动作 。
步骤2:动作执行(和外部系统“打交道”)
拆解完动作,就该“动手”了!Agent的执行模块不是自己“真的走路、说话”,而是通过“调用外部系统接口”来完成动作——就像咱们用手机APP控制智能家居一样。
举几个例子:
- 动作“打开导航APP”:执行模块调用手机的“导航APP接口”,发送“启动导航”指令;
- 动作“搜索A店”:调用导航APP的“搜索接口”,发送“A店”关键词;
- 动作“支付18元”:调用支付系统的“支付接口”,发送“支付18元给A店”的指令;
- 动作“对店员说话”:调用语音合成模块,把文字“我要一杯三分糖加珍珠的奶茶”变成语音输出。
这里的关键是:Agent的执行动作,本质是“调用接口”——外部系统(APP、硬件、人)接收到接口指令后,执行相应操作,再把结果反馈给Agent 。
步骤3:反馈接收与纠错(没做好就“调整”)
执行动作的时候,可能会遇到“意外情况”——比如导航导错路、店员没听清需求、支付失败。这时候执行模块不能“一根筋”,得接收反馈并调整动作!
比如买奶茶时遇到的意外:
- 意外1:导航显示“已到达A店”,但实际是B店(位置反馈错误)→ 执行模块重新调用导航APP,再次搜索“A店”,确认路线后重新出发;
- 意外2:店员问“是全糖还是三分糖?”(没听清需求)→ 执行模块再次调用语音合成,重复“三分糖,谢谢”;
- 意外3:支付时显示“余额不足”(支付反馈失败)→ 执行模块把“支付失败”的反馈传给决策模块,让决策模块重新决策(比如换一家便宜的奶茶店)。
所以执行模块不只是“执行动作”,还得是“纠错小能手”——根据外部反馈调整动作,直到完成决策指令,或者告诉决策模块“搞不定,需要重新决策” 。
三、代码实战:写一个“奶茶选购Agent”的执行模块
光说不练假把式,咱们基于上一节的决策代码,继续写执行模块的Python代码——让Agent真的“执行”买奶茶的动作!
# 先复用上一节的决策模块代码(获取决策结果)
# 1. 定义目标和规则
target = {
"core": ["三分糖", "珍珠"],
"secondary": "price <= 20",
"bottom_line": "time <= 15"
}
# 2. 感知模块传来的现状
milk_tea_shops = [
{"name": "A店", "sugar": "三分糖", "topping": "珍珠", "price": 18, "time": 10, "address": "XX路123号"},
{"name": "B店", "sugar": "全糖", "topping": "珍珠", "price": 15, "time": 5, "address": "XX路456号"},
{"name": "C店", "sugar": "三分糖", "topping": "珍珠", "price": 22, "time": 8, "address": "XX路789号"}
]
# 3. 决策模块函数(上一节的代码)
def decision_module(shops, target):
best_choice = None
for shop in shops:
core_ok = all(req in [shop["sugar"], shop["topping"]] for req in target["core"])
if not core_ok:
continue
secondary_ok = shop["price"] <= int(target["secondary"].split(" ")[2])
if not secondary_ok:
continue
bottom_line_ok = shop["time"] <= int(target["bottom_line"].split(" ")[2])
if bottom_line_ok:
best_choice = shop
break
return best_choice
# 4. 执行模块核心代码(重点!)
class ExecutionModule:
def __init__(self):
# 模拟外部系统(导航、支付、语音)
self.navigation_app = NavigationApp()
self.payment_system = PaymentSystem()
self.voice_module = VoiceModule()
# 步骤1:拆解指令
def split_instruction(self, decision_result):
"""把决策结果拆成动作序列"""
shop_name = decision_result["name"]
shop_address = decision_result["address"]
order = f"一杯{decision_result['sugar']}加{decision_result['topping']}的奶茶"
price = decision_result["price"]
# 动作序列:按顺序执行
actions = [
{"type": "navigate", "address": shop_address, "desc": f"导航到{shop_name}"},
{"type": "speak", "content": order, "desc": "向店员下单"},
{"type": "pay", "amount": price, "desc": f"支付{price}元"},
{"type": "receive", "content": "奶茶", "desc": "接收奶茶"}
]
print(f"执行模块:已拆解动作序列:{[action['desc'] for action in actions]}")
return actions
# 步骤2:执行动作(调用外部系统)
def execute_action(self, action):
"""执行单个动作,返回执行结果"""
action_type = action["type"]
if action_type == "navigate":
# 调用导航APP
result = self.navigation_app.navigate(action["address"])
elif action_type == "speak":
# 调用语音模块
result = self.voice_module.speak(action["content"])
elif action_type == "pay":
# 调用支付系统
result = self.payment_system.pay(action["amount"])
elif action_type == "receive":
# 模拟接收物品(感知模块反馈)
result = {"success": True, "msg": f"成功接收{action['content']}"}
else:
result = {"success": False, "msg": "未知动作"}
return result
# 步骤3:执行完整动作序列(含纠错)
def execute_all(self, decision_result):
if not decision_result:
print("执行模块:没有决策结果,无法执行!")
return
# 拆解指令
actions = self.split_instruction(decision_result)
# 依次执行每个动作
for i, action in enumerate(actions):
print(f"\n执行第{i+1}个动作:{action['desc']}")
result = self.execute_action(action)
# 处理执行结果
if result["success"]:
print(f"动作执行成功:{result['msg']}")
else:
print(f"动作执行失败:{result['msg']}")
# 简单纠错:重试一次
print(f"尝试重试动作:{action['desc']}")
result = self.execute_action(action)
if result["success"]:
print(f"重试成功:{result['msg']}")
else:
print(f"重试失败:{result['msg']},终止执行,反馈给决策模块!")
return {"success": False, "msg": f"动作{action['desc']}执行失败"}
# 所有动作执行完成
return {"success": True, "msg": f"任务完成!成功买到{decision_result['sugar']}加{decision_result['topping']}的奶茶"}
# 模拟外部系统(导航APP、支付系统、语音模块)
class NavigationApp:
def navigate(self, address):
# 模拟导航:有10%概率导错路(用于测试纠错)
import random
if random.random() < 0.1:
return {"success": False, "msg": f"导航失败:未找到地址{address}"}
else:
return {"success": True, "msg": f"导航成功,已到达地址:{address}"}
class PaymentSystem:
def pay(self, amount):
# 模拟支付:有5%概率支付失败
import random
if random.random() < 0.05:
return {"success": False, "msg": f"支付失败:余额不足/网络异常"}
else:
return {"success": True, "msg": f"支付成功,金额:{amount}元"}
class VoiceModule:
def speak(self, content):
# 模拟语音输出:基本不会失败
return {"success": True, "msg": f"语音输出成功:{content}"}
# 主程序:决策→执行
if __name__ == "__main__":
# 1. 先决策
decision_result = decision_module(milk_tea_shops, target)
print(f"决策模块结果:{decision_result['name']}(地址:{decision_result['address']})")
# 2. 再执行
execution_module = ExecutionModule()
final_result = execution_module.execute_all(decision_result)
# 3. 输出最终结果
print(f"\n=== 最终执行结果 ===")
print(final_result["msg"])
运行这段代码,你会看到类似这样的输出(可能会遇到重试场景,因为加了随机失败概率):
决策模块结果:A店(地址:XX路123号)
执行模块:已拆解动作序列:['导航到A店', '向店员下单', '支付18元', '接收奶茶']
执行第1个动作:导航到A店
动作执行成功:导航成功,已到达地址:XX路123号
执行第2个动作:向店员下单
动作执行成功:语音输出成功:一杯三分糖加珍珠的奶茶
执行第3个动作:支付18元
动作执行成功:支付成功,金额:18元
执行第4个动作:接收奶茶
动作执行成功:成功接收奶茶
=== 最终执行结果 ===
任务完成!成功买到三分糖加珍珠的奶茶
这个代码完美还原了执行模块的核心逻辑:拆解指令→调用外部系统→接收反馈→纠错重试 。实际的Agent执行模块会更复杂(比如支持更多外部系统、更智能的纠错逻辑),但核心思路和这个代码完全一致!
四、执行模块的2个核心能力( Agent“执行力”的关键 )
为什么有的Agent“说到做到”,有的却“半途而废”?关键在于执行模块的这2个能力:
1. 接口适配能力(“能和所有外部系统打交道”)
Agent要执行动作,得能调用各种外部系统——比如手机APP、硬件设备(机器人、智能家居)、网页接口、甚至和人交互。这就要求执行模块有“接口适配能力”:
- 对于有明确接口的系统(比如导航APP的API、支付系统的接口):执行模块直接按照接口规范发送指令;
- 对于没有明确接口的系统(比如和人交互):执行模块通过“语音、文字、图像”等方式传递信息(比如语音合成、文字输出)。
就像咱们会用手机、会说话、会用电脑——只有能和各种“工具”打交道,才能完成复杂任务~
2. 容错纠错能力(“遇到问题不放弃”)
现实世界充满意外:网络断了、设备故障、对方没听懂——执行模块不能一遇到问题就罢工,得有“容错纠错能力”:
- 重试机制:比如支付失败,重试一次;
- 替代方案:比如导航导错路,换一个导航APP;
- 反馈机制:实在搞不定,及时告诉决策模块“需要重新决策”。
这就像咱们做事一样:遇到小问题就解决,解决不了就换个思路,而不是直接放弃~
五、总结:执行模块的核心是什么?
其实执行模块的核心很简单:“翻译+执行+反馈” 。
- 翻译:把决策指令翻译成具体的、可执行的动作;
- 执行:调用外部系统,把动作落地;
- 反馈:接收外部结果,纠错或确认完成。
到这里,Agent的“感知-决策-执行”三大核心模块就全部讲完了!咱们来回顾一下:
- 感知模块:Agent的“眼睛耳朵”——收集外部信息;
- 决策模块:Agent的“大脑”——思考该做什么;
- 执行模块:Agent的“手脚”——把想法变成行动。
这三个模块环环相扣,就像一个完整的“智能体”——能看、能想、能做!
如果觉得这篇文章好懂、实用,别忘了点赞、转发,让更多人一起入门AI~ 有任何问题,评论区留言交流呀!
更多推荐


所有评论(0)