优先级排序

Categories:Ai
Tags:Agent
目录

这一章是 第 20 章:优先级排序(Prioritization)。它讲的是:当 Agent 面前同时有很多任务、很多目标、很多可选动作,而且资源有限时,Agent 应该如何决定 先做什么、后做什么、不做什么。

这章本身不复杂,但它很重要,因为它和前面几章能串起来:

第 16 章资源感知优化:资源有限,所以要排序。 第 17 章推理技术:复杂任务要拆解,拆完后要决定顺序。 第 18 章护栏:有些任务风险高,要降级或转人工。 第 19 章评估监控:排序策略好不好,要靠指标监控。 第 20 章优先级排序:面对多个目标和动作,决定下一步最该做什么。


1. 这一章的核心问题

Agent 在真实环境里经常不是只有一个任务,而是同时面对很多任务。

比如一个项目管理 Agent 可能收到:

1
2
3
4
5
6
修复线上支付 bug
写本周项目周报
安排下周会议
审核营销页面文案
给客户回复邮件
整理需求文档

如果没有优先级排序,它可能随便选一个做,导致真正重要的事情被拖延。

这一章开头说,在复杂动态环境中,智能体会面对大量潜在行动、目标冲突和资源有限的问题。如果没有明确的后续行动决策流程,Agent 可能效率低下、操作延迟,甚至无法实现关键目标。优先级排序就是让智能体根据任务的重要性、紧急性、依赖关系和指定标准进行排序。

所以核心是:

优先级排序(Prioritization)让 Agent 在多个候选任务中选择最值得先执行的任务。

不是所有任务都同等重要,也不是所有任务都应该马上做。


2. 优先级排序不是简单“谁先来谁先做”

很多初学者会觉得:任务来了就按顺序做不就行了?

但真实系统不行。

比如:

1
2
3
任务 A:修复线上支付系统故障,影响所有用户
任务 B:更新官网 banner 文案
任务 C:整理下周会议纪要

如果按先来后到,可能先做 B,但这明显不合理。

优先级排序要综合考虑:

紧急性(Urgency):是不是马上要处理? 重要性(Importance):对核心目标影响大不大? 依赖关系(Dependency):是不是其他任务的前置条件? 资源可用性(Resource Availability):现在有没有工具、人员、数据? 成本收益(Cost-Benefit Analysis):投入和收益是否划算? 用户偏好(User Preference):用户明确更重视什么?

文档也提到,优先级排序的核心通常包括标准定义、任务评估、调度或选择逻辑,以及动态优先级调整。

所以它不是一个简单排序,而是一个决策流程。


3. 优先级排序发生在哪些层级?

这一章说,优先级排序可以发生在多个层级:总体目标排序、规划步骤排序、下一步行动选择。

这点很重要。

3.1 目标级排序

目标级排序(Goal-Level Prioritization) 是决定哪个大目标最重要。

比如一个个人助理 Agent 同时知道你要:

1
2
3
4
准备明天面试
完成课程作业
回复朋友消息
整理电脑文件

它应该判断:明天面试最紧急、最重要,所以优先。


3.2 子任务级排序

子任务级排序(Subtask-Level Prioritization) 是任务拆解后,决定步骤顺序。

比如“准备面试”可以拆成:

1
2
3
4
5
了解公司
复习项目经历
准备自我介绍
模拟问答
整理简历

这里可能要先了解公司,再准备回答;先整理简历,再模拟投递场景。


3.3 行动级排序

行动级排序(Action-Level Prioritization) 是 Agent 当前下一步到底做什么。

比如现在有三个可选动作:

1
2
3
搜索资料
调用数据库
生成最终回答

如果信息不足,应该先搜索;如果信息已经充分,应该生成回答;如果涉及用户数据,应该先校验权限。

这和 ReAct 的流程关系很紧:

1
Thought → 选择最优 Action → Observation → 再排序 → 下一步

4. 动态优先级调整是什么?

动态优先级调整(Dynamic Priority Adjustment) 是这章的关键点。

意思是:任务优先级不是固定的,会随着环境变化而变化。

