惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

H
Hackread – Cybersecurity News, Data Breaches, AI and More
W
WeLiveSecurity
C
Check Point Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V
Vulnerabilities – Threatpost
GbyAI
GbyAI
A
Arctic Wolf
NISL@THU
NISL@THU
N
Netflix TechBlog - Medium
The Register - Security
The Register - Security
M
MIT News - Artificial intelligence
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Microsoft Security Blog
Microsoft Security Blog
Cyberwarzone
Cyberwarzone
C
CERT Recently Published Vulnerability Notes
T
Tenable Blog
G
GRAHAM CLULEY
O
OpenAI News
S
Schneier on Security
Google Online Security Blog
Google Online Security Blog
Vercel News
Vercel News
宝玉的分享
宝玉的分享
Attack and Defense Labs
Attack and Defense Labs
T
The Blog of Author Tim Ferriss
量子位
aimingoo的专栏
aimingoo的专栏
The Cloudflare Blog
P
Privacy & Cybersecurity Law Blog
S
SegmentFault 最新的问题
MongoDB | Blog
MongoDB | Blog
Apple Machine Learning Research
Apple Machine Learning Research
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
L
LINUX DO - 热门话题
博客园_首页
F
Full Disclosure
Recent Commits to openclaw:main
Recent Commits to openclaw:main
D
Docker
U
Unit 42
A
About on SuperTechFans
博客园 - 司徒正美
Hacker News - Newest:
Hacker News - Newest: "LLM"
人人都是产品经理
人人都是产品经理
Application and Cybersecurity Blog
Application and Cybersecurity Blog
G
Google Developers Blog
Security Archives - TechRepublic
Security Archives - TechRepublic
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
J
Java Code Geeks
云风的 BLOG
云风的 BLOG
Scott Helme
Scott Helme
TaoSecurity Blog
TaoSecurity Blog

XINDOO

