Agent设计模式 V1:21种Agent工程视角设计模式卡片

5 阅读36分钟

Agent工程视角 (B#) - 21种:覆盖目标理解、推理规划、协作执行、治理评估的全生命周期

B#1:提示词链 (Prompt Chaining)

B#2:路由 (Routing)

B#3:并行化 (Parallelization)

B#4:反思 (Reflection)

B#5:工具使用 (Tool Use)

B#6:规划 (Planning)

B#7:多Agent协作 (Multi-Agent Collaboration)

B#8:记忆管理 (Memory Management)

B#9:学习和适应 (Learning and Adaptation)

B#10:模型上下文协议 (MCP) (Model Context Protocol)

B#11:目标设定和监控 (Goal Setting and Monitoring)

B#12:异常处理和恢复 (Exception Handling and Recovery)

B#13:人机协同 (Human-in-the-Loop)

B#14:知识检索 (RAG) (Knowledge Retrieval)

B#15:Agent间通信 (Agent-to-Agent Communication)

B#16:资源感知优化 (Resource-Aware Optimization)

B#17:推理技术 (Reasoning Techniques)

B#18:Guardrails / 安全模式 (Guardrails / Safety Patterns)

B#19:评估和监控 (Evaluation and Monitoring)

B#20:优先级排序 (Priority Ordering)

B#21:探索和发现 (Exploration and Discovery)


模式卡 #B1:提示词链(Prompt Chaining)

项目内容
分类II. 输入/输出结构化与接口标准化层(Agent工程视角)
意图将复杂任务拆解为一系列顺序执行的子任务,每个子任务的 LLM 输出经结构化处理后作为下一任务的输入,形成可控、可测试的推理流水线
适用场景- 多跳问答(如“先查数据,再分析趋势,最后生成报告”)- 需要中间结果校验或人工介入的流程- 提示工程需分阶段优化(如先摘要再翻译)
工作机制1. 定义任务分解图(DAG 或线性链)2. 为每个子任务设计专用提示模板与输出格式约束3. 执行引擎按序调用 LLM,解析前序输出并注入下一提示4. 支持失败重试、跳过或降级策略
优势- 将不可靠的端到端生成转化为可靠分步推理- 每步可独立测试、监控与优化- 支持混合人工/自动节点(Human-in-the-Loop)
局限- 增加延迟与 token 消耗- 错误在链中传播,需健壮的异常处理- 链式依赖限制并行优化空间
典型组合+ 提示/响应优化器(A#3)+ 异常处理和恢复(B#12)+ 资源感知优化(B#16)
反模式警示1. 在可单步完成的任务中强行拆链,造成性能浪费2. 未对中间输出做格式校验,导致下游提示注入脏数据

| 伪代码示意 |

chain = [
    {"prompt": "Summarize: {input}", "output_key": "summary"},
    {"prompt": "Translate to French: {summary}", "output_key": "translation"}
]

context = {"input": user_query}
for step in chain:
    response = llm(step["prompt"].format(**context))
    parsed = json_or_regex_parse(response)  # Enforce structure
    context[step["output_key"]] = parsed

final_output = context["translation"]

模式卡 #B2:路由(Routing)

项目内容
分类I. 目标理解与任务入口层(Agent工程视角)
意图根据用户请求的语义特征、复杂度或上下文,动态选择最优处理路径(如直连 LLM、调用专用模块、转交专家 Agent)
适用场景- 系统支持多种能力(聊天、工具调用、文档问答)- 需区分简单查询与复杂任务以优化资源- 多租户或多业务线场景下的请求分发
工作机制1. 接收原始用户输入2. 使用轻量模型/规则/嵌入相似度判断任务类型3. 将请求路由至对应处理器(如 RAG 模块、代码解释器、客服 Agent)4. 可支持 fallback 机制(如主路由失败转备用)
优势- 提升系统整体效率与资源利用率- 实现能力解耦,便于模块独立演进- 支持灰度发布与 A/B 测试
局限- 路由逻辑本身可能出错,导致任务错配- 增加系统架构复杂度- 需持续维护路由规则或训练分类模型
典型组合+ 被动/主动目标创建者(A#1/A#2)+ 目标设定和监控(B#11)+ 工具使用(B#5)
反模式警示1. 路由规则过于简单(如关键词匹配),无法处理语义相近但意图不同的请求2. 未设置默认路由,导致未知请求被丢弃

| 伪代码示意 |

def route_request(query: str):
    intent = lightweight_classifier(query)  # e.g., "tool_use", "chat", "rag"
    
    if intent == "tool_use" and has_tool_match(query):
        return ToolExecutor().handle(query)
    elif intent == "rag" and mentions_documents(query):
        return RAGModule().handle(query)
    else:
        return SimpleLLMChat().handle(query)  # default path

模式卡 #B3:并行化(Parallelization)

项目内容
分类VIII. 执行调度与资源优化层(Agent工程视角)
意图识别任务中可独立执行的子任务,通过多线程、异步 IO 或分布式执行加速整体流程,提升吞吐与响应速度
适用场景- 多工具调用无依赖(如同时查天气、股票、新闻)- Ensemble 推理(多个模型并行生成)- 批量处理多个用户请求或子问题
工作机制1. 分析任务依赖图,识别无前驱的可并行节点2. 启动并发执行单元(线程池、async task、worker 进程)3. 收集所有结果,按需聚合或排序4. 处理部分失败(如超时、错误)而不阻塞整体
优势- 显著降低端到端延迟- 提高硬件资源利用率- 支持弹性扩缩容
局限- 并非所有任务可并行(存在数据或逻辑依赖)- 增加内存与协调开销- 调试与日志追踪更复杂
典型组合+ 工具使用(B#5)+ 多Agent协作(B#7)+ 资源感知优化(B#16)
反模式警示1. 对强依赖任务强行并行,导致结果不一致或死锁2. 未限制并发数,在高负载下耗尽系统资源

| 伪代码示意 |

async def parallel_execute(actions):
    tasks = [asyncio.create_task(tool_executor(action)) for action in actions]
    results = await asyncio.gather(*tasks, return_exceptions=True)
    return [r for r in results if not isinstance(r, Exception)]  # handle partial failure

模式卡 #B4:反思(Reflection)

项目内容
分类V. 反思、记忆与持续学习层(Agent工程视角)
意图在任务完成后执行系统性复盘,基于执行轨迹生成结构化改进建议,并更新策略、记忆或配置,实现行为优化闭环
适用场景- 任务失败或用户反馈负面- 成功案例需沉淀为经验- 长期运行的自主 Agent 需持续进化
工作机制1. 记录完整执行轨迹(目标、动作、观察、结果)2. 触发反思模块(自动或手动)3. 调用 LLM 分析成败原因:“哪里出错?如何改进?”4. 将结论写入长期记忆或调整决策参数(如提高某工具调用阈值)
优势- 将一次性经验转化为可复用知识- 减少重复错误,提升长期可靠性- 支持个性化适应(如用户偏好学习)
局限- 反思质量依赖 LLM 判断,可能归因错误- 需设计安全机制防止策略退化- 存储与检索反思记录带来额外开销
典型组合+ 自我/交叉/人类反思(A#9–A#11)+ 记忆管理(B#8)+ 学习和适应(B#9)
反模式警示1. 未验证反思结论就直接更新策略,导致系统不稳定2. 反思仅记录不行动,沦为“日志存档”而非“学习机制”

| 伪代码示意 |

def post_task_reflection(execution_trace):
    if execution_trace.failed or user_gave_negative_feedback():
        critique = llm(f"""
        Analyze this failed task:
        Goal: {trace.goal}
        Actions: {trace.actions}
        Observations: {trace.observations}
        What went wrong? How to improve?
        """)
        memory.store(reflection=critique, task_type=trace.task_type)
        strategy.update_policy(critique)  # e.g., adjust tool selection logic

模式卡 #B5:工具使用(Tool Use)

项目内容
分类III. 动态知识获取与工具集成层(Agent工程视角)
意图使 Agent 能够在运行时调用外部函数、API 或服务以扩展其能力边界,将 LLM 的“思考”转化为可执行的“行动”
适用场景- 需要实时数据(如天气、股价、数据库查询)- 执行物理或数字操作(如发邮件、控制设备、生成图表)- 弥补 LLM 知识截止或计算能力不足(如数学求解、代码执行)
工作机制1. 定义工具集合及其接口规范(名称、参数、描述)2. LLM 根据任务上下文决定是否调用工具及调用哪个工具3. 执行引擎解析 LLM 输出的工具调用指令(如 JSON)4. 调用真实工具并获取结构化结果5. 将结果作为新观察注入对话历史,供后续推理使用
优势- 突破 LLM 静态知识限制,实现“活”的智能体- 支持闭环任务完成(感知→决策→行动→反馈)- 可组合多个工具构建复杂工作流
局限- 工具调用增加延迟与失败风险- 错误的参数传递可能导致系统异常- 需处理认证、限流、错误码等工程细节
典型组合+ 增量模型查询(A#6)+ 路由(B#2)+ 工具/Agent注册中心(A#15)+ 异常处理和恢复(B#12)
反模式警示1. 允许 LLM 自由生成任意函数调用,导致安全漏洞(如 exec("rm -rf /"))2. 未对工具输出做校验,直接拼接进提示,引发格式污染

| 伪代码示意 |

tools = {
    "get_weather": lambda city: weather_api(city),
    "send_email": lambda to, body: smtp_client.send(to, body)
}

action = llm(f"Task: {task}\nAvailable tools: {list(tools.keys())}")
if is_tool_call(action):
    tool_name, args = parse_tool_call(action)  # e.g., {"name": "get_weather", "args": {"city": "Beijing"}}
    observation = tools[tool_name](**args)
    history += f"\nAction: {tool_name}({args})\nObservation: {observation}"

模式卡 #B6:规划(Planning)

项目内容
分类IV. 多步规划、推理与探索层(Agent工程视角)
意图在任务执行前或执行中生成结构化的行动计划(如步骤列表、状态机、DAG),指导 Agent 分阶段、有条件地完成复杂目标
适用场景- 多步骤任务(如“组织会议:查日历→发邀请→准备材料”)- 需要条件分支或回滚机制(如“若 API 失败则重试或换备用”)- 合规或审计要求预声明操作序列
工作机制1. LLM 基于目标生成初始计划(线性或带分支)2. 规划引擎解析计划为可执行单元(如任务图)3. 按计划顺序或依赖关系调度执行4. 支持运行时重规划(如遇障碍重新生成子计划)
优势- 提升复杂任务的可预测性与可控性- 支持人类预审或干预关键节点- 便于日志记录与事后分析
局限- 初始规划可能脱离实际环境状态- 动态重规划增加系统复杂度- 过度规划可能导致“分析瘫痪”
典型组合+ 单/多路径规划生成器(A#7/A#8)+ 目标设定和监控(B#11)+ 图/状态机编排(B#6 的工程实现载体)
反模式警示1. 在开放域探索任务中强制使用静态计划,丧失适应性2. 计划未包含失败处理路径,导致流程中断

| 伪代码示意 |

plan = llm(f"Generate a step-by-step plan to: {goal}. Output as JSON list of actions.")
task_graph = TaskGraph.from_json(plan)

for task in task_graph.topological_order():
    result = execute(task)
    if task.on_failure and not result.success:
        execute(task.on_failure)  # fallback action

模式卡 #B7:多Agent协作(Multi-Agent Collaboration)

项目内容
分类VI. 多智能体协作与通信层(Agent工程视角)
意图通过多个专业化 Agent 的分工、通信与协调,共同完成单个 Agent 无法胜任的复杂、跨领域任务
适用场景- 需要多领域专家(如研究员+程序员+编辑)- 任务天然可分解(如市场分析→产品设计→技术实现)- 构建辩论、投票或审查机制以提升决策质量
工作机制1. 定义 Agent 角色、能力与通信协议(如 MCP、消息队列)2. 设计协作拓扑(流水线、环形、星型、去中心化)3. 实现消息传递、任务委派与状态同步机制4. 支持动态加入/退出、负载均衡与故障转移
优势- 利用群体智能解决超复杂问题- 提升系统模块化与可维护性- 支持弹性扩展与容错
局限- 通信开销与协调成本显著增加- 需解决一致性、死锁、信息过载等问题- 调试与可观测性挑战大
典型组合+ 基于角色/投票/辩论的合作(A#13/A#12/A#14)+ Agent间通信(B#15)+ 目标设定和监控(B#11)
反模式警示1. 无明确协作协议,导致 Agent 互相覆盖或忽略彼此输出2. 所有 Agent 共享同一上下文,造成信息冗余与 token 浪费

| 伪代码示意 |

researcher = Agent(role="Researcher", tools=[web_search])
writer = Agent(role="Writer", tools=[doc_generator])

# Sequential collaboration
research_result = researcher.run("Find latest AI trends in 2026")
report = writer.run(f"Write a report based on: {research_result}")

# Or via message bus
message_bus.publish("research_done", research_result)
writer.listen("research_done", lambda data: generate_report(data))

模式卡 #B8:记忆管理(Memory Management)

项目内容
分类V. 反思、记忆与持续学习层(Agent工程视角)
意图为 Agent 提供短期(上下文)与长期(持久化)记忆能力,支持信息检索、经验复用与个性化适应
适用场景- 多轮对话需保持上下文连贯- 用户偏好或历史行为需长期记住(如“用户喜欢简洁风格”)- 从过往成功/失败案例中学习策略
工作机制1. 短期记忆:维护对话历史窗口(如最近 5 轮)2. 长期记忆:将关键信息向量化并存入向量数据库3. 在每次请求前,检索相关记忆片段注入提示4. 支持记忆更新、遗忘(TTL)与隐私擦除
优势- 显著提升用户体验连续性与个性化水平- 减少重复提问,提高效率- 为反思与学习提供数据基础
局限- 记忆检索可能引入噪声或无关信息- 存储与索引带来额外成本- 隐私与合规风险(如 GDPR “被遗忘权”)
典型组合+ RAG(A#4)+ 人类反思(A#11)+ 学习和适应(B#9)+ Guardrails(B#18)(控制记忆写入权限)
反模式警示1. 无差别记录所有对话,导致隐私泄露或存储爆炸2. 未对记忆内容做摘要或过滤,检索返回大量低价值信息

| 伪代码示意 |

# On new user message
relevant_memories = vector_db.search(embed(user_message), k=3)
prompt = f"User context:\n{relevant_memories}\n\nCurrent query: {user_message}"

response = llm(prompt)

# After interaction, decide what to remember
if is_important_event(response):
    memory_entry = summarize_interaction(user_message, response)
    vector_db.store(embed(memory_entry), metadata={"user_id": uid, "ttl": 30_days})

模式卡 #B9:学习和适应(Learning and Adaptation)

项目内容
分类V. 反思、记忆与持续学习层(Agent工程视角)
意图使 Agent 能够基于交互历史、用户反馈或环境变化,动态调整其行为策略、知识表示或决策逻辑,实现长期性能提升与个性化适配
适用场景- 用户偏好随时间演变(如写作风格、信息密度)- 系统需从错误中自动修复(如工具调用失败后改用替代方案)- 多租户环境中为不同组织定制行为模式
工作机制1. 收集反馈信号(显式评分、隐式行为、任务成功率)2. 触发学习机制(在线微调、提示模板更新、策略规则修改)3. 将新策略持久化至配置或记忆系统4. 在后续任务中应用更新后的策略,并持续评估效果
优势- 提升用户体验粘性与满意度- 减少人工维护成本,实现自优化- 支持情境感知的智能响应
局限- 学习过程可能不稳定或收敛到局部最优- 需防止过拟合个别用户或噪声反馈- 涉及模型更新时存在版本管理与回滚挑战
典型组合+ 记忆管理(B#8)+ 人类反思(A#11)+ 目标设定和监控(B#11)+ Guardrails(B#18)(约束学习边界)
反模式警示1. 未设置学习速率或置信度阈值,导致策略频繁震荡2. 允许恶意用户通过负反馈“毒化”系统行为

| 伪代码示意 |

if user_feedback == "too verbose":
    current_profile = load_user_profile(user_id)
    current_profile["response_style"] = "concise"
    update_prompt_template(current_profile)
    save_user_profile(user_id, current_profile)

# Or via reinforcement signal
if task_success:
    reinforce_tool_selection(tool_used, context)
else:
    penalize_tool_selection(tool_used, context)

模式卡 #B10:模型上下文协议(MCP)(Model Context Protocol)

项目内容
分类VII. 系统集成、治理与可观测性层(Agent工程视角)
意图提供标准化接口协议,使 LLM 能安全、高效地发现、调用和组合外部工具、数据源或服务,实现“一次定义,多处使用”的能力集成
适用场景- 构建可插拔的工具生态系统(如企业内部 API 市场)- 多客户端(IDE、聊天界面、桌面代理)共享同一组工具- 需要细粒度权限控制与审计日志的生产环境
工作机制1. 工具提供者实现 MCP Server,暴露 Tools/Resources/Prompts2. Agent(MCP Host)通过 MCP Client 发现并调用能力3. 通信基于 JSON-RPC 2.0,支持 Stdio、HTTP SSE 或 WebSocket4. 平台处理认证、限流、日志与错误标准化
优势- 解耦 Agent 逻辑与具体工具实现- 支持跨平台、跨语言工具复用- 内置安全与治理能力(只读/执行控制、会话隔离)
局限- 需要工具开发者遵循 MCP 规范- 增加协议解析与网络开销- 调试分布式调用链更复杂
典型组合+ 工具使用(B#5)+ 工具/Agent注册中心(A#15)+ Agent适配器(A#16)(将非 MCP 服务包装为 MCP Server)
反模式警示1. 在单体应用中强行引入 MCP,增加不必要的架构复杂度2. 未配置身份验证,允许任意 Agent 调用高危操作(如删除数据库)

| 伪代码示意 |

# Tool provider (MCP Server)
@mcp.tool
def query_sales_db(region: str) -> list:
    return db.execute("SELECT * FROM sales WHERE region = ?", region)

# Agent (MCP Host)
client = MCPClient("http://sales-tool-server/mcp")
result = client.call_tool("query_sales_db", {"region": "APAC"})

模式卡 #B11:目标设定和监控(Goal Setting and Monitoring)

项目内容
分类IV. 多步规划、推理与探索层(Agent工程视角)
意图将高层用户意图转化为可度量、可追踪的数字化目标,并在执行过程中持续监控进度、检测偏差,触发修正或告警
适用场景- 长周期任务(如“提升用户留存率”)- 多步骤工作流需确保里程碑达成- 高风险操作需实时合规检查(如金融交易限额)
工作机制1. 解析用户意图,生成 SMART 目标(具体、可衡量、可实现、相关、有时限)2. 将目标分解为子目标与关键结果(OKR)3. 在执行中采集指标(如工具输出、状态变化)4. 计算当前状态与目标的偏差,若超阈值则 replan、escalate 或终止
优势- 防止 Agent “迷失方向”或陷入无效循环- 提供任务进展可视化与可解释性- 支持主动干预与资源重分配
局限- 目标形式化本身具有挑战性(尤其模糊请求)- 监控指标设计不当会导致误判- 频繁检查影响性能
典型组合+ 主动/被动目标创建者(A#2/A#1)+ 增量模型查询(A#6)+ 异常处理和恢复(B#12)
反模式警示1. 目标未量化(如“做得更好”),导致无法监控2. 仅监控最终结果,忽略中间过程风险(如合规违规)

| 伪代码示意 |

goal = parse_to_smart_goal("Improve customer satisfaction")
monitor = GoalMonitor(goal, metrics=["csat_score", "response_time"])

while not monitor.is_achieved():
    agent.step()
    current_state = get_current_metrics()
    deviation = monitor.calculate_deviation(current_state)
    
    if deviation > threshold:
        trigger_replan_or_alert(deviation)

模式卡 #B12:异常处理和恢复(Exception Handling and Recovery)

项目内容
分类VIII. 执行调度与资源优化层(Agent工程视角)
意图在 Agent 执行过程中捕获、分类并响应各类异常(工具失败、LLM 幻觉、网络中断等),通过重试、降级、切换路径或人工介入保障任务鲁棒性
适用场景- 调用不可靠外部服务(如第三方 API)- LLM 输出格式错误或逻辑矛盾- 系统资源不足(如 token 超限、内存溢出)
工作机制1. 定义异常类型与严重等级(可恢复 vs 致命)2. 在关键节点设置 try-catch 或超时机制3. 根据异常类型执行恢复策略:  - 重试(带退避)  - 切换备用工具/模型  - 降级功能(如返回缓存结果)  - 请求人类协助4. 记录异常日志用于后续分析
优势- 显著提升系统可用性与用户体验稳定性- 防止小错误引发级联故障- 支持优雅降级而非直接崩溃
局限- 恢复逻辑本身可能出错- 过度重试可能导致资源耗尽- 某些异常无法自动恢复(如权限缺失)
典型组合+ 工具使用(B#5)+ 增量模型查询(A#6)+ 人类反思(A#11)(作为最终恢复手段)
反模式警示1. 忽略异常或仅打印日志而不处理,导致任务静默失败2. 对所有异常无差别重试,加剧系统负载

| 伪代码示意 |

try:
    result = tool_api.call(params, timeout=10)
except TimeoutError:
    result = tool_api.call_backup(params)  # fallback
except InvalidOutputError:
    result = llm(f"Fix this invalid output: {raw_output}")
except CriticalError as e:
    alert_human_operator(e)
    raise

模式卡 #B13:人机协同(Human-in-the-Loop)

项目内容
分类VII. 安全、评估与运行时治理层(Agent工程视角)
意图在关键决策点或高风险操作前自动暂停执行,请求人类确认、修正或授权,确保系统行为符合人类意图、伦理规范与业务规则
适用场景- 执行不可逆操作(如删除文件、转账、发布内容)- 输出涉及法律、医疗、金融等高风险领域- LLM 置信度低或存在多解歧义- 需要用户个性化偏好介入(如“按您的风格润色”)
工作机制1. 系统识别高风险上下文(通过规则、模型或策略引擎)2. 自动暂停执行流,生成清晰的待决事项摘要3. 通过 UI/通知通道向人类发起交互请求(批准、修改、拒绝)4. 接收人类反馈后,继续、调整或终止任务流程
优势- 防止自动化系统造成重大损失或伦理事故- 增强用户控制感与信任度- 为模型提供高质量监督信号(用于后续学习)
局限- 引入人为延迟,降低自动化效率- 依赖人类响应及时性与判断质量- 需设计良好的交互界面以降低认知负荷
典型组合+ 多模态护栏(A#17)+ 异常处理和恢复(B#12)+ 人类反思(A#11)+ Guardrails(B#18)
反模式警示1. 过度依赖人工确认,导致“伪自动化”体验2. 请求信息不清晰(如仅问“是否继续?”),使人类无法有效判断

| 伪代码示意 |

if is_high_risk_action(action) or llm_confidence < threshold:
    summary = generate_human_review_summary(action, context)
    decision = request_human_approval(summary)  # e.g., "Approve sending $1000 to Alice?"
    
    if decision == "APPROVE":
        execute(action)
    elif decision == "MODIFY":
        revised_action = get_human_revision()
        execute(revised_action)
    else:
        abort_task()

模式卡 #B14:知识检索(RAG)(Knowledge Retrieval)

项目内容
分类III. 动态知识获取与工具集成层(Agent工程视角)
意图实现检索增强生成(RAG)的工程化组件,包括索引构建、查询重写、结果排序与上下文融合,为 LLM 提供准确、实时的外部知识支持
适用场景- 回答依赖私有文档库(如企业知识库、产品手册)- 需要引用来源或避免幻觉- 知识更新频繁,超出 LLM 训练数据时效
工作机制1. 对外部知识源(PDF、数据库、网页)进行文本提取与分块2. 使用嵌入模型将块向量化并构建索引(如 FAISS、Pinecone)3. 用户查询经重写/扩展后生成嵌入4. 检索 Top-K 相关块,按相关性排序5. 将检索结果拼接进提示上下文供 LLM 生成答案
优势- 显著提升事实准确性与可追溯性- 支持动态知识更新而无需重训练模型- 可控制信息来源范围,提升安全性
局限- 检索质量受分块策略、嵌入模型与查询表述影响- 长文档或多跳推理场景效果有限- 增加系统延迟与存储成本
典型组合+ 检索增强生成(A#4)+ 提示/响应优化器(A#3)(规范引用格式)+ 资源感知优化(B#16)(控制检索深度)
反模式警示1. 未对检索结果做相关性过滤,将噪声注入 LLM 上下文2. 分块过小导致语义断裂,过大导致无关信息混入

| 伪代码示意 |

def rag_retrieve(query: str, top_k: int = 3):
    # Optional: query expansion
    expanded_query = llm(f"Rewrite for better retrieval: {query}")
    
    query_emb = embed(expanded_query)
    results = vector_index.search(query_emb, k=top_k * 2)  # over-retrieve
    
    # Re-rank by cross-encoder or LLM
    reranked = rerank_with_llm(query, results[:top_k])
    
    return "\n".join([r.text for r in reranked])

模式卡 #B15:Agent间通信(Agent-to-Agent Communication)

项目内容
分类VI. 多智能体协作与通信层(Agent工程视角)
意图定义多个 Agent 之间交换消息、状态与任务的标准化机制,确保协作过程的一致性、可靠性和可追溯性
适用场景- 基于角色的流水线协作(如研究员→分析师→撰稿人)- 投票或辩论式多 Agent 决策- 分布式 Agent 系统(跨进程、跨机器)
工作机制1. 定义通信协议(消息格式、字段、语义)2. 选择传输机制(内存队列、消息总线、HTTP、WebSocket)3. 支持同步/异步、广播/点对点、请求-响应/事件驱动模式4. 实现消息序列化、身份认证、去重与 ACK 机制
优势- 使多 Agent 协作可编程、可测试、可监控- 解耦 Agent 实现,支持异构系统集成- 支持复杂协作拓扑(如环形、星型、去中心化)
局限- 通信开销可能成为性能瓶颈- 网络分区或消息丢失需额外容错设计- 协议演进需版本兼容管理
典型组合+ 多Agent协作(B#7)+ 模型上下文协议(MCP, B#10)+ 基于角色/辩论/投票的合作(A#13/A#14/A#12)
反模式警示1. 使用非结构化自然语言直接传递消息,导致解析错误2. 未限制消息大小或频率,在高负载下引发雪崩

| 伪代码示意 |

class A2AMessage:
    def __init__(self, sender: str, receiver: str, content: dict, msg_type: str = "task"):
        self.sender = sender
        self.receiver = receiver
        self.content = content  # e.g., {"task": "analyze data", "data_id": "123"}
        self.timestamp = time.time()
        self.msg_id = uuid4()

# Send via message bus
message_bus.publish(
    topic="agent_tasks",
    message=A2AMessage("planner", "executor", {"action": "run_simulation"})
)

# Receive and process
def on_message(msg: A2AMessage):
    if msg.receiver == self.id:
        handle_task(msg.content)

模式卡 #B16:资源感知优化(Resource-Aware Optimization)

项目内容
分类VIII. 执行调度与资源优化层(Agent工程视角)
意图在任务执行过程中动态监控和管理计算、时间与财务资源(如 token 消耗、延迟、API 成本),通过模型切换、上下文裁剪或降级策略,在预算约束内实现服务质量与效率的最优平衡
适用场景- 高并发免费聊天机器人需控制 API 成本- 实时系统对响应延迟敏感(如客服对话)- 边缘设备部署需节省电量与带宽- 企业平台按部门/用户设置资源配额
工作机制1. 为任务设定资源预算(token 上限、响应时间、费用封顶)2. 实时监控资源消耗速率(如每步 token 增长)3. 当接近阈值时触发优化策略:  - 切换至轻量模型(如 GPT-4o → GPT-4o Mini)  - 裁剪历史上下文(保留核心信息)  - 启用缓存(命中则跳过 LLM 调用)  - 降级功能(返回摘要而非全文)4. 记录资源使用日志用于后续分析
优势- 显著降低运营成本(案例显示可降本 50%–70%)- 保障服务在高负载下的稳定性与 SLA- 支持精细化成本分摊与预算控制
局限- 降级可能导致用户体验波动- 阈值与路由策略需大量调优- 增加系统监控与决策逻辑复杂度
典型组合+ 动态模型切换(A#16 的工程实现)+ 提示/响应优化器(A#3)+ 异常处理和恢复(B#12)(处理超支异常)
反模式警示1. 未设置合理缓冲区,导致频繁触发降级2. 在关键任务(如医疗诊断)中为省成本强制降级,牺牲准确性

| 伪代码示意 |

budget = ResourceBudget(max_tokens=2000, max_cost=0.01)
context = trim_history_if_needed(context, budget.remaining)

if budget.near_limit():
    llm_model = "gpt-4o-mini"  # fallback model
else:
    llm_model = "gpt-4o"

response = call_llm(prompt, model=llm_model)
budget.consume(tokens_used(response), cost(response))

模式卡 #B17:推理技术(Reasoning Techniques)

项目内容
分类IV. 多步规划、推理与探索层(Agent工程视角)
意图将高级推理方法(如思维链 CoT、程序辅助、符号推理)工程化为可配置、可复用的模块,提升 LLM 在复杂任务中的逻辑性、可解释性与正确率
适用场景- 数学/代码/逻辑推理任务- 需要透明推理过程以供审计(如金融风控)- 多跳问答或抽象模式识别(如 ARC 任务)
工作机制1. 根据任务类型选择推理范式:  - CoT:强制 LLM 生成 ... 中间步骤  - ToT(Tree of Thought):维护多个推理路径并评估  - Program-Aided:生成可执行代码并运行验证2. 在提示中注入推理模板与格式约束3. 对推理过程进行解析、校验与后处理4. 支持混合模式(如简单任务直出,复杂任务启用 CoT)
优势- 显著提升复杂任务准确率(尤其数学与代码)- 生成可追溯、可调试的推理链- 支持人类介入修正中间步骤
局限- 增加 token 消耗与延迟- 推理质量依赖提示工程与模型能力- 过度枚举可能导致“复读机”现象
典型组合+ 自我反思(A#9)+ 增量模型查询(A#6)+ 提示/响应优化器(A#3)(规范推理格式)
反模式警示1. 在无需推理的任务(如翻译)中强制启用 CoT,浪费资源2. 未设置 N-gram 重复检测,导致无限循环输出

| 伪代码示意 |

def apply_reasoning_technique(task: str, mode: str = "cot"):
    if mode == "cot":
        prompt = f"""
        <think>
        Let's solve this step by step.
        </think>
        Question: {task}
        """
        response = llm(prompt)
        # Extract final answer after </think>
        return parse_final_answer(response)
    elif mode == "code":
        code = llm(f"Generate Python code to solve: {task}")
        result = execute_sandboxed_code(code)
        return f"Result: {result}"

模式卡 #B18:Guardrails / 安全模式(Guardrails / Safety Patterns)

项目内容
分类VII. 安全、评估与运行时治理层(Agent工程视角)
意图在 Agent 输入、输出及执行全流程中实施多层次安全策略,防止生成有害、偏见、违规或不实内容,确保系统符合法律、伦理与业务规范
适用场景- 面向公众的聊天机器人需过滤不当言论- 企业内部助手需遵守数据保密政策- 生成内容需符合品牌指南或行业标准- 多模态输入需检测 NSFW 或隐私泄露
工作机制1. 输入过滤:检测恶意提示、越狱攻击、隐私数据2. 运行时约束:在提示中注入安全指令(如“不要生成暴力内容”)3. 输出审查:使用规则引擎、分类模型或评判 LLM 检查输出4. 执行拦截:阻止高危工具调用(如删除文件、外发数据)5. 触发动作:屏蔽、修正、告警或转人工
优势- 降低法律与声誉风险- 提升用户信任与合规性(如 GDPR、AI Act)- 支持细粒度策略(按用户、场景、内容类型)
局限- 过度过滤可能损害用户体验或创造力- 对抗性攻击可能绕过静态规则- 多模态内容检测仍存在漏检风险
典型组合+ 多模态护栏(A#17)+ 人机协同(B#13)(高风险内容转人工)+ 异常处理和恢复(B#12)(处理违规事件)
反模式警示1. 仅依赖关键词黑名单,无法识别语义变体(如谐音、编码)2. 未对工具调用参数做安全校验,导致“合法工具,非法使用”

| 伪代码示意 |

def apply_guardrails(input_text, output_text, tool_calls):
    if contains_pii(input_text) or is_jailbreak_attempt(input_text):
        raise BlockedInputError("Input violates policy")
    
    if has_harmful_content(output_text):
        corrected = llm(f"Rewrite safely: {output_text}")
        if still_unsafe(corrected):
            return "I cannot assist with that request."
        else:
            output_text = corrected
    
    for call in tool_calls:
        if call.tool_name in ["delete_file", "send_email"] and not user_has_permission():
            raise PermissionDeniedError()
    
    return output_text

模式卡 #B19:评估和监控(Evaluation and Monitoring)

项目内容
分类VII. 安全、评估与运行时治理层(Agent工程视角)
意图建立自动化指标体系与可观测性管道,对 Agent 的性能、行为合规性与业务影响进行持续量化评估,支撑 A/B 测试、漂移检测与系统优化
适用场景- 生产环境部署后需监控解决率、延迟、错误率- 需验证新提示策略或模型版本是否优于基线- 检测因数据分布变化导致的性能退化(概念漂移)- 生成合规审计报告以满足监管要求
工作机制1. 定义多维指标(准确性、流畅性、安全性、效率、成本)2. 在执行流程中埋点采集原始数据(输入、输出、工具调用、token 消耗)3. 应用自动评估器(规则、嵌入相似度、评判 LLM)计算指标4. 将结果写入时序数据库或日志系统(如 Prometheus、Datadog)5. 设置告警阈值,触发通知或自动回滚
优势- 实现 Agent 能力的客观、可比、可追溯度量- 支持数据驱动的迭代优化与快速故障定位- 满足企业级治理与合规审计需求
局限- 自动评估难以覆盖主观质量(如创造力、同理心)- 高质量标注数据获取成本高- 指标设计偏差可能导致优化目标偏离真实需求
典型组合+ Agent评估器(A#18)+ 自我/交叉反思(A#9/A#10)+ 异常处理和恢复(B#12)(作为告警响应)
反模式警示1. 仅监控延迟与吞吐量,忽略输出质量与安全性2. 评估数据集与线上分布不一致,导致“测试表现好,线上效果差”

| 伪代码示意 |

def monitor_and_evaluate(agent, task):
    start_time = time.time()
    output = agent.run(task)
    latency = time.time() - start_time
    
    # Auto-evaluation
    accuracy_score = llm_judge(f"Rate accuracy of: {output} vs {task.gold_answer}")
    safety_score = safety_classifier(output)
    token_usage = count_tokens(output)
    
    # Log to monitoring system
    metrics_logger.log({
        "latency_sec": latency,
        "accuracy": accuracy_score,
        "safety_violation": safety_score < 0.5,
        "tokens_used": token_usage
    })
    
    if accuracy_score < threshold:
        alert_team("Performance degradation detected")

模式卡 #B20:优先级排序(Priority Ordering)

项目内容
分类VIII. 执行调度与资源优化层(Agent工程视角)
意图根据任务的重要性、紧迫性、依赖关系与资源约束,动态为待处理任务或子目标分配执行优先级,确保关键操作优先完成
适用场景- 客服系统需优先处理高价值客户或系统故障报告- 云计算平台在资源紧张时优先保障核心业务- 个人助理按截止日期与用户偏好排序提醒事项- 网络安全系统对高危威胁告警优先响应
工作机制1. 为每个任务定义优先级维度(紧急性、重要性、依赖、成本/收益)2. 使用规则引擎或轻量模型计算综合优先级分数3. 将任务插入优先级队列(如 heapq、Kafka topic 分区)4. 调度器按优先级顺序拉取并执行任务5. 支持动态重排序(如新高优任务插入)
优势- 提升关键任务的响应速度与成功率- 优化有限资源的分配效率- 增强系统在负载高峰下的韧性
局限- 优先级计算逻辑可能复杂且需持续调优- 低优先级任务可能被长期饥饿- 多目标冲突时难以权衡(如“紧急但不重要”)
典型组合+ 目标设定和监控(B#11)+ 资源感知优化(B#16)+ 规划(B#6)(用于子任务排序)
反模式警示1. 仅按提交时间排序,忽视业务价值2. 未设置最低优先级保障,导致低优任务永远不被执行

| 伪代码示意 |

def calculate_priority(task):
    urgency = 1.0 if task.deadline < 1_hour else 0.5
    importance = user_tier_weight.get(task.user_id, 1.0)
    dependency_ready = 1.0 if all(dep.done for dep in task.dependencies) else 0.0
    return urgency * importance * dependency_ready

# Insert into priority queue
priority_queue.put((-calculate_priority(task), task))  # max-heap via negative

# Scheduler
while not priority_queue.empty():
    _, task = priority_queue.get()
    execute(task)

模式卡 #B21:探索和发现(Exploration and Discovery)

项目内容
分类IV. 多步规划、推理与探索层(Agent工程视角)
意图在未知或开放域环境中,通过试错、假设生成与信息搜集,主动发现新知识、可行路径或潜在解决方案,突破预设任务边界的限制
适用场景- 科研助手需自主提出新研究方向- 游戏 NPC 在动态世界中寻找新策略- 故障诊断系统尝试非常规修复方法- 创意生成任务需跳出常规思维框架
工作机制1. 识别当前知识或路径的不足(如“无可用工具”“多次失败”)2. 启动探索模式:生成假设、提出新问题、搜索新信息源3. 执行低成本试探性动作(如网络搜索、模拟推演)4. 评估探索结果,若有效则纳入主流程,否则回退或继续探索5. 记录发现的新知识至长期记忆
优势- 增强 Agent 在开放域问题中的适应性与创造性- 发现人类未预见到的解决方案- 支持持续学习与知识扩展
局限- 探索过程不可控,可能陷入无效循环- 增加资源消耗与失败风险- 需要强健的回退机制防止失控
典型组合+ RAG(B#14)(用于信息发现)+ 规划(B#6)(生成探索路径)+ 学习和适应(B#9)(沉淀探索成果)
反模式警示1. 在封闭域任务(如“查订单状态”)中启用探索,导致偏离目标2. 未设置探索预算(时间/次数),造成无限发散

| 伪代码示意 |

if task.failed_attempts > 3 and no_known_solution(task):
    hypotheses = llm(f"Generate 3 novel approaches to solve: {task}")
    for hypothesis in hypotheses:
        # Low-cost simulation or search
        result = simulate_or_search(hypothesis)
        if is_promising(result):
            new_plan = llm(f"Create plan based on: {hypothesis}, evidence: {result}")
            execute(new_plan)
            memory.store_discovery(hypothesis, result)  # Learn from exploration
            break

Agent 工程视角模式卡决策树

构建 Agent 工程视角的模式卡决策树(B类决策树)的目标是: 帮助工程师、架构师或 DevOps 人员在实现一个 AI Agent 系统时,根据具体的工程需求、系统约束和运行环境,快速选择合适的 B#1–B#21 工程模式组合。与 A 类(LLM 视角)决策树关注“做什么”不同,B 类决策树聚焦于“怎么做”——即如何以可靠、高效、安全、可维护的方式实现 Agent 的能力。

开始:你正在实现一个 AI Agent 系统
│
├─ 1. 是否需要将复杂任务拆解为多个步骤并结构化交互?
│   ├─ 是 → **B#1:提示词链**
│   └─ 否 → 跳过
│
├─ 2. 用户请求是否需动态分发到不同处理模块?
│   ├─ 是 → **B#2:路由**
│   └─ 否 → 单一入口
│
├─ 3. 任务中是否存在可并行执行的子操作?
│   ├─ 是 → **B#3:并行化**
│   └─ 否 → 串行执行
│
├─ 4. 是否需要调用外部工具、API 或服务?
│   ├─ 是 → 
│   │   ├─ 需标准化集成? → **B#10:模型上下文协议 (MCP)**
│   │   └─ 需工程化调用? → **B#5:工具使用**
│   └─ 否 → 仅内部推理
│
├─ 5. 是否涉及多跳知识依赖或私有文档问答?
│   ├─ 是 → **B#14:知识检索 (RAG)**
│   └─ 否 → 跳过
│
├─ 6. 任务是否需要显式生成执行计划?
│   ├─ 是 → **B#6:规划**
│   └─ 否 → 无计划
│
├─ 7. 是否使用多个专业化 Agent 协同工作?
│   ├─ 是 → 
│   │   ├─ 需通信机制? → **B#15:Agent间通信**
│   │   └─ 需协作框架? → **B#7:多Agent协作**
│   └─ 否 → 单 Agent
│
├─ 8. 是否需记住用户历史、偏好或长期上下文?
│   ├─ 是 → **B#8:记忆管理**
│   └─ 否 → 无状态
│
├─ 9. 系统是否需从反馈中自动改进行为?
│   ├─ 是 → **B#9:学习和适应**
│   └─ 否 → 静态策略
│
├─ 10. 是否存在高风险操作或需人类监督?
│    ├─ 是 → **B#13:人机协同 (Human-in-the-Loop)**
│    └─ 否 → 全自动
│
├─ 11. 是否需在运行时监控目标进展?
│    ├─ 是 → **B#11:目标设定和监控**
│    └─ 否 → 无目标追踪
│
├─ 12. 系统是否可能遇到失败(工具超时、LLM 幻觉等)?
│    ├─ 是 → **B#12:异常处理和恢复**
│    └─ 否 → 假设全成功
│
├─ 13. 是否受资源(token、延迟、成本)限制?
│    ├─ 是 → **B#16:资源感知优化**
│    └─ 否 → 无限资源假设
│
├─ 14. 任务是否涉及复杂逻辑推理(数学、代码、多跳)?
│    ├─ 是 → **B#17:推理技术**
│    └─ 否 → 直接生成
│
├─ 15. 是否需防止有害、偏见或违规内容?
│    ├─ 是 → **B#18:Guardrails / 安全模式**
│    └─ 否 → 无安全过滤
│
├─ 16. 是否需量化评估 Agent 性能或进行 A/B 测试?
│    ├─ 是 → **B#19:评估和监控**
│    └─ 否 → 无度量
│
├─ 17. 系统是否需处理多个任务且存在优先级差异?
│    ├─ 是 → **B#20:优先级排序**
│    └─ 否 → FIFO 或随机
│
└─ 18. 任务是否处于开放域或需主动发现新路径?
     ├─ 是 → **B#21:探索和发现**
     └─ 否 → 封闭域求解

决策树的核心判别维度

维度关键问题对应 B 类模式
交互结构是否需分步、链式交互?B#1
流量分发是否需智能路由?B#2
执行效率是否可并行?B#3
能力扩展是否调用外部工具?B#5, B#10
知识获取是否需检索私有知识?B#14
任务分解是否需生成计划?B#6
群体智能是否多 Agent 协作?B#7, B#15
状态保持是否需记忆?B#8
自进化是否需从反馈学习?B#9
人机边界是否需人工介入?B#13
过程控制是否需目标追踪?B#11
鲁棒性是否需容错?B#12
成本控制是否受资源限制?B#16
认知深度是否需高级推理?B#17
安全性是否需内容过滤?B#18
可观测性是否需性能评估?B#19
调度策略是否需任务优先级?B#20
开放性是否需主动探索?B#21

本文所述观点基于当前实践与有限实验,且难免存在疏漏或偏颇之处。AI Agent 领域日新月异,架构设计亦无“银弹”。欢迎各位读者在评论区或社区中交流探讨。

gitcode.com/gabrielyuya…