Skip to content

驱动模式

Workflow 支持三种驱动模式,本质区别在于如何调用 MCP 工具

模式对比

模式工具调用方式适用场景
AI 驱动AI 通过 MCP 协议调用复杂决策、创造性任务
编程驱动程序直接 import 调用确定性任务、批处理
多模式同时支持两种需要灵活入口
┌─────────────────────────────────────────────────────────────┐
│                       AI 驱动                                │
│                                                              │
│   handler                                                    │
│      ↓                                                       │
│   createAiQueryBuilder()                                     │
│      ↓                                                       │
│   .mcpServers({ memory: config })                           │
│      ↓                                                       │
│   AI Agent 自主决策                                          │
│      ↓                                                       │
│   MCP 协议调用工具                                           │
│                                                              │
└─────────────────────────────────────────────────────────────┘

┌─────────────────────────────────────────────────────────────┐
│                      编程驱动                                │
│                                                              │
│   handler                                                    │
│      ↓                                                       │
│   import { searchMemories } from "memory.mcp.ts"            │
│      ↓                                                       │
│   await searchMemories(query)                               │
│      ↓                                                       │
│   直接执行,无协议开销                                       │
│                                                              │
└─────────────────────────────────────────────────────────────┘

AI 驱动模式

AI 自主决定调用哪些工具、何时调用、如何组合。

typescript
export const workflow = defineWorkflow({
  name: "research",
  args: {
    prompt: { type: "string", required: true },
  },
  handler: async (args) => {
    const mcpServers = await getMcpServerConfigs(
      "search-duckduckgo",
      "html2md",
    );

    const result = await createAiQueryBuilder()
      .prompt(args.prompt)
      .systemPrompt(`You are a research assistant.
Search for information and synthesize findings.`)
      .mcpServers(mcpServers)
      .allowTools([
        "Read",
        "Glob",
        "mcp__search-duckduckgo__search",
        "mcp__html2md__convert",
      ])
      .executeWithSession();

    console.log(result.output);
  },
});

特点

  • ✅ 处理模糊需求
  • ✅ 自主决策
  • ✅ 创造性解决方案
  • ❌ 结果不确定
  • ❌ 成本较高

编程驱动模式

程序逻辑确定调用顺序,结果可预测。

typescript
import { listMemories, searchMemories } from "../mcps/memory.mcp.ts";

export const workflow = defineWorkflow({
  name: "memory-list",
  args: {
    query: { type: "string", alias: "q" },
    limit: { type: "number", default: 10 },
  },
  handler: async (args) => {
    let memories;

    if (args.query) {
      // 搜索模式
      memories = await searchMemories(args.query);
      memories = memories.slice(0, args.limit);
    } else {
      // 列表模式
      memories = await listMemories();
    }

    for (const m of memories) {
      console.log(`- ${m.path}`);
    }
  },
});

特点

  • ✅ 结果确定
  • ✅ 零 AI 成本
  • ✅ 易于测试
  • ❌ 只能处理预定义场景
  • ❌ 缺乏灵活性

多模式

同一 Workflow 支持两种入口。

typescript
// 编程驱动的子流程
const listSubflow = defineWorkflow({
  name: "list",
  handler: async () => {
    const memories = await listMemories();
    memories.forEach((m) => console.log(`- ${m.path}`));
  },
});

// AI 驱动的子流程
const aiSubflow = defineWorkflow({
  name: "ai",
  args: { prompt: { type: "string", required: true } },
  handler: async (args) => {
    const result = await createAiQueryBuilder()
      .prompt(args.prompt)
      .mcpServers({ memory: await getMcpServerConfig("memory") })
      .executeWithSession();
    console.log(result.output);
  },
});

// 主 workflow 组合两种模式
export const workflow = defineWorkflow({
  name: "memory",
  subflows: [listSubflow, aiSubflow],
  handler: async () => {
    console.log("Usage: memory list | memory ai -p <prompt>");
  },
});

使用:

bash
# 编程驱动
deno run -A memory.workflow.ts list

# AI 驱动
deno run -A memory.workflow.ts ai -p "整理我的记忆"

选择指南

任务特征推荐模式
需要推理判断AI 驱动
结果需确定性编程驱动
处理模糊需求AI 驱动
批量操作编程驱动
需要创造性AI 驱动
流程已明确编程驱动
用户可能两种方式使用多模式