关于内卷,几个值得深想的洞察 当创作被 Skill 化:我用 AI 写了一部 320 章的长篇网文 AI第一剑,先斩程序员 AI 也会偷懒?这个 PUA 工具专治“摸鱼式编程” Gstack 深度解析:YC CEO 开源的 AI 工程团队 GitHub Trending霸榜!深度解析AI Coding辅助神器 Superpowers 深度探讨:从 OpenClaw 爆火,看 AI Agent 的真相与程序员的未来 我复刻了NotebookLM的信息图功能 我用AI写了部小说,这里是整个过程 [翻译]我在谷歌14年学到的21堂课 2万字吊打40万字:为什么我的“牛马Agent”比“数字分身”更聪明? 最近AI领域爆火的 Agent Skills 是什么? 从计算机科学的视角来看拖延症 一周改6个库后我悟了:AI时代,程序员正在退化成“甲方” 使用n8n做一个自动同步更新的Github项目问答机器人 Agent设计模式——第 1 章:提示词链 Agent设计模式——附录 D - 使用 AgentSpace 构建 Agent Agent设计模式——第 19 章:评估和监控 Agent设计模式——第 10 章:模型上下文协议 (MCP) Agent设计模式——第 21 章:探索和发现 Agent设计模式——智能体设计模式 Agent设计模式——第 11 章:目标设定和监控 Agent设计模式——第 9 章:学习和适应 Agent设计模式——第 16 章:资源感知优化 Agent设计模式——附录 G - 编码 Agent Agent设计模式——第 13 章:人机协同 Agent设计模式——第 17 章:推理技术 Agent设计模式——附录 F - 深入剖析:Agent 推理引擎的内部运作机制 Agent设计模式——章节目录 Agent设计模式—— Agent设计模式——第 7 章:多 Agent 协作 Agent设计模式——附录 E - 命令行界面中的 AI Agent Agent设计模式——附录 C - Agentic 框架快速概览 Agent设计模式——第 3 章:并行化 Agent设计模式——**常见问题解答:Agentic 设计模式** Agent设计模式——第 14 章:知识检索(RAG) Agent设计模式——第 18 章:Guardrails/安全模式 Agent设计模式——第 15 章:Agent 间通信(A2A) Agent设计模式——第 8 章:内存管理 Agent设计模式——第 12 章:异常处理和恢复 Agent设计模式——第 4 章:反思 Agent设计模式——附录 B - AI Agentic 交互:从图形界面到现实世界环境 Agent设计模式——第 5 章:工具使用(函数调用) Agent设计模式——结论 Agent设计模式——第 6 章:规划 Agent设计模式——第 2 章:路由 从经验主义到贝叶斯理论:如何排查线上问题 我用AI为自己造了一把安全的开发者“瑞士军刀”” 从LLM和MCP的协同过程看如何做优化 打通Dify与AI工具生态:将Workflow转为MCP工具的实践 一文了解知识库背后的技术RAG AI应用的五个级别:从入门到专家的进阶之路 一文入门AI圈最近爆火的MCP协议 HTTP/3:性能改进(第 2 部分) deepseek-r1祛魅:从过度热捧到理性认知⁠ 为什么AI智能体需要工作流 如何用GPT-4o解读视频 json命令行处理神器jq介绍 OpenAI的结构化浅析 从大模型的原理到提示词优化 从经济学原理看团队分工合作 [翻译]关于人工智能的30个思考 从马斯洛需求层次理论谈职场激励 知识与智慧 如何使用大语言模型绘制专业图表 两个开源项目打造自己的大模型聚合平台 我让gpt4o给我推荐了一千多次书 得到了这些数据 用Langchain创建一个可以总结网页内容的Agent 推荐一个好用的命令行工具ShellGPT 关于ffmpeg height not divisible by 2的错误 使用Certbot解决https证书自动更新的问题 Spring Cache简明教程 软件开发中的抓大放小vs极致细节思维 OpenAI Assistants-API简明教程 OpenAI的多函数调用(Multiple Function Calling)简介 如何使用ffmpeg制作透明背景的视频 spring-kafka中ContainerProperties.AckMode详解 如何在地图上寻找最密集点的位置? IO密集型服务提升性能的三种方法 职场中的基本归因错误和自利归因 使用javax.validation.constraints校验参数合法性 Java Optional:让你的代码更优雅 ChatGPT函数调用初体验:让ChatGPT具备抓取网页文本的能力 如何使用ChatGPT提升自己的“码”力? 使用ffmpeg拼接两张图片 ThreadPoolExecutor——高效处理并发任务的必备良器 从CPU的视角看 多线程代码为什么那么难写! 使用ffmpeg缩小视频体积的几种方式 Linux parallel 命令使用手册 为什么说过早优化是万恶之源? Linux xargs命令介绍 深入理解Spring的事件通知机制 Java高并发之CyclicBarrier简介 聊一聊过度设计! 详解Redisson分布式限流的实现原理 Java中使用HashMap时指定初始化容量性能一定会更好吗? 如何用ffmpeg截取视频片段&截取时间不准确的坑 XINDOO的2022年年终总结 使用ffmpeg将视频转成HLS(m3u8)格式 谷歌Guava LoadingCache介绍
Agent设计模式——第 20 章:优先级排序
xindoo · 2025-10-05 · via XINDOO

在复杂、动态的环境中,Agent 经常会遇到大量潜在的行动、相互冲突的目标以及有限的资源。如果没有明确的流程来确定后续行动,Agent 可能会遭遇效率降低、操作延迟或无法实现关键目标的情况。优先级排序模式通过使 Agent 能够根据重要性、紧迫性、依赖关系和既定标准来评估和排序任务、目标或行动,从而解决这一问题。这确保了 Agent 将精力集中在最关键的任务上,从而提高有效性和目标一致性。

优先级排序模式概述

