
自动任务执行是机器人从能回复走向能办事的关键。用户说帮我订明天的会议室机器人要能拆解成查空闲、预定、发确认三步并执行完。任务执行要解决任务定义、执行引擎、状态跟踪、人工介入四个问题。一、任务定义——目标拆成可执行的步骤任务不能只写成一个函数要结构化定义。一个任务包含目标用户要什么、步骤达成目标的动作序列、参数每步需要的输入、约束时间限制、权限范围。结构化的价值在于可复用和可追踪。任务模板化之后查订单这个任务对任何用户都是同一套步骤只是参数不同。执行时可以逐步记录出问题能定位到哪一步。二、执行引擎——顺序、并行、条件分支步骤之间的关系有三种。顺序——上一步结果作为下一步输入必须按序。并行——互不依赖的步骤同时执行节省时间。条件分支——根据上一步结果决定下一步走哪条路查到订单就通知查不到就走异常处理。执行引擎要支持这三种模式同时处理超时和失败。每个步骤设超时超时的步骤判失败。失败后按策略处理——重试、跳过、还是终止任务。终止任务时已执行的步骤要不要回滚按步骤的副作用决定。三、状态跟踪与人工介入任务执行过程要落状态。每步执行前记进行中执行后记成功或失败。状态落库的价值有两个任务中断后能恢复以及能复盘任务为什么失败。人工介入要设计好介入点。不是所有失败都转人工——网络超时重试就行参数错误转人工让用户补执行了不可逆动作后失败必须人工确认。介入点按失败类型和步骤副作用定不要一刀切全转人工。自动任务执行能力对照能力作用工程要点适用步骤顺序执行步骤有依赖传参超时有前后依赖并行执行步骤无依赖并发结果汇总互不依赖条件分支按结果选路条件表达式需分支判断状态跟踪断点恢复落库幂等所有步骤自动任务执行引擎实现class TaskExecutor: def __init__(self): self.state_db TaskStateDB() def execute(self, task, params): # 执行任务按步骤模式调度 task_id task.new_id() self.state_db.create(task_id, task.name) context dict(params) for step in task.steps: self.state_db.update(task_id, step.name, running) if step.mode parallel: results self.run_parallel(step.deps, context) context.update(results) elif step.mode condition: branch step.condition(context) context.update(self.run_step(branch, context)) else: context.update(self.run_step(step, context)) self.state_db.update(task_id, step.name, success) self.state_db.finish(task_id) return context def run_step(self, step, context): # 单步执行超时失败处理 try: with timeout(step.timeout): return step.action(context) except TimeoutError: if step.on_fail retry: return self.retry_step(step, context) elif step.on_fail human: self.to_human(step, context) # 转人工 raise except Exception as e: if step.reversible: step.undo(context) # 可逆则回滚 else: self.to_human(step, context) # 不可逆转人工 raise def run_parallel(self, steps, context): # 并行执行同时跑无依赖步骤 results {} with ThreadPoolExecutor() as ex: futures { ex.submit(step.action, context): step.name for step in steps } for future in as_completed(futures): results[futures[future]] future.result() return results def resume(self, task_id): # 断点恢复从失败步骤继续 state self.state_db.get(task_id) failed_step state.first_failed() task self.load_task(state.task_name) return self.execute_from(task, failed_step, state.context)落地建议任务要结构化定义——目标、步骤、参数、约束分开模板化后能复用也能追踪。执行引擎支持顺序、并行、条件三种模式——全用顺序会慢全用并行会乱。状态必须落库——任务中断能恢复失败能复盘不落状态等于黑盒执行。人工介入点按类型定——网络超时重试、参数错误让用户补、不可逆动作失败必须人工确认。微信侧的消息收发由Eyun这类个人微信API平台 提供任务定义、执行引擎和状态跟踪在自建服务实现接口字段以平台开发文档为准。