[!TIP] 目标:从单步对话进化为“计划-模拟-执行”的闭环,并引入基于 YAML 的 DAG 异步编排。
1. 从“聊天”到“执行”:AX (Architect-Executive) 范式
Agent 与普通 Chatbot 的分水岭在于:它是否能将模糊的目标拆解为可操作的步骤。在 VISAGENT 中,我们实现了一套 AX Planner 逻辑:
- Architect (架构师):接收需求,输出
TODO.json。此时严禁执行,只准规划。 - Simulation (心理演操):在执行前,让另一个“安全专家”角色对计划进行风险评估。
- Executive (执行官):逐一调用
execute_step完成任务。
这种“先想后做”的机制,通过简单的 Prompt 约束即可在任意 CLI 上实现:
# AX_PLANNING_MODE 核心指令
plan_prompt = (
"You are a specialized Task Architect. Output ONLY valid JSON.\n"
"Schema: { 'goal': '...', 'steps': [ {'id': 1, 'desc': '...', 'type': 'EXECUTION'} ] }"
)
2. 线性落后:为什么需要 DAG?
早期的 AX Planner 是线性的。但现实中,复杂的工程任务往往是拓扑结构:有的步骤可以并行,有的则必须等待前序结果。这就是我们引入 Flow Architect 的原因。
3. 编排的核心:YAML-based DAG
我们设计了一套极简的 YAML 编排协议。不再依赖 LangGraph 等重型框架,而是直接用 Python 驱动:
id: "deploy_service_v1"
steps:
- id: "build_docker"
role: "builder"
desc: "构建镜像"
- id: "health_check"
depends_on: ["build_docker"] # 声明依赖,构建 DAG
skill: "web_fetcher"
desc: "检查部署状态"
实现细节:
- 状态持久化:每个 Flow 都有对应的
.state.json。即使进程中断,系统重启后也能通过读取状态实现“断点续传”。 - L3 Context 传递:前序节点的输出会自动追加到
l3_context中,作为后续节点的推演依据。
4. 影子反思 (Shadow Reflection)
为了增强“手搓”系统的稳定性,我们在执行每一步前增加了 影子反思 机制:
reflection_prompt = f"You are about to execute: '{desc}'. Think about risks. Reply 'SAFE' or 'WARNING'."
reflection_res = self.engine.invoke(reflection_prompt)
if "WARNING" in reflection_res:
# 自动熔断或介入
这种“自我质疑”的逻辑,让 Agent 在面对写操作时具备了难得的审慎感。
总结
从线性到图论,是 Agent 从“实验玩具”走向“工程工具”的必经之路。通过简单的 YAML 定义和状态持久化,我们在没有引入复杂依赖的前提下,实现了长周期任务的可靠调度。
下一篇:如何让你的 Agent “看见”并理解多模态输入,以及动态技能树的设计。