比如一开始任务排序是:

1
2
3
P1:写周报
P2:审核营销文案
P3:整理会议纪要

突然线上系统崩了:

1
2
3
4
P0:修复线上故障
P1:写周报
P2:审核营销文案
P3:整理会议纪要

这就是动态调整。

文档也说,如果出现新的关键事件或截止时间临近,智能体应修改任务优先级,以保持适应性和响应能力。

这和普通自动化脚本的区别很明显。

普通脚本通常按固定流程执行:

1
A → B → C → D

Agent 应该能根据情况调整:

1
2
原计划:A → B → C
新事件出现:先处理 X,再回到 B/C

5. P0 / P1 / P2 是什么?

代码示例里用了 P0、P1、P2 这种优先级。

一般可以理解为:

P0(Priority 0):最高优先级,紧急且重要,必须马上处理。 P1(Priority 1):中等优先级,重要但不一定马上处理。 P2(Priority 2):低优先级,可以延后处理。

在项目管理或工程团队里,经常会用类似的分级。

比如:

1
2
3
P0:线上支付系统不可用
P1:部分用户无法上传头像
P2:按钮样式不统一

注意,P0 不是“第 0 个任务”,而是最高优先级等级。


6. 实际应用场景怎么理解?

文档列了多个场景,我按直观逻辑解释一下。

6.1 自动化客户支持

客户支持 Agent 收到很多工单。

有些是:

1
2
3
系统无法登录
付款失败
账户被盗

有些是:

1
2
3
如何修改头像
如何更换昵称
如何查看订单

前者影响大、紧急,应该优先处理。文档也提到,客户支持中可以优先处理系统故障报告,而将密码重置等常规问题延后,还可以给高价值客户更高优先级。


6.2 云计算资源调度

云资源有限,不可能所有任务都同时最高规格运行。

比如:

1
2
3
4
核心在线服务
离线日志分析
批量报表生成
模型训练任务

高峰期应该优先保证核心在线服务,把低优先级批处理放到非高峰。

这就是资源感知优化 + 优先级排序。


6.3 自动驾驶

自动驾驶里优先级很明显:

1
避免碰撞 > 遵守路线 > 保持舒适 > 节省能耗

如果前方突然有人,制动避险必须优先于保持车道、平稳驾驶或优化能耗。

这说明有些系统里优先级甚至是安全规则。


6.4 项目管理

项目管理 Agent 要考虑:

截止日期; 依赖关系; 人员可用性; 任务重要性; 风险程度。

比如:

1
2
3
后端接口没完成 → 前端页面无法联调
设计稿没确认 → 开发可能返工
线上 bug 未修复 → 新功能要暂停

所以不是“哪个任务看起来简单先做哪个”,而是要看依赖和影响。


6.5 网络安全

网络安全 Agent 面对大量告警。

有些告警只是低风险扫描,有些可能是正在发生的入侵。

要根据:

威胁严重性; 受影响资产重要性; 攻击是否正在进行; 是否涉及敏感数据。

来决定先处理哪个。

这就是高风险场景中的优先级排序。


7. 代码示例在做什么?

这一章的代码是一个 项目经理 Agent(Project Manager Agent)。

它用 LangChain 构建了一个简单的任务管理系统。这个 Agent 可以:

创建任务; 给任务分配优先级; 把任务分配给工作人员; 列出所有任务。

文档说,这段代码演示了如何用 LangChain 构建项目经理智能体,自动创建、排序并分配任务。

整体结构是:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
用户请求
  ↓
项目经理 Agent 理解任务
  ↓
调用 create_new_task 创建任务
  ↓
判断优先级
  ↓
调用 assign_priority_to_task
  ↓
判断负责人
  ↓
调用 assign_task_to_worker
  ↓
调用 list_all_tasks 展示结果

8. Task 类是什么?

代码里有:

1
2
3
4
5
class Task(BaseModel):
    id: str
    description: str
    priority: Optional[str] = None
    assigned_to: Optional[str] = None

这表示一个任务对象有四个字段:

1
2
3
4
id:任务编号,例如 TASK-001
description:任务描述
priority:优先级,例如 P0、P1、P2
assigned_to:分配给谁

这里用的是 Pydantic(数据校验库)。它可以让任务结构更清楚,也方便做参数校验。

这其实和第 18 章护栏也有关:结构化数据和参数校验可以减少 Agent 工具调用出错。


9. SuperSimpleTaskManager 是什么?

SuperSimpleTaskManager 是一个内存里的任务管理器。

它内部用字典保存任务:

1
self.tasks: Dict[str, Task] = {}

为什么用字典?

因为字典可以通过任务 ID 快速查找、更新和删除。文档也说,使用字典实现 O(1) 查找、更新和删除。

它主要有三个功能:

1
2
3
create_task:创建任务
update_task:更新任务,比如优先级或负责人
list_all_tasks:列出所有任务

注意,这只是演示用的内存系统。真实项目里任务应该存到数据库。


10. 工具层在做什么?

代码定义了几个工具:

1
2
3
4
create_new_task
assign_priority_to_task
assign_task_to_worker
list_all_tasks

这些工具就是 Agent 能操作外部系统的接口。

比如:

用户说:

1
创建一个实现新登录系统的任务。很紧急,分配给 Worker B。

Agent 应该调用:

1
2
3
4
create_new_task:创建任务
assign_priority_to_task:因为“很紧急”,设为 P0
assign_task_to_worker:分配给 Worker B
list_all_tasks:展示最终状态

这就是 Agent 的工具调用流程。

这里有一个重要点:优先级不是用户必须明确写 P0。Agent 要能理解自然语言里的信号。

比如:

1
2
3
4
5
6
ASAP
紧急
关键
马上
高优
线上故障

都可能映射到 P0。

代码系统提示词里也写了,如果提到“紧急”“ASAP”“关键”,就映射为 P0。


11. Prompt 模板在约束 Agent 行为

代码里系统提示词规定了 Agent 的工作流程:

1
2
3
4
5
6
1. 首先创建任务并获取 task_id
2. 分析用户请求,判断是否提及优先级或分配人员
3. 如果提到优先级,就分配优先级
4. 如果提到工作人员,就分配人员
5. 如果缺失信息,默认优先级 P1,默认 Worker A
6. 最后列出所有任务

这实际上是在给 Agent 一个 操作策略(Action Policy)。

它不是让 Agent 随便发挥,而是告诉它:

1
2
3
4
先做什么
再做什么
缺信息怎么办
最后怎么收尾

这就是优先级排序和工具调用结合的地方。


12. 代码示例的两个模拟场景

文档里的模拟有两个场景。

场景 1:紧急任务

用户请求:

1
需要 ASAP 实现新的登录系统,分配给 Worker B。

Agent 应该:

1
2
3
4
5
创建任务:实现新登录系统
识别 ASAP / 很紧急
设置优先级 P0
分配给 Worker B
列出任务

场景 2:普通任务

用户请求:

1
需要审核营销网站内容。

没有明确优先级,也没有明确负责人。

系统提示词规定默认:

1
2
优先级 P1
负责人 Worker A

所以 Agent 应该:

1
2
3
4
创建任务:审核营销网站内容
设置优先级 P1
分配给 Worker A
列出任务

这个例子很简单,但它展示了 Agent 如何从模糊自然语言里提取优先级和分配信息。


13. 这段代码有什么局限?

这章代码是教学示例,不是生产系统。它有不少局限。

13.1 优先级规则太简单

只把“紧急、ASAP、关键”映射为 P0。

真实系统要考虑更多因素:

截止日期; 业务影响; 客户等级; 依赖关系; 资源可用性; 风险程度; 任务预计耗时。

13.2 没有真正排序队列

代码只是给任务分配 P0/P1/P2,没有实现完整排序队列。

真实系统应该能:

按优先级排序; 同优先级按截止时间排序; 考虑依赖关系; 动态调整; 重新调度。

13.3 没有依赖关系

任务之间可能有依赖。

比如:

1
2
3
先完成 API 设计
再做前端开发
最后做联调测试

