使用 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;
posted @ 2026-11-07 15:15  harrychinese  阅读(7)  评论(0)    收藏  举报