自进化 agent:核心模块一任务规划器 Planner

Planner 是 Agent 的第一层“大脑”。

它负责把用户一句模糊需求,变成一组可以执行的步骤。


1. Planner 解决什么问题?

用户说:

帮我分析一下这个项目

这句话太模糊。

普通 AI 可能直接回答一堆泛泛建议。

Planner 要先把它变成:

1. 读取 README
2. 分析目录结构
3. 识别技术栈
4. 检查核心模块
5. 分析安全风险
6. 分析可维护性
7. 输出报告

也就是说,Planner 的核心作用是:

把目标变成步骤
把步骤变成工具调用计划

2. Planner 的输入和输出

输入

type PlannerInput = {
  userId: string
  task: string
  memories?: Memory[]
  availableTools: ToolDefinition[]
}

输出

type Plan = {
  goal: string
  steps: PlanStep[]
}

type PlanStep = {
  id: string
  title: string
  description: string
  tool?: string
  expectedOutput: string
  riskLevel: "low" | "medium" | "high"
}

示例:

{
  "goal": "分析项目代码质量",
  "steps": [
    {
      "id": "step_1",
      "title": "读取项目说明",
      "description": "读取 README 和 package 配置,理解项目定位与技术栈",
      "tool": "read_file",
      "expectedOutput": "项目基本信息",
      "riskLevel": "low"
    },
    {
      "id": "step_2",
      "title": "分析目录结构",
      "description": "扫描项目目录,识别模块边界和代码组织方式",
      "tool": "list_files",
      "expectedOutput": "目录结构分析",
      "riskLevel": "low"
    }
  ]
}

3. Planner 不应该做什么?

Planner 只负责规划,不负责执行。

不要让 Planner:

直接读文件
直接跑命令
直接修改代码
直接调用危险工具
直接输出最终答案

它只应该输出:

接下来要做什么
为什么要做
需要用哪个工具
风险等级是什么

这样系统才可控。


4. Planner 的核心 Prompt

可以这样写:

你是一个任务规划器 Planner。

你的职责是把用户目标拆解成可执行步骤。

要求:
1. 不执行任务,只生成计划。
2. 每一步必须清晰、可验证。
3. 优先使用低风险工具。
4. 高风险操作必须标记 riskLevel = "high"。
5. 如果任务信息不足,先生成最合理的保守计划。
6. 输出严格 JSON。

输出格式:

{
  "goal": "用户目标",
  "steps": [
    {
      "id": "step_1",
      "title": "步骤标题",
      "description": "步骤说明",
      "tool": "工具名称或 null",
      "expectedOutput": "期望产物",
      "riskLevel": "low | medium | high"
    }
  ]
}

5. Planner 如何使用记忆?

Planner 在规划前,应该先读取相关记忆。

例如用户长期偏好:

用户喜欢先看整体架构,再看细节。
用户不喜欢一上来就给代码。
用户重视安全和可维护性。

那么 Planner 应该生成这样的计划:

1. 先分析整体架构
2. 再分析模块边界
3. 再分析安全风险
4. 再分析可维护性
5. 最后给代码级建议

记忆会影响规划顺序。


6. Planner 如何选择工具?

每个工具都要有定义。

type ToolDefinition = {
  name: string
  description: string
  inputSchema: unknown
  riskLevel: "low" | "medium" | "high"
}

示例:

const tools = [
  {
    name: "read_file",
    description: "读取指定文件内容",
    riskLevel: "low"
  },
  {
    name: "write_file",
    description: "写入或覆盖文件",
    riskLevel: "high"
  },
  {
    name: "run_command",
    description: "执行 shell 命令",
    riskLevel: "high"
  }
]

Planner 只能从可用工具中选择。

不要让它编造工具。


7. Planner 的风险控制

规划阶段就要标记风险。

低风险:

读取文件
搜索资料
分析文本
生成报告

中风险:

创建文件
修改草稿
调用外部 API

高风险:

删除文件
覆盖代码
执行 shell
提交 git
发送邮件
支付操作

高风险步骤必须进入人工确认。

if (step.riskLevel === "high") {
  await requestUserApproval(step)
}

8. Planner 的最小实现流程

async function createPlan(input: PlannerInput): Promise<Plan> {
  const prompt = buildPlannerPrompt({
    task: input.task,
    memories: input.memories,
    tools: input.availableTools
  })

  const plan = await callLLM(prompt)

  return validatePlan(plan, input.availableTools)
}

关键点:

1. 构建 Prompt
2. 注入用户任务
3. 注入相关记忆
4. 注入可用工具
5. 调用 LLM
6. 校验输出
7. 返回计划

9. Planner 输出必须校验

不能完全相信 LLM。

必须检查:

是不是合法 JSON
steps 是否为空
tool 是否存在
riskLevel 是否合法
是否包含危险步骤

示例:

function validatePlan(plan: Plan, tools: ToolDefinition[]) {
  const toolNames = new Set(tools.map(t => t.name))

  for (const step of plan.steps) {
    if (step.tool && !toolNames.has(step.tool)) {
      throw new Error(`Unknown tool: ${step.tool}`)
    }

    if (!["low", "medium", "high"].includes(step.riskLevel)) {
      throw new Error(`Invalid risk level: ${step.riskLevel}`)
    }
  }

  return plan
}

10. Planner 的进化点

Planner 本身也可以进化。

例如一开始规划是:

搜索资料 → 生成答案

后来发现质量不稳定。

经过反思后,策略变成:

搜索资料 → 交叉验证 → 总结共识 → 输出答案

Planner 进化的不是模型,而是:

任务模板
步骤顺序
工具选择规则
风险策略
用户偏好

本章总结

Planner 的核心职责是:

把用户目标变成可执行、可验证、可控的步骤。

它不负责执行,只负责规划。

一个好的 Planner 必须做到:

目标清晰
步骤明确
工具合法
风险可控
可被校验
可被复用

本章验收标准

Planner 合格的标准:

能把模糊目标拆成可执行步骤
能标记工具和风险
能输出结构化计划
能被校验和复用

关键设计决策

Planner 只负责规划:

不直接执行工具
不私自越权
计划必须结构化
高风险步骤必须显式标记
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

良枫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值