Agent 使用优先级排序来有效管理任务、目标和子目标,指导后续行动。这个过程有助于在处理多个需求时做出明智的决策,优先处理重要或紧急的活动,而不是不太关键的活动。这在资源受限、时间有限以及目标可能冲突的实际场景中尤为相关。

Agent 优先级排序的基本方面通常涉及几个要素。首先,标准定义建立用于任务评估的规则或指标。这些可能包括紧急性(任务的时间敏感性)、重要性(对主要目标的影响)、依赖关系(该任务是否是其他任务的前提条件)、资源可用性(必要工具或信息的就绪状态)、成本/收益分析(努力与预期结果的对比),以及个性化 Agent 的用户偏好。其次,任务评估涉及根据这些定义的标准评估每个潜在任务,利用从简单规则到 LLM 复杂评分或推理的各种方法。第三,调度或选择逻辑是指基于评估结果选择最优下一步行动或任务序列的算法,可能利用队列或高级规划组件。最后,动态重新优先级排序允许 Agent 随着情况变化修改优先级,例如新关键事件的出现或截止日期的临近,确保 Agent 的适应性和响应能力。

优先级排序可以在各个层面发生:选择总体目标(高层次目标优先级排序)、在计划内排序步骤(子任务优先级排序)或从可用选项中选择下一个即时行动(行动选择)。有效的优先级排序使 Agent 能够展现更智能、更高效、更稳健的行为,特别是在复杂的多目标环境中。这反映了人类团队组织,其中管理者通过考虑所有成员的输入来优先处理任务。

实际应用和用例

在各种实际应用中,AI Agent 展示了对优先级排序的复杂运用,以做出及时有效的决策。

  • 自动化客户支持:Agent 优先处理紧急请求,如系统停机报告,而不是日常事务,如密码重置。他们还可能优先处理高价值客户。
  • 云计算:AI 通过优先将资源分配给高峰需求期间的关键应用程序来管理和调度资源,同时将不太紧急的批处理作业推迟到非高峰时段以优化成本。
  • 自动驾驶系统:持续优先处理行动以确保安全和效率。例如,为避免碰撞而刹车优先于保持车道纪律或优化燃油效率。
  • 金融交易:交易机器人通过分析市场条件、风险承受能力、利润率和实时新闻等因素来优先处理交易,实现高优先级交易的快速执行。
  • 项目管理:AI Agent 根据截止日期、依赖关系、团队可用性和战略重要性来优先处理项目板上的任务。
  • 网络安全:监控网络流量的 Agent 通过评估威胁严重性、潜在影响和资产关键性来优先处理警报,确保对最危险威胁的即时响应。
  • 个人助理 AI:利用优先级排序来管理日常生活,根据用户定义的重要性、即将到来的截止日期和当前上下文来组织日历事件、提醒和通知。

这些示例共同说明了优先级排序能力对于增强 AI Agent 在各种情况下的性能和决策能力是多么基础。

实践代码示例

以下演示了使用 LangChain 开发项目管理 AI Agent。该 Agent 促进任务的创建、优先级排序和分配给团队成员,说明了大型语言模型与定制工具在自动化项目管理中的应用。

import os
import asyncio
from typing import List, Optional, Dict, Type
from dotenv import load_dotenv
from pydantic import BaseModel, Field
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.tools import Tool
from langchain_openai import ChatOpenAI
from langchain.agents import AgentExecutor, create_react_agent
from langchain.memory import ConversationBufferMemory

## --- 0. 配置和设置 ---
## 从 .env 文件加载 OPENAI_API_KEY。
load_dotenv()

## ChatOpenAI 客户端自动从环境中获取 API 密钥。
llm = ChatOpenAI(temperature=0.5, model="gpt-4o-mini")

## --- 1. 任务管理系统 ---
class Task(BaseModel):
    """表示系统中的单个任务。"""
    id: str
    description: str
    priority: Optional[str] = None  # P0, P1, P2
    assigned_to: Optional[str] = None # 工作人员的名字

