Skip to content

Workflow 编排

通过 meta.mcp,一个 Workflow 可以调度其他 Workflow。

两种方式

方式一:使用默认 meta.mcp(全部 Workflow)

typescript
const result = await createAiQueryBuilder()
  .prompt(args.task)
  .mcpServers({
    meta: await getMcpServerConfig("meta"), // 包含所有 workflow
  })
  .allowTools(["mcp__meta__workflow"])
  .executeWithSession();

方式二:使用 createMetaMcp(选择子集)

typescript
import { createMetaMcp } from "../meta/meta.mcp.ts";

// 只包含需要的 workflow
const metaMcp = createMetaMcp({
  workflows: ["coder", "research"],
});

const result = await createAiQueryBuilder()
  .prompt(args.task)
  .mcpServers({ meta: metaMcp })
  .allowTools(["mcp__meta__workflow"])
  .executeWithSession();

完整示例

typescript
// orchestrator.workflow.ts
import { defineWorkflow } from "./shared/base-workflow.ts";
import { createAiQueryBuilder } from "../mcps/ai.mcp.ts";
import { createMetaMcp } from "../meta/meta.mcp.ts";

export const workflow = defineWorkflow({
  name: "orchestrator",
  description: "编排多个 Workflow 完成复杂任务",
  args: {
    task: { type: "string", alias: "t", required: true },
  },
  handler: async (args) => {
    // 选择需要的 workflow
    const metaMcp = createMetaMcp({
      workflows: ["coder", "research", "memory"],
    });

    const result = await createAiQueryBuilder()
      .prompt(`完成以下任务:

${args.task}

你可以使用 workflow 工具调用:
- coder: 编程任务
- research: 研究调查
- memory: 记忆管理`)
      .systemPrompt(`你是一个任务编排者。分析任务,调用合适的 workflow 完成。`)
      .mcpServers({ meta: metaMcp })
      .allowTools(["mcp__meta__workflow", "mcp__meta__list_workflows"])
      .executeWithSession();

    console.log(result.output);
  },
  autoStart: import.meta.main,
});

使用示例

bash
deno run -A orchestrator.workflow.ts \
  --task "先研究 Rust 错误处理,然后实现一个示例"

# AI 会:
# 1. 调用 workflow({ name: "research", args: { prompt: "Rust 错误处理" } })
# 2. 调用 workflow({ name: "coder", args: { prompt: "实现示例" } })

何时使用 createMetaMcp

场景推荐方式
外部 AI 需要访问所有 Workflow默认 meta.mcp
内部编排,需要限制可用范围createMetaMcp
避免循环调用createMetaMcp(排除自己)
最小权限原则createMetaMcp

与 Subflows 的区别

方式组装时机调用方式适用场景
Subflows定义时同进程 import同一领域的子任务
meta.mcp运行时AI 决策 + MCP跨领域动态组合

Subflows(紧耦合)

typescript
// coder.workflow.ts - 同一领域
subflows: [runWorkflow, proposalWorkflow, applyWorkflow];

meta.mcp(松耦合)

typescript
// orchestrator.workflow.ts - 跨领域
const metaMcp = createMetaMcp({
  workflows: ["coder", "research", "memory"],
});