代码里没有表示任务依赖。

13.4 没有资源约束

比如 Worker B 已经有很多任务,不能继续分配。 代码里没有人员负载、时间、能力匹配。

13.5 没有监控与评估

它没有检查任务是否按时完成,也没有评估排序策略是否有效。

这部分要和第 19 章结合。


14. 一个更真实的优先级评分公式

真实系统里,优先级常常不是简单规则,而是打分。

可以设计一个评分:

1
2
3
4
5
6
Priority Score =
  重要性 × 0.4
+ 紧急性 × 0.3
+ 风险 × 0.2
+ 依赖影响 × 0.1
- 成本惩罚

比如:

任务重要性紧急性风险成本优先级
修复支付故障1010104极高
审核营销文案5432中
整理历史文档2113低

这比简单 P0/P1/P2 更细。

在 Agent 里可以有两种做法:

规则评分:用代码计算。 LLM 评分:让模型根据 rubric 打分。

更稳的是二者结合: 代码负责硬规则,LLM 负责理解模糊语义。


15. 优先级排序和资源感知优化的区别

这两个很容易混。

资源感知优化(Resource-Aware Optimization) 关注:

1
2
3
4
5
用什么资源做?
用哪个模型?
花多少 token?
是否调用工具?
是否降级?

优先级排序(Prioritization) 关注:

1
2
3
4
先做哪个任务?
哪个目标更重要?
哪个动作更该执行?
哪些任务可以延后?

二者关系是:

1
2
优先级排序决定“先做什么”
资源感知优化决定“怎么做更划算”

比如:

1
2
任务 A 是 P0,所以先做。
但为了节约资源,先用小模型分类,再用大模型处理关键步骤。

16. 优先级排序和 ReAct 的关系

ReAct 是:

1
思考 → 行动 → 观察 → 再思考

优先级排序发生在“行动选择”那里。

比如 Agent 当前可以:

1
2
3
4
5
搜索资料
调用数据库
询问用户澄清
直接回答
转人工

它必须判断哪个最优先。

如果信息不足,优先搜索。 如果用户权限不明,优先权限校验。 如果风险高,优先转人工。 如果答案已充分,优先最终回答。

所以可以理解为:

ReAct 提供循环框架,优先级排序决定每一轮循环中最该采取的动作。


17. 优先级排序和护栏的关系

护栏告诉 Agent:

1
2
3
哪些事情不能做
哪些事情需要确认
哪些事情必须人工介入

优先级排序告诉 Agent:

1
允许做的事情里,先做哪一个

例如有三个任务:

1
2
3
A:回答用户普通问题
B:执行删除文件操作
C:处理安全告警

护栏会说:

1
B 是高风险操作,不能直接执行,必须确认。

优先级排序会说:

1
2
C 是安全告警,应优先处理。
A 可以延后。

所以护栏和优先级排序是互补的。


18. 优先级排序和评估监控的关系

第 19 章评估监控可以用来衡量排序策略好不好。

比如你可以监控:

1
2
3
4
5
6
7
8
P0 任务平均响应时间
P0 任务是否都被优先处理
低优先级任务是否长期饥饿
任务完成率
任务延期率
任务重排次数
人员负载是否均衡
排序后成本是否下降

如果 P0 任务经常被延迟,说明排序策略失败。 如果低优先级任务永远得不到处理,说明需要防止 饥饿问题(Starvation)。


19. 饥饿问题是什么?

饥饿问题(Starvation) 是优先级系统里的常见问题。

如果系统永远优先处理 P0/P1,P2 任务可能永远排不到。

比如:

1
2
每天都有新的紧急任务
于是文档整理、技术债、长期优化永远不做

这在真实项目里很常见。

解决方法包括:

老化机制; 截止日期提升; 定期处理低优任务; 限制 P0 数量; 给长期任务保留固定资源。

老化机制(Aging) 是指任务等待越久,优先级逐渐上升。

比如 P2 任务等了 30 天,自动升到 P1。

这章没有展开,但如果做真实系统,这是必须考虑的。


20. 第 7 页图 1 怎么理解?