class SuperSimpleTaskManager:
    """一个高效且稳健的内存任务管理器。"""
    def __init__(self):
        # 使用字典实现 O(1) 查找、更新和删除。
        self.tasks: Dict[str, Task] = {}
        self.next_task_id = 1

    def create_task(self, description: str) -> Task:
        """创建并存储一个新任务。"""
        task_id = f"TASK-{self.next_task_id:03d}"
        new_task = Task(id=task_id, description=description)
        self.tasks[task_id] = new_task
        self.next_task_id += 1
        print(f"DEBUG: 任务已创建 - {task_id}: {description}")
        return new_task

    def update_task(self, task_id: str, **kwargs) -> Optional[Task]:
        """使用 Pydantic 的 model_copy 安全地更新任务。"""
        task = self.tasks.get(task_id)
        if task:
            # 使用 model_copy 进行类型安全的更新。
            update_data = {k: v for k, v in kwargs.items() if v is not None}
            updated_task = task.model_copy(update=update_data)
            self.tasks[task_id] = updated_task
            print(f"DEBUG: 任务 {task_id} 已更新为 {update_data}")
            return updated_task
        print(f"DEBUG: 未找到任务 {task_id} 进行更新。")
        return None

    def list_all_tasks(self) -> str:
        """列出系统中当前的所有任务。"""
        if not self.tasks:
            return "系统中没有任务。"

        task_strings = []
        for task in self.tasks.values():
            task_strings.append(
                f"ID: {task.id}, 描述: '{task.description}', "
                f"优先级: {task.priority or 'N/A'}, "
                f"分配给: {task.assigned_to or 'N/A'}"
            )
        return "当前任务:\n" + "\n".join(task_strings)

task_manager = SuperSimpleTaskManager()

## --- 2. 项目管理 Agent 的工具 ---
## 使用 Pydantic 模型作为工具参数以获得更好的验证和清晰度。
class CreateTaskArgs(BaseModel):
    description: str = Field(description="任务的详细描述。")

class PriorityArgs(BaseModel):
    task_id: str = Field(description="要更新的任务 ID,例如 'TASK-001'。")
    priority: str = Field(description="要设置的优先级。必须是以下之一:'P0'、'P1'、'P2'。")

class AssignWorkerArgs(BaseModel):
    task_id: str = Field(description="要更新的任务 ID,例如 'TASK-001'。")
    worker_name: str = Field(description="要分配任务的工作人员的名字。")

def create_new_task_tool(description: str) -> str:
    """使用给定的描述创建一个新的项目任务。"""
    task = task_manager.create_task(description)
    return f"已创建任务 {task.id}: '{task.description}'。"

def assign_priority_to_task_tool(task_id: str, priority: str) -> str:
    """为给定的任务 ID 分配优先级(P0、P1、P2)。"""
    if priority not in ["P0", "P1", "P2"]:
        return "优先级无效。必须是 P0、P1 或 P2。"
    task = task_manager.update_task(task_id, priority=priority)
    return f"已为任务 {task.id} 分配优先级 {priority}。" if task else f"未找到任务 {task_id}。"

def assign_task_to_worker_tool(task_id: str, worker_name: str) -> str:
    """将任务分配给特定的工作人员。"""
    task = task_manager.update_task(task_id, assigned_to=worker_name)
    return f"已将任务 {task.id} 分配给 {worker_name}。" if task else f"未找到任务 {task_id}。"

## PM Agent 可以使用的所有工具
pm_tools = [
    Tool(
        name="create_new_task",
        func=create_new_task_tool,
        description="首先使用此工具创建一个新任务并获取其 ID。",
        args_schema=CreateTaskArgs
    ),
    Tool(
        name="assign_priority_to_task",
        func=assign_priority_to_task_tool,
        description="使用此工具在创建任务后为其分配优先级。",
        args_schema=PriorityArgs
    ),
    Tool(
        name="assign_task_to_worker",
        func=assign_task_to_worker_tool,
        description="使用此工具在创建任务后将其分配给特定的工作人员。",
        args_schema=AssignWorkerArgs
    ),
    Tool(
        name="list_all_tasks",
        func=task_manager.list_all_tasks,
        description="使用此工具列出所有当前任务及其状态。"
    ),
]

