优先级排序 + 探索发现:先做哪个,与如何不只走老路
优先级解决「先做哪个」,探索解决「敢不敢走没走过的路」——Module D 收官。
立靶:两个让人栽跟头的盲区
Module D 一路拆了不少设计模式。今天收官,补上两个最容易被忽略、却最影响 Agent 实战表现的模式——优先级排序(Prioritization) 和 探索与发现(Exploration and Discovery)。
它们盲在哪?因为不像「工具调用」那样有明确的 API 形态,而是藏在 Agent 的决策层:面前摆着一堆能做的事,先动哪个手?已知路径走不通,要不要往没走过的方向探一探?这两个问题答错,Agent 不会报错崩溃,只会「忙活半天、跑偏方向」——这是最贵的失败。
先看反面,把靶子立清楚。没有优先级的 Agent:眉毛胡子一把抓。用户一句话塞了五个诉求,它从第一个顺序处理;后台来了十条待办,它按到达顺序排队。结果是被低价值任务带跑——花 80% 算力在「顺手但不重要」的事上,真正卡住全局的阻塞项排在第八位迟迟没碰。不会探索的 Agent:只走老路。给它开放式问题——「排查这个偶发 bug」「调研这个新方向值不值得做」——它沿最显眼的已知路径走到底,走不通就停,输出一句「未找到相关信息」。它不会主动生成假设,不会想「会不会是另一个我还没看的模块」。一个关于怎么选,一个关于敢不敢往未知走。
框架一:优先级排序——先做哪个
优先级排序的本质,是 Agent 在多个候选任务/子目标/请求之间,用显式维度算出一个执行顺序,而不是按到达顺序或随机处理。核心是四个维度,有判断次序:
| 维度 | 问什么 | 在排序里的角色 |
|---|---|---|
| 依赖关系 | 这件事被别的事卡着吗?做完它能解锁什么? | 硬约束,优先于一切——被阻塞的不能先做,能解锁多项的优先做 |
| 紧急度 | 多久内必须完成?deadline 多近? | 时间轴排序,临期上浮 |
| 重要度 | 做了对总目标贡献多大? | 价值排序,决定「值不值得现在做」 |
| 成本收益 | 投入多少?产出多少? | 同级别里的效率裁决,高 ROI 先做 |
实战判断次序:先解依赖(拓扑排序)→ 再看紧急与重要的组合 → 同档内用成本收益裁决。依赖是硬约束(顺序错了后面全白做);紧急×重要是经典艾森豪威尔矩阵;成本收益是同格子里并列时的最后一刀:
| 重要 | 不重要 | |
|---|---|---|
| 紧急 | 立刻做(active) | 快速处理或委托,别占主线 |
| 不紧急 | 排进计划、别遗忘 | 能砍就砍,别让它占资源 |
要点明一个常被混淆的边界:优先级 ≠ 调度。优先级回答「选哪个」(从候选集挑下一个动手的),调度回答「同时做几个」(并发度、WIP 上限、何时切换)。两者配合:优先级排出队列顺序,调度按 WIP 限制从队头取任务。
框架二:探索与发现——敢不敢走没走过的路
探索模式解决:在未知或开放的解空间里,Agent 主动去试没走过的路径,而不是只沿已知最优反复打转。核心张力一句话——exploration vs exploitation:
| Exploration(探索) | Exploitation(利用) | |
|---|---|---|
| 做什么 | 试新假设、新路径、新区域 | 沿当前已知最优继续深挖 |
| 赌的是 | 可能有更好的解还没被发现 | 当前这条路收益确定 |
| 风险 | 花预算却一无所获 | 困在局部最优,错过更好的 |
| 偏向时机 | 信息不足、解空间大、屡屡碰壁 | 信息充分、已找到够好的、预算将尽 |
什么任务必须靠探索撑着?三类典型:研究型任务(答案不在某个固定文档里,要主动撒网)、找 bug / 排障(偶发问题、根因不明,要列多个怀疑点逐一验证)、开放式问题求解(没有标准答案,靠生成多个候选再筛)。探索的运转是一个不轻易停的循环:生成假设 → 验证 → 看结果调整方向 →(覆盖不够就)再生成新假设。关键纪律是覆盖度优先,不轻易停——不会探索的 Agent 验证完第一个假设失败就收手,会探索的 Agent 会问「我还有哪些区域没看过」,在预算耗尽前持续扩大覆盖。
Case:同一个任务,两个模式怎么协同
任务:「线上偶发 500 错误,排查并修复,今天下班前要有结论。」
优先级先介入,把任务拆开排序:依赖——要先定位才能修,「定位」阻塞「修复」,定位排第一;紧急——有 deadline,主线锁定这件事,其他后台请求降级;重要——线上错误影响用户,落在「紧急且重要」象限 → active;成本收益——定位先看日志(低成本高信息),而不是一上来就压测。
探索接管「定位」这一步——根因不明,正是开放解空间:生成假设(A 上游超时 / B 连接池打满 / C 边界输入),不只验 A 而是三个都列出、按成本先验最便宜的;验证 A 失败 → 不停手转向 B(NEVER STOP 的纪律);覆盖度优先——在下班前这个固定预算内尽量把怀疑面扫一遍。优先级决定「现在主线是定位这个 bug」,探索决定「定位时不止盯一个怀疑点」:一个管做哪件,一个管这件事内部怎么不走死胡同。
织进本课
优先级 ↔ Module C「边界与 feature list」。 Module C 定了 WIP=1 和「选 feature 算法」——那个「选 feature 算法」本质就是优先级排序,WIP=1 本质就是调度。features.json 的依赖字段是依赖维度,feature 业务价值是重要度,这一讲的四维矩阵就是把当时那条算法显式化、可复用化。优先级是「选哪个 active」,WIP 是「同时几个 active」,Module C 早就用上了,今天才给它正名。
探索 ↔ harness 的 autoresearch「NEVER STOP」+ Module A 任务路径。 harness 方法论里的 autoresearch 范式:固定预算内让 Agent 不停跑、单一标量打分、tsv 记账、NEVER STOP——这正是探索模式的工程落地(「固定预算」对应预算约束,「NEVER STOP」对应覆盖度优先不轻易停,每轮一个新假设就是一次 exploration)。所以优先级和探索从来不是新东西,是前面几讲那些具体做法背后的通用名字。给它们命名的价值,是让你下次遇到新场景能主动调用,而不是每次重新发明。
可操作做法
优先级:① 让 Agent 显式输出排序理由(先列候选、标四维、再给顺序);② 依赖关系先建图,能拓扑排序就拓扑排序,被阻塞的标灰绝不先碰;③ deadline/SLA 作为硬上浮信号;④ 区分优先级和 WIP,排好队再按 WIP 从队头取,别混成一锅;⑤ 低价值任务要有显式丢弃机制。
探索:① 强制一次生成多个假设(≥3),别验一个停一个;② 给固定探索预算(轮数/token/时间),预算内 NEVER STOP,预算尽则收敛;③ 用单一标量衡量「够好了没」,到阈值才从探索切到利用;④ 记账(每轮假设、验证结果、覆盖区域写进可追溯日志);⑤ 设收敛信号(覆盖度达标 or 预算耗尽 or 找到够好解,满足其一才停)。
两条线合起来:优先级帮你不被低价值任务带跑,探索帮你不困在已知老路。 前者管资源花在哪,后者管路径走多宽。
收口
优先级排序回答「先做哪个」,探索发现回答「敢不敢走没走过的路」。一个让 Agent 把力气花在刀刃上,一个让 Agent 在未知里不轻易认输——前者治「瞎忙」,后者治「偷懒」。
最后给整个 Module D 收个尾:
这一路拆下来的 21 个设计模式,不是 21 道必答题,而是一个招式库。真正的功夫不在背全每一招,而在面对一个具体任务时,知道该查哪几招、怎么把它们组合起来用。反思配规划、护栏配工具、优先级配调度、探索配评估——会查、会组合,比会背重要得多。