使用 pi-dynamic-workflows 构建 Meta-Agent 架构
使用 pi-dynamic-workflows 构建 Meta-Agent 架构
Meta-Agent是一个双层 Agent 架构, 它的核心思想是:让一个高级别的主 Agent(Meta-Agent)按照用户的意图,动态编写出专门解决当前任务的代码;然后由底层引擎去执行这段代码。这种模式彻底打破了传统工作流“人设计图纸、机器按图索骥”的静态模式,实现了工作流本身的自适应生成。
特点
- 极致的灵活性, 可以应千奇百怪的用户需求.
- 不确定性, AI 每次生成的代码可能有细微差别, 对于高频稳定的生产环境, 有做好应对方案, 比如增加自动纠错机制, 比如引入人机协同审批(Human-in-the-loop), 比如使用js Zod 对于流程个节点交界处进行强制数据验证, 如果不符合语气, 立即触发降级方案(Fallback)
完整代码
从下面的代码中, 可以学习到:
- 如何让大模型生成基于 @quintinshaw/pi-dynamic-workflows 插件的codemode的提示词, 其他插件也类似.
- 一个完整的生成js和执行js的全过程.
import {
createWorkflowRuntime,
agent,
parallel,
} from "@quintinshaw/pi-dynamic-workflows";
import { z } from "zod";
/**
* ---------------------------------------------------------------------------
* 第一层:Meta-Agent(架构师层)
* 负责接收用户的自然语言目标,并动态“编写”出对应的底层执行脚本
* ---------------------------------------------------------------------------
*/
async function generateWorkflowScript(userGoal) {
const metaSystemPrompt = `
你是一个精通 @quintinshaw/pi-dynamic-workflows 框架的高级架构师。
用户会给你一个复杂的任务目标。你需要为该任务编写一段可执行的 JavaScript 异步脚本来编排工作流。
可用全局原语与环境说明:
1. agent(prompt, options): 执行一个子 agent,返回其文本输出。options 可包含 model ("small" | "medium" | "big")。
2. parallel(taskFunctions): 传入一个返回 Promise 的函数数组,并发执行并返回结果数组。
3. 脚本必须以 return 语句结束,返回最终的执行结果。
4. 只能返回纯 JavaScript 代码块,不要包含任何 markdown 解释性文字(不要写 \`\`\`javascript 标记,直接输出代码内容)。
`;
// 让 Meta-Agent 思考并动态编写代码
const rawCode = await agent(
`用户目标:${userGoal}\n请为该目标编写一个动态工作流脚本。`,
{
model: "big",
systemPrompt: metaSystemPrompt,
},
);
// 清理代码格式,剥离可能存在的 markdown 标记
const cleanCode = rawCode.replace(/```javascript|```/g, "").trim();
return cleanCode;
}
/**
* ---------------------------------------------------------------------------
* 第二层:Runtime 驱动层(执行引擎)
* 负责加载 Meta-Agent 生成的代码,并在隔离沙箱中安全运行
* ---------------------------------------------------------------------------
*/
async function executeDynamicWorkflow(userGoal) {
console.log("🤖 [Meta-Agent] 正在分析任务并动态编写工作流代码...");
const workflowScriptCode = await generateWorkflowScript(userGoal);
console.log("\n--- 📝 Meta-Agent 动态生成的代码 ---");
console.log(workflowScriptCode);
console.log("----------------------------------------\n");
console.log("⚙️ [Runtime] 正在初始化工作流沙箱并执行...");
try {
// 初始化 pi-dynamic-workflows 运行时环境
const runtime = createWorkflowRuntime({
sandbox: true,
timeoutMs: 60000, // 60秒超时保护
});
// 动态执行 Meta-Agent 编写的脚本
const finalResult = await runtime.executeScript(workflowScriptCode, {
globals: { agent, parallel, z }, // 注入必要的全局函数和工具库
});
return finalResult;
} catch (error) {
console.error("❌ 工作流执行出错,触发自愈重试机制...", error.message);
// 这里可以把错误信息反喂给 Meta-Agent 让其修正代码(Self-Healing)
throw error;
}
}
// ==========================================
// 运行示例
// ==========================================
async function main() {
const userGoal =
"分析当前人工智能在医疗领域的最新两大突破(分别由 B1 和 B2 负责搜集不同方向),然后在 C 节点将它们整合为一份简明摘要。其中";
const result = await executeDynamicWorkflow(userGoal);
console.log("\n🎉 [工作流执行成功] 最终结果:");
console.log(result);
}
main();
下面是用户输入的 userGoal, 动态生成的 workflowScriptCode 大概:
// 1. 并行派发 B1 和 B2 子 agent,分别搜集不同方向的医疗 AI 突破
const [b1Result, b2Result] = await parallel([
() => agent(
"请搜集和深入分析当前人工智能在医疗领域的第一大核心突破方向(例如:AI 驱动的创新药物研发与靶点发现、或蛋白质结构预测的最新进展),总结出其核心亮点、技术原理及实际应用案例。",
{ model: "medium" }
),
() => agent(
"请搜集和深入分析当前人工智能在医疗领域的第二大核心突破方向(例如:多模态医学影像辅助诊断、智能手术机器人或医疗大模型在临床决策中的应用),总结出其核心亮点、技术原理及实际应用案例。",
{ model: "medium" }
)
]);
// 2. 将 B1 和 B2 的产出送入汇聚节点 C,进行综合提炼
const finalSummary = await agent(
`你是一个资深的医疗科技分析师。请将以下两个并行子 agent 搜集到的医疗 AI 最新突破成果进行交叉对比与提炼,整合出一份逻辑严密、重点突出且语言简明的综合摘要报告。\n\n` +
`--- B1 突破方向结果 ---\n${b1Result}\n\n` +
`--- B2 突破方向结果 ---\n${b2Result}`,
{ model: "big" }
);
// 3. 返回最终的汇总报告
return finalSummary;

浙公网安备 33010602011771号