## --- 3. 项目管理 Agent 定义 ---
pm_prompt_template = ChatPromptTemplate.from_messages([
    ("system", """你是一个专注的项目管理 LLM Agent。你的目标是高效地管理项目任务。
       当你收到新的任务请求时,遵循以下步骤:
    1.  首先,使用 `create_new_task` 工具创建具有给定描述的任务。你必须首先执行此操作以获取 `task_id`。
    2.  接下来,分析用户的请求以查看是否提到了优先级或受让人。
        - 如果提到优先级(例如,"紧急"、"ASAP"、"关键"),将其映射到 P0。使用 `assign_priority_to_task`。
        - 如果提到工作人员,使用 `assign_task_to_worker`。
    3.  如果缺少任何信息(优先级、受让人),你必须做出合理的默认分配(例如,分配 P1 优先级并分配给 'Worker A')。
    4.  一旦任务完全处理完毕,使用 `list_all_tasks` 显示最终状态。
       可用的工作人员:'Worker A'、'Worker B'、'Review Team'
    优先级级别:P0(最高)、P1(中等)、P2(最低)
    """),
    ("placeholder", "{chat_history}"),
    ("human", "{input}"),
    ("placeholder", "{agent_scratchpad}")
])

## 创建 Agent 执行器
pm_agent = create_react_agent(llm, pm_tools, pm_prompt_template)
pm_agent_executor = AgentExecutor(
    agent=pm_agent,
    tools=pm_tools,
    verbose=True,
    handle_parsing_errors=True,
    memory=ConversationBufferMemory(memory_key="chat_history", return_messages=True)
)

## --- 4. 简单交互流程 ---
async def run_simulation():
    print("--- 项目管理模拟 ---")
    # 场景 1:处理新的紧急功能请求
    print("\n[用户请求] 我需要尽快实现一个新的登录系统。它应该分配给 Worker B。")
    await pm_agent_executor.ainvoke({"input": "创建一个实现新登录系统的任务。这很紧急,应该分配给 Worker B。"})
    print("\n" + "-"*60 + "\n")

    # 场景 2:处理细节较少的不太紧急的内容更新
    print("[用户请求] 我们需要审查营销网站内容。")
    await pm_agent_executor.ainvoke({"input": "管理一个新任务:审查营销网站内容。"})
    print("\n--- 模拟完成 ---")

## 运行模拟
if __name__ == "__main__":
    asyncio.run(run_simulation())

此代码使用 Python 和 LangChain 实现了一个简单的任务管理系统,旨在模拟由大型语言模型驱动的项目管理 Agent。

该系统采用 [SuperSimpleTaskManager](chapters/Chapter 20_ Prioritization.md:46) 类在内存中高效管理任务,利用字典结构实现快速数据检索。每个任务由 [Task](chapters/Chapter 20_ Prioritization.md:43) Pydantic 模型表示,该模型包含唯一标识符、描述性文本、可选的优先级级别(P0、P1、P2)和可选的受让人指定等属性。内存使用量根据任务类型、工作人员数量和其他因素而变化。任务管理器提供用于任务创建、任务修改和检索所有任务的方法。

Agent 通过一组定义的工具与任务管理器交互。这些工具促进新任务的创建、向任务分配优先级、将任务分配给人员以及列出所有任务。每个工具都被封装以与 [SuperSimpleTaskManager](chapters/Chapter 20_ Prioritization.md:46) 的实例交互。Pydantic 模型用于描述工具所需的参数,从而确保数据验证。

