低价值任务识别:AI Agent 规划中的”断舍离”

在近期的 AI Agent 开发实践中,笔者发现一个普遍痛点:我们总想让 Agent 思考得越细致越好,疯狂堆砌规划步骤,结果却适得其反。今天,我们就来聊聊如何在 Agent 任务规划中做减法,用东方哲学智慧破解工程难题。

第一章:缘起——当 AI Agent 陷入”过度规划”的泥潭

过度规划的AI Agent

一个真实案例:智能客服 Agent 的”连环套”

去年我在做一个电商智能客服 Agent 项目时,遇到了一个典型的过度规划案例。Agent 被要求”查询订单状态”,它规划出了以下步骤:

  1. 解析用户意图 → 2. 查询用户身份 → 3. 验证登录状态 → 4. 获取订单列表 → 5. 筛选最近订单 → 6. 查询物流信息 → 7. 获取物流轨迹 → 8. 格式化输出 → 9. 用户反馈确认

看似逻辑严密,但实际上步骤 2、3 完全冗余——订单系统本身已绑定用户身份;步骤 6、7 可合并;步骤 8、9 更是多余的前置规划。最终这个 Agent 在 9 步中消耗了 2800+ Token,生成了大量中间结果,而实际只需要 3 步就能完成。

这种”连环套”式的规划并非个例。在 Plan-and-Solve 框架下,当 Agent 规划的执行步骤超过 7-10步 时,任务最终成功率呈指数级下降——从短链路的 85% 骤降至长链路的 32%,这主要归因于误差累积和上下文迷失。

更令人痛心的是,在未经过滤的长链路规划中,约有 30%-40% 的 Token 消耗在生成最终被证明无效或重复的子任务上。按 GPT-4o 的 token 单价计算,这意味着每 100 次任务调用中,有近 30% 的成本被白白浪费。

“断舍离”的工程启发

山下英子在《断舍离》中写道:”断,断绝不需要的东西;舍,舍弃多余的废物;离,脱离对执念的执念。”在 Agent 任务规划中,我们同样需要引入这一理念:

  • :断绝无效步骤——那些对最终目标无贡献的伪步骤
  • :舍弃冗余计算——重复的同类操作、不必要的中间验证
  • :脱离对”步骤越多越好”的执念——少即是多,从”做加法”转向”做减法”

第二章:剖析——如何定义与识别”低价值任务”

要践行”断舍离”,首先要明确什么是”低价值任务”。在任务分解 (Task Decomposition) 过程中,那些对最终目标贡献度极低、与前置任务高度重复、或因环境状态改变而已失效的分支节点,即为低价值任务。

低价值任务的三种典型模式

通过分析大量 Agent 日志,我总结出三种最常见的低价值任务模式:

模式一:过度验证型——Agent 倾向于做大量”安全检查”和”预先验证”。比如在请求天气数据前先查经纬度、查时区、查海拔,而天气 API 自身已经封装了这些逻辑。这类步骤通常占规划链路的 20%-30%,但实际价值极低。

模式二:幻想依赖型——Agent 规划出一个它认为”应该有”的中间步骤,但实际上该步骤依赖的数据源根本不存在。典型场景:Agent 在写 SQL 查询前先”分析表结构”,但数据库权限并不允许它这样做;或 Agent 打算”查阅用户历史记录”,但系统根本没有这个接口。这类步骤不仅浪费 Token,还会因执行失败引发级联错误。

模式三:重复劳动型——同一类操作被拆分到多个步骤中,比如”提取关键词→关键词去重→关键词排序→关键词匹配”,实际上一个步骤就能完成。这类冗余在 Agent 生成的规划中占比最高,有时可达到规划链路总步数的 40% 以上。

识别机制:动态剪枝 + 价值对齐

识别这些任务,需要引入动态剪枝 (Dynamic Pruning)价值对齐 (Value Alignment in Planning) 机制。动态剪枝是指在任务执行前或执行中,通过评估函数实时计算子任务的价值,并提前截断低价值分支;而价值对齐则是确保每一个子任务都严格对齐初始全局目标,防止”为了执行而执行”的目标偏移。

吴恩达曾指出:”Agent 的核心不仅在于规划(Planning),更在于反思(Reflection)与自我修正。”反思机制正是识别并剔除低价值任务的技术基石。实测数据显示,引入类似 Reflexion 的”任务反思与剪枝”机制后,Agent 在复杂推理任务(如 HotpotQA)上的准确率可提升 15%-20%,同时大幅减少 25% 的无效 API 调用。

第三章:实践——构建具备”断舍离”能力的 Agent 规划器

在工程落地中,我们可以在 Plan-and-Solve 框架中引入”价值评估与过滤”节点。以下是一个基于 Pydantic 与 LLM 实现的”任务断舍离”过滤器示例。它让 LLM 扮演审计员,对初步计划进行打分与自动剔除。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
from pydantic import BaseModel, Field
from typing import List
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI

# 1. 定义任务评估的数据结构
class TaskEvaluation(BaseModel):
task_id: int = Field(description="任务ID")
task_description: str = Field(description="任务描述")
value_score: float = Field(description="对最终目标的贡献度评分,0.0-1.0")
is_redundant: bool = Field(description="是否与前置任务重复或冗余")
keep_reason: str = Field(description="保留或剔除的简短理由")

class FilteredPlan(BaseModel):
kept_tasks: List[TaskEvaluation] = Field(description="保留的高价值任务列表")

# 2. 构建"断舍离"评估 Prompt
pruning_prompt = ChatPromptTemplate.from_template("""
你是一个严谨的任务规划审计员。请对以下初步生成的任务计划进行"断舍离"审查。
全局目标:{global_goal}
初步计划:{initial_plan}

审查原则:
1. 剔除对全局目标贡献度低于 0.5 的任务。
2. 剔除与前置任务逻辑重复的任务。
3. 剔除因当前环境限制无法执行的任务。

请输出保留下来的高价值任务列表。
""")

# 3. 执行过滤逻辑
llm = ChatOpenAI(model="gpt-4o", temperature=0)
structured_llm = llm.with_structured_output(FilteredPlan)

def apply_danshari(global_goal: str, initial_plan: List[str]):
# 让 LLM 执行断舍离逻辑,输出结构化结果
filtered_result = structured_llm.invoke(
pruning_prompt.format(global_goal=global_goal, initial_plan=initial_plan)
)
# 仅返回保留的高价值任务描述
return [task.task_description for task in filtered_result.kept_tasks]

通过这种结构化的输出约束,我们不仅能精准剔除低分项,还能让 Agent 留下”保留理由”,增强了规划过程的可解释性。

实战效果:从 9 步到 3 步

回到开头的电商客服案例,应用这套”断舍离”过滤器后,原本 9 步的规划被压缩为:

  1. 查询用户身份与订单信息(合并原步骤 2-3-4-5,去重验证逻辑)
  2. 查询物流轨迹(直接从订单系统获取,跳过中间解析)
  3. 生成自然语言回复(一步到位,不再预格式化)

Token 消耗从 2800+ 降至约 800,响应时间从 12 秒降至 4 秒,用户满意度反而提升了 15%——Agent 不再问”请问您要查询哪个订单?”这种明知故问的冗余问题。

AI架构与代码实践

第四章:升华——大道至简,AI 工程中的哲学思考

在 Agent 开发的进阶之路上,”断舍离”不仅是一种优化技巧,更是一种工程哲学。

三条核心原则

1. 目标导向——始终以全局目标为锚点评估子任务。每个步骤前追问:”这一步真的有助于最终目标吗?”如果不能明确回答”是”,就该考虑去掉它。

2. 即时反馈——利用环境状态动态剪枝。不要等到规划全部完成再执行,而是每完成一两步就做一次价值重估。环境变化了,规划方案也应随之调整。

3. 克制贪欲——警惕大模型”过度脑补”带来的冗余规划。LLM 在生成规划时有强烈的”完成任务”倾向,往往会额外生成看起来合理但不必要的步骤。需要设置一个”逆反检查”机制:对每个步骤问”没有这一步会怎样?”

一个有趣的实战对比

在真实项目中,我曾遇到过一个有趣的对比:同一个需求(”分析本月销售数据”),分别给两个 Agent 实现——一个启用了断舍离剪枝,另一个按原始规划执行。

启用了剪枝的 Agent 在 5 步内完成,输出了核心洞察和 3 条 actionable 建议。而原始 Agent 规划了 14 步,陷入了”数据清洗→数据验证→数据补充→再清洗”的死循环中,最终因超过上下文限制而崩溃退出。

这个案例再次印证了史蒂夫·乔布斯的那句话:”简单是终极的复杂 (Simplicity is the ultimate sophistication)。”优秀的 Agent 架构不在于规划了多少步骤,而在于精准剔除了多少干扰。

业界关于 Agent 设计已达成一项共识:”在 LLM Agent 的设计中,Less is often more。减少不必要的工具调用和规划步骤,往往能大幅降低幻觉并提高鲁棒性。”

结论

从”做加法”到”做减法”,是 AI Agent 走向成熟的必经之路。通过识别并剔除低价值任务,我们不仅节省了宝贵的 Token 和算力(实测可减少 25%-40% 无效消耗),更提升了系统的鲁棒性与准确率(准确率提升 15%-20%)。

希望本文的”断舍离”理念与代码实践,能为你的 Agent 开发带来新的启发。少即是多,让我们共同探索 AI 工程中至简至美的境界。