第 7 页图 1 是 优先级排序设计模式(Prioritization Design Pattern)。

图里大概是:

1
User → Prompt → Agent ↔ Priority List → Output

意思是:

用户给出任务后,Agent 不是直接输出,而是先和一个优先级列表或排序机制交互,根据任务优先级决定处理顺序,然后再输出。

这张图强调:

Agent 的输出不是只由 prompt 决定,还由任务队列和优先级状态决定。

也就是说,同一个用户请求,在不同上下文下优先级可能不同。

比如用户说:

1
帮我整理一下文档。

平时这是普通任务。 但如果明天就要提交材料,它可能变成高优先级。

所以优先级依赖上下文。


21. 这一章在面试的位置

这一章不一定以“优先级排序”单独出现,但它和的这些主题有关:

架构选型 Agent 是 ReAct 还是 Plan-and-Execute?计划执行时就需要任务排序。

工具管理 多工具可选时,优先调用哪个工具?

工程化踩坑 成本控制、死循环、状态丢失,都和排序策略有关。

业务 AI 工程分析 业务需求拆解、AI 方案选型、效果评估,都需要判断优先级。

简历项目拷打 如果你项目里有多个任务或多个工具,面试官可能问:Agent 怎么决定下一步做什么?

所以它不是最显眼的知识点,但在解释 Agent 工作流时很有用。


22. 如果面试被问:Agent 如何决定下一步行动?

可以这样回答:

Agent 可以通过优先级排序机制决定下一步行动。首先定义排序标准,比如紧急性、重要性、依赖关系、资源可用性、成本收益和用户偏好。然后对候选任务或候选动作进行评分或分类,选择当前收益最高、风险可控、资源可用的动作执行。执行后根据环境反馈动态调整优先级。如果涉及高风险动作,还要结合护栏和人工确认。

这就把第 20 章讲清楚了。


23. 如果面试被问:怎么设计任务优先级系统?

可以这样回答:

我会先定义任务字段,包括任务描述、截止时间、重要性、紧急性、依赖任务、预计成本、负责人和风险等级。然后用规则或模型给任务打分,例如 P0/P1/P2,或者计算 priority score。调度时先处理高分任务,同时考虑依赖关系和资源可用性。系统还要支持动态重排,比如新紧急任务插入、截止时间临近、资源变化。同时要加入 aging 机制,避免低优先级任务长期饥饿。

这个回答比“按紧急程度排序”更完整。


24. 如果面试被问:优先级排序和规划有什么区别?

可以这样回答:

规划是把目标拆成任务和步骤,优先级排序是决定这些任务和步骤的执行顺序。规划解决“要做哪些事”,优先级排序解决“先做哪件事”。在复杂 Agent 中,二者通常结合使用:Planner 生成候选步骤,Prioritizer 根据紧急性、重要性、依赖关系和资源约束选择下一步。


25. 最后总结

第 20 章的核心是:

当 Agent 面对多个目标、多个任务、多个工具和有限资源时,它需要一套优先级排序机制来决定下一步最该做什么。

你需要记住这条主线:

1
2
3
4
5
6
7
8
9
定义排序标准
  ↓
评估任务或动作
  ↓
生成优先级
  ↓
选择下一步行动
  ↓
根据环境变化动态调整

最重要的关键词是:

优先级排序(Prioritization) 紧急性(Urgency) 重要性(Importance) 依赖关系(Dependency) 资源可用性(Resource Availability) 成本收益分析(Cost-Benefit Analysis) 用户偏好(User Preference) 动态优先级调整(Dynamic Priority Adjustment) 任务调度(Task Scheduling) 行动选择(Action Selection) 饥饿问题(Starvation) 老化机制(Aging)

这一章真正的价值是:它让你理解 Agent 不是“看到任务就做”,而是要在多个可能行动中做选择。这个能力一旦和 ReAct、工具调用、资源优化、护栏、评估监控结合起来,Agent 才更像一个能在真实环境里工作的系统。

章节插图

推荐阅读

上一篇:

评估与监控

下一篇:

探索与发现