[AgentExecutor](chapters/Chapter 20_ Prioritization.md:104) 配置了语言模型、工具集和对话内存组件以保持上下文连续性。定义了特定的 [ChatPromptTemplate](chapters/Chapter 20_ Prioritization.md:92) 来指导 Agent 在项目管理角色中的行为。提示词指示 Agent 首先创建任务,随后根据指定分配优先级和人员,并以全面的任务列表结束。在缺少信息的情况下,提示词中规定了默认分配,例如 P1 优先级和 'Worker A'。

代码包含一个异步性质的模拟函数([run_simulation](chapters/Chapter 20_ Prioritization.md:112))来演示 Agent 的操作能力。模拟执行两个不同的场景:管理具有指定人员的紧急任务,以及管理具有最少输入的不太紧急的任务。由于在 [AgentExecutor](chapters/Chapter 20_ Prioritization.md:104) 中激活了 verbose=True,Agent 的行动和逻辑过程会输出到控制台。

概览

定义(What): 在复杂环境中运行的 AI Agent 面临大量潜在行动、相互冲突的目标和有限的资源。如果没有明确的方法来确定下一步行动,这些 Agent 将面临效率低下和效果不佳的风险。这可能导致严重的操作延迟或完全无法完成主要目标。核心挑战是管理这一压倒性数量的选择,以确保 Agent 有目的性和逻辑性地行动。

原因(Why): 优先级排序模式通过使 Agent 能够对任务和目标进行排序,为这个问题提供了标准化的解决方案。这是通过建立明确的标准(如紧急性、重要性、依赖关系和资源成本)来实现的。然后 Agent 根据这些标准评估每个潜在行动,以确定最关键和最及时的行动方案。这种 Agentic 能力允许系统动态适应不断变化的环境并有效管理受限资源。通过专注于最高优先级的项目,Agent 的行为变得更加智能、稳健,并与其战略目标保持一致。

经验法则(Rule of thumb): 当 Agentic 系统必须在资源约束下自主管理多个(通常是相互冲突的)任务或目标,以在动态环境中有效运行时,使用优先级排序模式。

视觉总结:

** **

图 1:优先级排序设计模式

关键要点

  • 优先级排序使 AI Agent 能够在复杂的多方面环境中有效运作。
  • Agent 利用既定标准(如紧急性、重要性和依赖关系)来评估和排序任务。
  • 动态重新优先级排序允许 Agent 根据实时变化调整其操作焦点。
  • 优先级排序发生在各个层面,包括总体战略目标和即时战术决策。
  • 有效的优先级排序可提高 AI Agent 的效率和操作稳健性。

结论

总之,优先级排序模式是有效 Agentic AI 的基石,使系统能够有目的性和智能地应对动态环境的复杂性。它允许 Agent 自主评估大量相互冲突的任务和目标,对在哪里集中其有限资源做出合理的决策。这种 Agentic 能力超越了简单的任务执行,使系统能够充当主动的战略决策者。通过权衡紧急性、重要性和依赖关系等标准,Agent 展示了复杂的、类似人类的推理过程。

这种 Agentic 行为的关键特征是动态重新优先级排序,它赋予 Agent 在条件变化时实时调整其焦点的自主权。如代码示例所示,Agent 解释模糊的请求,自主选择和使用适当的工具,并逻辑地排列其行动以实现其目标。这种自我管理工作流程的能力是真正的 Agentic 系统与简单的自动化脚本的区别所在。最终,掌握优先级排序对于创建能够在任何复杂的实际场景中有效可靠地运行的稳健和智能 Agent 至关重要。

参考文献

  1. Examining the Security of Artificial Intelligence in Project Management: A Case Study of AI-driven Project Scheduling and Resource Allocation in Information Systems Projects ; https://www.irejournals.com/paper-details/1706160
  2. AI-Driven Decision Support Systems in Agile Software Project Management: Enhancing Risk Mitigation and Resource Allocation; https://www.mdpi.com/2079-8954/13/3/208

本文来源于开源项目Agentic Design Patterns中文翻译