信息是不确定性的消除。
—— Claude Shannon,信息论之父
本章考察那些基础认知架构,它们赋能智能、自主的智能体,使其能够在复杂、动态环境中有效运行。这些架构是现代 AI 系统的结构性骨架,它们模拟人类认知中的关键方面,例如决策、规划和记忆,从而使智能体能够以越来越高的复杂度处理真实世界问题。
这些架构中的每一种,都在塑造智能行为方面发挥不同作用。它们共同使 AI 系统能够从简单的反应式脚本,演化为自适应、自主的工作流,并能够在更长时间跨度内处理复杂任务。
理解基础认知架构,对任何 AI 工程师都至关重要,因为这些模式构成了当今几乎所有生产级智能系统的骨架。无论你是在构建一个简单聊天机器人,还是一个复杂自主系统,你都会发现自己需要组合决策、规划和记忆等元素,来创建能够应对真实世界复杂性的智能体。本章覆盖的架构,是经过验证的构件,它们支撑着从客户服务自动化,到管理数百万美元业务流程的复杂 AI 助手等各种系统。
掌握这些基础模式,会为你提供一种概念框架,使你能够系统性地处理任何智能体开发挑战。你将不再构建那些在边界案例下容易崩溃的反应式脚本,而是能够设计可以随需求适应和学习的系统。最重要的是,理解这些架构如何彼此互补,将为后续章节中探索高级多智能体系统和专门智能体做好准备。
本章将覆盖以下主题:
- 自主决策智能体
- 规划智能体
- 记忆增强型智能体
我们先从自主决策智能体开始,它是这一层级结构中最基础的构件,也是构建更高级认知能力的基石。
技术要求
要运行本章中的示例,你需要准备以下内容:
- 一台运行 macOS、Windows 或 Linux 的电脑,最低 8 GB RAM,推荐 16 GB。
- Python 3.10+、git 和终端。
- 一个 Python 虚拟环境工具,例如 venv、conda 或 uv。
- 可选:如果你计划实验本地模型,可以准备带 CUDA 12+ 的 NVIDIA GPU。本章示例可在 CPU 上运行。
本书所有代码托管在:
https://github.com/PacktPublishing/30-Agents-Every-AI-Engineer-Must-Build
本章材料位于 Chapter 05/ 文件夹下。
以下步骤用于设置运行本章示例所需的环境:
# 1) Clone the repo and enter this chapter's folder
git clone https://github.com/PacktPublishing/30-Agents-Every-AI-Engineer-Must-Build.git
cd 30-Agents-Every-AI-Engineer-Must-Build/"Chapter 05"
# 2) Create and activate a virtual environment
python -m venv .venv
# macOS/Linux:
source .venv/bin/activate
# Windows (PowerShell):
.venv\Scripts\Activate.ps1
# 3) Install dependencies
pip install -r requirements.txt
# 4) (If an API provider is used) copy env template and add your keys
cp .env.example .env # then edit .env
自主决策智能体
正如第 1 章所介绍的,智能智能体通过感知、推理、行动和学习的连续循环运行。本节将这些理念落到最基础的架构上:自主决策智能体。自主决策智能体能够感知环境,根据目标和约束评估可能行动,选择下一步做什么,并执行行动,而不需要持续人工监督。它们会通过更新状态或记忆,从结果中学习,并用这些信息影响下一轮循环。
举例来说,可以考虑一个客户支持智能体。用户消息如 “My internet is down, and I can't connect” 会触发这一循环:智能体解析请求和上下文,查询故障排查知识,选择一个或多个行动,例如运行连接检查或引导用户完成排查步骤,随后生成回应,并记录结果以支持未来轮次。这一具体流程展示了感知 → 推理 → 行动 → 学习在实践中的运行方式。
接下来的内容将拆解这个循环的每个阶段,并实现一个最小、可测试版本的架构,然后再逐步加入规划和记忆能力。
自主性的解剖:建立在认知循环之上
要理解自主决策智能体如何规模化运行,我们必须考察第 1 章“认知循环”一节中的认知循环如何使它们在动态、连续的周期中运行。让我们重新回到客户服务智能体,看看它的三个相互连接的组件——感知、认知和行动——如何共同创造真正的自主行为。
感知:从原始输入到结构化智能
我们已经看到,客户服务智能体的感知模块会捕获环境输入,并将其转化为结构化数据。现在我们在这个基础上进一步展开,看看更复杂的感知系统如何支持自主运行:
# Illustrative pseudocode: not intended for direct execution
def analyze_sentiment(text: str) -> str:
"""Return sentiment label: 'positive', 'neutral', or 'negative'."""
return classify_text_sentiment(text) # stub: plug in any sentiment classifier
def check_system_alerts() -> list:
"""Return list of active system alert IDs from the monitoring service."""
return monitoring_client.get_active_alerts()
def get_user_tier(user_id: str) -> str:
"""Return account tier string (e.g. 'standard', 'premium', 'enterprise')."""
return crm_client.get_account_tier(user_id)
def perceive_input(user_message, context):
return {
"message": user_message,
"timestamp": datetime.now(),
"user_id": context.get("user_id"),
"session_state": context.get("session"),
"sentiment": analyze_sentiment(user_message)
}
# Enhanced perception with environmental awareness
def enhanced_perception(user_message, context, system_state):
base_perception = perceive_input(user_message, context)
# Add system-wide context for autonomous operation
enhanced_data = {
**base_perception,
"current_load": system_state.get("active_sessions"),
"time_of_day": datetime.now().hour,
"user_tier": get_user_tier(context.get("user_id")),
"recent_issues": check_system_alerts(),
"agent_availability": check_human_agent_status()
}
return enhanced_data
这个增强感知系统超越了简单输入处理;它为智能体提供情境意识,使其能够进行自主决策。当用户报告 “My internet is down” 时,智能体并不只是孤立处理这条消息。它还会考虑系统负载、一天中的时间、用户优先级和当前网络问题,从而对回应策略作出有根据的决策。
复杂感知系统会通过验证、噪声过滤和初步结构化来确保数据质量,为下游推理过程提供干净、相关的输入。这个感知层的广度和准确性,从根本上塑造了智能体的情境意识,并进一步影响其决策质量。
认知:面向自主运行的战略推理
第 1 章中的推理组件展示了意图分类和优先级判定。在自主智能体中,这一认知层必须处理更复杂的决策树和战略规划:
# Illustrative pseudocode: not intended for direct execution
# Expanding on Chapter 1's reasoning function
def autonomous_reasoning(perception_data):
# Basic intent and priority from Chapter 1
intent = classify_intent(perception_data["message"])
priority = determine_priority(
intent,
perception_data["sentiment"],
user_history=get_user_history(perception_data["user_id"])
)
# Enhanced autonomous decision-making
decision_context = {
"intent": intent,
"priority": priority,
"context": perception_data,
"autonomy_level": determine_autonomy_level(
perception_data["user_tier"],
perception_data["current_load"],
perception_data["agent_availability"]
),
"escalation_threshold": calculate_escalation_threshold(
perception_data["time_of_day"],
intent,
priority
)
}
# Autonomous strategy selection
# Decision tree: score each candidate strategy across four weighted axes.
# Axes: autonomy_level_score (0-1), urgency_score (0-1),
# complexity_score (0-1), escalation_threshold (0-1)
strategy_scores = {
"full_autonomous_resolution":
decision_context["autonomy_level_score"] * 0.5
+ (1 - decision_context["escalation_threshold"]) * 0.3
+ (1 - decision_context.get("complexity_score", 0)) * 0.2,
"immediate_escalation":
decision_context.get("urgency_score", 0) * 0.4
+ (not decision_context["agent_availability"]) * 0.4
+ decision_context["escalation_threshold"] * 0.2,
"guided_autonomous_resolution": 0.5, # baseline fallback
}
# Strategy with highest composite score wins; ties favour guided resolution
decision_context["strategy"] = max(strategy_scores, key=strategy_scores.get)
return decision_context
这种认知架构使智能体能够围绕如何继续推进作出战略决策。不同于简单反应式系统,它可以基于上下文推理来判断:什么时候自主处理问题,什么时候立即升级,什么时候采用混合方式。
现代智能体越来越多地使用 LLM 作为认知核心,将结构化推理与复杂语言理解结合起来。正如第 3 章《智能体提示的艺术》所探讨的,提示可以塑造认知行为,使智能体能够执行意图分类、情绪分析和上下文推理等任务。
行动:自主执行与适应
在第 1 章中的行动执行基础上,自主智能体必须协调复杂工作流,并适应变化条件:
# Illustrative pseudocode: not intended for direct execution
# Enhanced action execution with autonomous coordination
def autonomous_action_execution(decision_context):
strategy = decision_context["strategy"]
results = []
if strategy == "full_autonomous_resolution":
# Execute the full resolution workflow autonomously
action_plan = create_autonomous_plan(decision_context)
results = execute_autonomous_workflow(action_plan, decision_context)
elif strategy == "immediate_escalation":
# Prepare comprehensive handoff to human agent
escalation_data = prepare_escalation_package(decision_context)
results = initiate_human_handoff(escalation_data)
else: # guided_autonomous_resolution
# Execute with checkpoints for human oversight
action_plan = create_guided_plan(decision_context)
results = execute_with_checkpoints(action_plan, decision_context)
# Autonomous feedback and adaptation
execution_feedback = analyze_execution_results(results, decision_context)
update_decision_models(execution_feedback)
return results
def create_autonomous_plan(decision_context):
"""Creates comprehensive action plans based on reasoning context"""
intent = decision_context["intent"]
priority = decision_context["priority"]
# Build a dependency-aware task DAG.
# Each node: {"id": str, "action": str, "depends_on": list[str]}
# Tasks with empty depends_on[] run immediately;
# downstream tasks wait until all listed ids complete.
if intent == "billing_issue":
return [
{"id": "T1", "action": "fetch_account_details", "depends_on": []},
{"id": "T2", "action": "analyze_billing_history", "depends_on": ["T1"]},
{"id": "T3", "action": "identify_discrepancies", "depends_on": ["T2"]},
{"id": "T4", "action": "calculate_adjustments", "depends_on": ["T3"]},
{"id": "T5", "action": "generate_explanation", "depends_on": ["T3"]},
{"id": "T6", "action": "apply_account_credits", "depends_on": ["T4"]},
{"id": "T7", "action": "send_confirmation_email", "depends_on": ["T5", "T6"]},
{"id": "T8", "action": "schedule_follow_up", "depends_on": ["T7"]},
]
elif intent == "service_outage":
return [
{"id": "T1", "action": "check_service_status", "depends_on": []},
{"id": "T2", "action": "identify_affected_areas", "depends_on": ["T1"]},
{"id": "T3", "action": "estimate_resolution_time", "depends_on": ["T1"]},
{"id": "T4", "action": "send_proactive_notifications", "depends_on": ["T2", "T3"]},
{"id": "T5", "action": "monitor_restoration_progress", "depends_on": ["T1"]},
{"id": "T6", "action": "update_customer_status", "depends_on": ["T4", "T5"]},
]
# Default: generic resolution workflow
return [
{"id": "T1", "action": "analyze_issue", "depends_on": []},
{"id": "T2", "action": "research_solutions", "depends_on": ["T1"]},
{"id": "T3", "action": "implement_resolution", "depends_on": ["T2"]},
{"id": "T4", "action": "verify_success", "depends_on": ["T3"]},
]
行动模块是推理转化为真实世界结果的地方。无论是生成类人回应、调用 API,还是触发物理行动,这个组件都会执行智能体的决策。关键在于,行动会创造反馈循环:它改变环境,并为感知系统生成新的输入。
连续认知循环:实现真正自主性
这些组件——感知、认知和行动——并不是孤立运行的。它们形成一个集成的连续循环,使智能体能够与复杂环境进行动态互动。让我们看看第 1 章中的客户服务智能体如何作为一个真正的自主系统运行:
class AutonomousCustomerServiceAgent:
def __init__(self):
self.session_memory = {}
self.decision_history = []
self.performance_metrics = {}
def cognitive_loop(self, user_message, context):
"""The complete autonomous decision-making cycle"""
# 1. Enhanced Perception
system_state = self.get_current_system_state()
perception_data = enhanced_perception(user_message, context, system_state)
# 2. Autonomous Reasoning
decision_context = autonomous_reasoning(perception_data)
# 3. Strategic Action Execution
results = autonomous_action_execution(decision_context)
# 4. Learning and Adaptation
self.learn_from_interaction(perception_data, decision_context, results)
# 5. Update session state for continuity
self.update_session_memory(
context.get("user_id"), decision_context, results)
return results
def learn_from_interaction(self, perception_data, decision_context, results):
"""Enhanced learning from Chapter 1's learning function"""
# Calculate success metrics
success_score = calculate_success(results, decision_context)
# Update user-specific models
update_user_preferences(perception_data["user_id"], success_score)
# Refine autonomous decision-making
if success_score < 0.7:
self.adjust_autonomy_thresholds(decision_context, success_score)
flag_for_model_improvement(perception_data)
# Update strategic models
self.update_strategy_effectiveness(decision_context["strategy"], success_score)
# Store decision patterns for future reference
self.decision_history.append({
"perception": perception_data,
"decision": decision_context,
"outcome": success_score,
"timestamp": datetime.now()
})
如图 5.1 所示,信息从环境输入顺畅地流入认知处理,再流向环境输出,使智能体能够通过与周围环境持续互动而适应和演化。
图 5.1——自主智能体决策循环
这张图清楚展示了自主智能体运行的循环性质。环境输入进入感知模块,在那里被处理并结构化,以便进行认知分析。认知组件随后应用推理机制来评估输入,并决定合适回应。最后,行动模块执行所选回应,这不仅处理了当前情境,也生成新的环境状态,重新反馈到感知模块中,形成智能行为的连续循环。
这种架构模式确保智能体能够对变化条件保持响应,同时随着时间维持连贯的目标导向行为。当客户报告互联网中断时,智能体不只是分类意图;它会考虑更广泛上下文,例如系统告警、用户优先级、客服可用性,以确定最优自主回应策略。
在看到感知和上下文感知推理如何使智能体智能地响应变化条件之后,我们现在转向更广泛的架构考量,这些考量使此类系统能够扩展并保持可维护性。
使用现代 LLM 的实践实现
强大 LLM 的出现,从根本上增强了第 1 章中我们探索过的认知循环的实践实现。客户服务智能体示例说明,LLM 如何作为认知引擎,驱动自主推理和决策流;而 LangChain 和 OpenAI Functions API 等框架,则提供生产部署所需的编排能力。
为了理解 LLM 如何实现自主性,我们重新回到核心智能体组件,也就是感知、认知和行动,并探讨每个组件如何被 LLM 增强。
用 LLM 驱动感知
虽然底层感官输入,例如摄像头画面或 IoT 传感器数据,通常由专门模块处理,但 LLM 在结构化和解释这些原始输入方面发挥关键作用,为高层推理做好准备。它们是非结构化、通常带噪声的数据与智能决策所需的结构化上下文之间的桥梁。
为了看到这些概念如何转化为实践实现,下面的代码块概述了一个由 LLM 驱动、生产就绪的认知模块:
# Production-ready LLM integration for autonomous agents
class LLMPoweredCognition:
def __init__(self, model_config):
self.llm = initialize_llm(model_config)
self.prompt_templates = load_cognitive_templates()
def enhanced_intent_reasoning(self, perception_data):
"""LLM-powered reasoning building on Chapter 1's approach"""
reasoning_prompt = self.prompt_templates["autonomous_reasoning"].format(
user_message=perception_data["message"],
user_history=get_user_summary(perception_data["user_id"]),
system_context=format_system_context(perception_data),
current_time=perception_data["timestamp"],
available_tools=list_available_tools()
)
llm_response = self.llm.generate(reasoning_prompt)
return {
"intent": llm_response.intent,
"confidence": llm_response.confidence,
"reasoning_chain": llm_response.reasoning_steps,
"recommended_strategy": llm_response.strategy,
"tool_requirements": llm_response.required_tools,
"escalation_assessment": llm_response.escalation_risk
}
在感知阶段,LLM 擅长通过两个关键功能解释和组织传入信息:输入解释和上下文框定。
输入解释
LLM 能够高效解析广泛的非结构化输入,包括自然语言、日志和传感器读数。它们提取有意义实体,分类信息,并将原始输入转换为适合下游推理的结构化表示。
例如,在客户支持场景中,用户消息:
"My internet is down, and I can't connect"
并不会被简单地当作自由文本处理。LLM 会将其解释为一次服务中断,适当地分类为待分诊问题,并为下一阶段推理提供信息。
上下文框定
除了解析输入,LLM 还帮助建立情境意识。它们执行如下任务:
- 降低噪声并验证输入质量;
- 将传入数据锚定到相关上下文中,无论是用户正在进行的对话、某个具体运营场景,还是先前交互历史。
这确保智能体以干净、相关且结构合理的信息继续推进,为整个推理循环中的准确、上下文感知决策奠定坚实基础。
用 LLM 驱动认知(推理)
这是真正体现 LLM 优势的地方。认知阶段是智能和推理的核心区域,智能体在这里解释目标、评估上下文,并形成适当回应。让我们看看 LLM 如何在实践中操作化这一推理层:提示、上下文信号和中间推理策略如何引导智能体从原始输入走向可执行决策。通过考察这些机制,我们可以明确 LLM 如何作为连接自主智能体架构中感知与行动的推理引擎。
用于引导推理的提示模板
有效使用 LLM,依赖精心设计的提示模板,它们能够以可预测且有目的的方式引导模型推理。这种实践,即提示词工程,构成了这些智能体中认知塑造方式的基础。
例如,提示可以明确说明:
"You are a customer service agent. Classify the user's intent and suggest the next best action."
这类结构化指令会让 LLM 在定义好的边界内运行,就像受过训练的专业人员遵循既定流程一样。通过将 LLM 行为锚定在角色特定指令和上下文线索中,这些提示确保回应保持一致、相关,并与智能体预期功能对齐。
复杂推理与推断
现代 LLM 擅长的不只是表层语言处理;它们能够在一系列认知任务中进行复杂推理与推断。这些能力包括解释用户意图、分析情绪,并从当前交互和历史数据中得出上下文推断。
通过提示链、scratchpad memory,以及与外部工具集成等技术,智能体可以进一步扩展这些推理能力,模拟传统符号推理系统的某些方面。这使 LLM 驱动的智能体能够弥合纯语言理解与逻辑化、结构化问题解决之间的差距。
动态决策
LLM 不再局限于生成静态回应;它们越来越能够为追求特定目标而作出动态决策。当提供清晰目标和相关上下文时,LLM 可以评估多个可能行动,权衡每个行动的影响,并选择最合适的下一步,而且只需要很少人工监督,甚至完全不需要人工监督。
用 LLM 促成行动
行动阶段是智能体超越推理并直接影响环境的地方,无论是通过沟通、触发工具还是调用 API。在这一阶段,洞察和决策会转化为具体结果。
现代 LLM 可以超越文本生成;它们能够识别应该使用哪些工具,并通过 API 或插件直接调用这些工具。这使智能体不仅能提出解决方案,还能执行解决方案。例如,在识别出复杂查询后,智能体可能从 CRM 检索数据、提交服务请求,或通过集成工具链生成详细报告。
这个增强认知系统直接建立在第 1 章基础之上,同时支持真正的自主运行。LLM 不只是分类意图,还会围绕如何推进、使用哪些工具,以及何时需要升级,提供战略推理。
虽然 LLM 显著扩展了智能体的推理和执行能力,但构建可靠自主系统需要谨慎的架构保护措施。以下设计考量来自第 1 章中的客户服务智能体,突出安全且有效实现这些智能体的实践原则。
设计考量:来自第 1 章的经验
基于第 1 章客户服务智能体的实践洞察,以下几个设计原则对自主决策智能体至关重要。
护栏与安全机制
第 1 章中的示例通过谨慎验证来处理账单问题。自主智能体必须扩展这些保护措施:
def autonomous_safety_check(decision_context, planned_actions):
"""Enhanced safety mechanisms for autonomous operation"""
safety_violations = []
# Financial impact limits
if "apply_account_credits" in planned_actions:
credit_amount = calculate_credit_value(decision_context)
if credit_amount > get_autonomous_credit_limit(
decision_context["user_tier"]
):
safety_violations.append("credit_limit_exceeded")
# Data access permissions
if requires_sensitive_data_access(planned_actions):
if not verify_autonomous_data_permissions(decision_context):
safety_violations.append("insufficient_data_permissions")
# Impact assessment
if assess_customer_impact_risk(planned_actions) > decision_context["escalation_threshold"]:
safety_violations.append("high_impact_risk")
return len(safety_violations) == 0, safety_violations
为了防止智能体生成不安全、有偏或不理想的输出,也就是 LLM 语境中常说的“幻觉”,必须实现稳健护栏和提示注入防御。这包括严格输入验证、输出过滤,以及尤其重要的提示注入防御。
升级标准与 human-in-the-loop 协调
第 1 章展示了紧急案例中的基础升级。自主智能体需要更复杂的升级逻辑:
def intelligent_escalation_decision(decision_context, safety_results):
"""Building on Chapter 1's escalation with autonomous intelligence"""
escalation_factors = {
"safety_violations": not safety_results[0],
"confidence_threshold": decision_context.get("confidence", 0) < 0.8,
"complexity_threshold": assess_issue_complexity(decision_context) > 0.7,
"user_preference": check_escalation_preference(decision_context["user_id"]),
"business_impact": calculate_business_impact(decision_context) > 0.6
}
escalation_score = calculate_weighted_escalation_score(escalation_factors)
if escalation_score > decision_context["escalation_threshold"]:
return prepare_intelligent_escalation(decision_context, escalation_factors)
return None
并不是所有问题都可以或应该自主解决。定义清晰升级标准非常关键,这确保当智能体遇到含糊情境、伦理困境,或超出当前能力范围的任务时,能够优雅地让位于人工操作员。
案例研究:生产中的自主客户服务
让我们看看第 1 章中增强后的客户服务智能体如何在真实场景中自主运行。
场景:一位高级客户报告:“My business internet has been intermittent for two days, and I have a critical presentation tomorrow.”
# Complete autonomous workflow
def handle_business_critical_outage():
# 1. Enhanced Perception (building on Chapter 1)
perception_data = enhanced_perception(
user_message="My business internet has been intermittent for two days...",
context={"user_id": "premium_business_123", "session": "new"},
system_state=get_current_system_state()
)
# 2. Autonomous Reasoning
decision_context = autonomous_reasoning(perception_data)
# Result: High priority, business impact, autonomous resolution approved
# 3. Safety and Escalation Assessment
planned_actions = create_autonomous_plan(decision_context)
safety_check, violations = autonomous_safety_check(decision_context, planned_actions)
# 4. Autonomous Execution
if safety_check:
results = execute_autonomous_workflow([
"check_service_area_status",
"identify_intermittent_issues",
"schedule_priority_technician",
"upgrade_service_tier_temporarily",
"provide_mobile_hotspot_backup",
"set_proactive_monitoring",
"schedule_followup_call"
], decision_context)
# 5. Learning and Adaptation
success_score = monitor_resolution_effectiveness(results)
update_autonomous_strategies(decision_context, success_score)
通过结合结构化提示和条件逻辑,这样的机器人可以在最多 80% 的用户查询中自主运行,使人工客服能够专注于更细腻、更复杂的问题。
然而,并不是所有问题都能通过孤立决策或即时反应解决。许多真实世界任务要求更结构化、长期的方法。这正是规划智能体发挥作用的地方。不同于专注于“下一步做什么”的自主决策智能体,规划智能体被设计用于将复杂目标拆解为可执行任务序列,从而支持更长时间跨度上的结构化执行。
规划智能体:以自适应智能编排动态工作流
在自主决策智能体的即时响应能力基础上,我们现在遇到需要根本不同方法的场景:需要通过系统分解和战略思考来处理复杂性。自主智能体擅长实时、单步回应,而许多真实世界挑战则要求将复杂目标拆解为更小、可管理的任务序列,并在更长时间内执行。
这正是规划智能体的领域。规划智能体是复杂系统,能够制定和执行多步骤计划,并在执行过程中随着新信息、新约束或新优先级出现而动态调整。从反应式决策转向主动规划,代表着智能体复杂度的一次重要跃迁,使系统能够用结构化方法处理那些会压垮简单架构的长期目标。
本节将考察规划智能体如何完成从反应式行为到结构化、目标导向执行的转变。我们会探索支持复杂规划的架构原则,包括层级任务分解、符号规划技术和 LLM 驱动的动态规划策略。这些概念共同说明,智能体如何协调多步骤工作流、监控进展,并随着条件变化调整计划。
核心挑战:从反应式走向战略式
规划智能体回应的是纯反应式系统的一个根本局限:无法处理那些需要协调行动序列的复杂、多面向目标。考虑回答单个客户服务查询和编排完整产品发布之间的显著差异。前者需要即时回应和解决,后者需要系统分解、资源协调、时间线管理,并随着情况变化持续适应。
有效规划智能体必须掌握几种相互关联的能力。它们必须将高层目标拆解为可执行子任务,适当排序这些任务,高效分配资源,持续监控进展,并在环境变化时动态调整计划。这种综合方法使智能体能够处理跨越数天、数周甚至数月的复杂真实世界项目,同时保持连贯战略方向。
层级分解:复杂性的架构
对于规划智能体来说,最强大的策略是层级分解,这是一种系统方法,模拟人类自然处理大型项目的方式。该方法将抽象、高层目标转化为结构化树,树中的子目标越来越小、越来越具体,从而通过将注意力聚焦到可管理组件,使复杂问题变得可处理。
现代规划智能体利用两种互补范式,每种范式适合不同类型问题,并具有不同优势:符号规划基础和 LLM 驱动的动态规划。
符号规划基础
传统 AI 规划系统采用形式化符号表示,为问题解决提供严谨、数学化的方法。STRIPS(STanford Research Institute Problem Solver)和 PDDL(Planning Domain Definition Language)是这种方法的代表,它们允许开发者用结构化、形式化语言定义状态、行动和目标。这些系统使算法能够在定义良好的问题空间中系统搜索最优行动序列。
虽然符号规划提供精确性和最优性保证,但通常需要对环境和问题领域进行全面预建模。这使符号方法在理解充分、约束明确的领域中特别强大,但在新颖或快速变化情境中适应性较弱。
LLM 驱动的动态规划
LLM 的出现彻底改变了规划能力,为智能体架构引入了前所未有的灵活性和适应性。Tree-of-Thought(ToT)和 Self-Ask 等现代技术,利用 LLM 强大的推理能力,动态生成并探索可能的解决路径或调查性子问题。
这种范式变化使智能体能够在没有刚性预编程的情况下分解任务,从而高度适应新情境和涌现需求。智能体可以用自然语言围绕问题进行推理,考虑上下文、约束和创造性解决方案,而这些可能无法被形式化符号表示捕获。正如第 3 章《智能体提示的艺术》中深入讨论的,掌握用于 chain-of-thought 实现的提示词工程,对于有效的 LLM 驱动规划系统至关重要。
规划智能体架构实践
为了展示 LLM 驱动的动态规划范式如何运行,图 5.2 通过一个具体示例展示了这种综合方法:一个规划智能体如何从最初构思到执行、监控和自适应修订,编排一场复杂营销活动。
图 5.2——LLM 驱动的动态规划实践。这个示例展示了规划智能体如何从初始构想到执行、监控和自适应修订,编排一场复杂营销活动
这张图展示了使规划智能体能够管理复杂动态项目的多层架构。中心是 Planning Agent Core,也就是规划智能体核心,它充当战略编排引擎,协调所有规划活动,并维护对整个系统的监督。这个核心组件与多个关键元素交互,展示了智能体的综合能力,包括:
环境感知与适应:规划智能体会持续监控外部因素,例如市场变化、资源约束和竞争对手行动,这些都可能要求调整计划。图中用红色虚线表示这种环境意识,它使主动适应成为可能,而不是只进行反应式回应。
战略任务层级:从“Launch Product Campaign”这一高层目标开始,规划智能体会系统性地将目标分解为主要工作流和具体可执行任务。层级中的每一层都代表更高具体度,从战略阶段一直下沉到具体工具集成和 API 调用。
动态执行管理:Execution Feedback 循环使智能体能够持续监控进展,并识别何时需要修订计划。这个反馈机制连接到 Plan Revision / Adaptation 能力,使智能体能够根据真实世界结果和变化条件修改策略。
集成工具与知识编排:图中展示了规划智能体如何无缝集成外部工具和 API 来执行具体任务,同时保持与 Agent Memory / Knowledge Base 的连接,以支持有根据的决策。这种集成模式说明,规划智能体如何同时利用自动化工具和累积知识来执行复杂工作流。
在概述规划智能体的高层架构之后,我们现在转向实现这些组件并构建功能性智能系统所需的关键策略。
关键实现策略
将规划智能体架构转化为功能系统,需要掌握几种核心实现策略。要构建有效规划智能体,仅理解高层组件还不够;还必须实现驱动这些组件的逻辑。下面几个小节将探索三项让这一架构真正运行起来的关键能力:智能体如何进行战略性任务分解以拆解复杂目标,如何管理动态执行和监控以保持进度,以及如何利用自适应智能学习并修订计划。
战略性任务分解
有效规划的基础,是智能任务拆解。对于 LLM 驱动的智能体来说,这涉及迭代提示流程,智能体会系统性识别为实现总体目标所需的顺序子任务和并行子任务。分解过程必须考虑任务依赖关系、资源需求、时间约束和风险因素。
例如,“launch a new product marketing campaign” 这样的高层目标,需要仔细分析其组成元素:市场研究、竞争分析、内容创作、分发渠道设置、效果监控和发布后优化。这些主要组件中的每一个都可以进一步拆解:内容创作可以拆分为博客文章写作、信息图设计、视频制作和社交媒体素材开发。
动态执行与监控
一旦制定了完整计划,执行就会变成复杂编排挑战。每个规划步骤都必须通过精心管理的循环执行,这些循环会调用合适工具、委派给专门智能体或执行直接行动。这个执行过程需要持续监控,因为真实世界条件总会与初始规划假设不同。
有效规划智能体会实现复杂反馈机制,跟踪相对于里程碑的进展,识别瓶颈或失败,并在必要时触发计划修订。这可能包括与外部项目管理系统集成、监控 API 对任务完成情况的回应,或处理人类关于任务状态和质量的反馈。
自适应智能与学习
复杂规划智能体的标志,是能够智能适应变化条件。它们不是僵硬地遵循静态计划,而是持续评估进展,并根据新信息、资源变化或优先级转移修订策略。
这种自适应能力利用反馈信号、记忆系统和用户输入来指导计划修改。例如,如果一个关键依赖项进度落后,智能体可能会自动重新安排依赖任务,重新分配资源,或提出能够最小化整体项目影响的替代方法。图 5.2 中连接到知识库的蓝色虚线,展示了规划智能体如何访问历史项目数据、过往营销活动中的成功策略以及已学习模式,从而为当前规划决策提供信息。
规划与决策:互补能力
理解规划智能体如何区别于并补充自主决策智能体,有助于澄清二者在综合智能体系统中的各自角色:
| Capability | Autonomous Decision-Maker | Planning Agent |
|---|---|---|
| Focus | 即时、战术性回应 | 战略性、长期目标实现 |
| Scope | 一次一个单一决策 | 多步骤、协调流程 |
| Adaptation | 启发式规则和条件逻辑 | 动态修订与学习循环 |
| Integration | 用于特定行动的直接 API 调用 | 编排化工具工作流 |
| Memory Use | 当前会话内上下文 | 持久、跨项目学习 |
表 5.1——自主决策智能体与规划智能体之间的差异
虽然决策和制定计划的能力构成智能体主动能力的核心,但真正的智能还需要从过去学习。这将我们带到第三种基础架构,它聚焦于记忆这一关键组件。
记忆增强型智能体
今天的自主智能体可以独立作出决策,并制定多步骤计划。然而,一个关键限制依然存在:它们如何在当前交互之外保留上下文并从过往经验中学习?这正是记忆增强型智能体变得必要的地方。
许多基础智能体只运行在当下,只对当前输入作出反应。相比之下,记忆增强型智能体会纳入随时间保留上下文的机制。这显著提升了它们个性化回应、维持连贯性以及进行长期推理的能力。
受人类认知启发,这些智能体使用不同类型的记忆系统来存储、检索和巩固信息。这使它们能够更加智能地回应,并在长时间交互中保持上下文感知。
本节将探索记忆如何使智能体超越短暂推理循环,走向持续、上下文丰富的智能。我们先考察智能智能体中使用的不同记忆类型,然后看这些记忆系统如何整合进统一架构。最后,我们将通过一个真实世界案例研究说明这一方法的实践实现,展示记忆如何随着时间支持更加连贯、个性化的互动。
智能智能体中的记忆类型
记忆增强型智能体使用三种不同类型的记忆,每种都在其认知架构中扮演独特角色:
Working memory 工作记忆:这是智能体的短期记忆,在 LLM 提示中直接保存当前会话内的即时信息。它包括最近对话轮次、当前目标和任务特定数据。工作记忆是短暂的,在会话结束或达到 token 限制时会被清除。
Episodic memory 情节记忆:这种记忆类型捕获交互和事件历史,通常带有时间戳。它允许智能体回忆具体过往经验,例如之前的一次对话或某次行动结果,从而支持连续性和长期个性化。
Semantic memory 语义记忆:它存储从文档、API 或数据库中提取的结构化事实信息。不同于关注事件的情节记忆,语义记忆包含通用知识和概念,例如产品规格、法规或科学事实,为智能体理解提供稳定基础。
可以使用下面的指南,为给定情境选择应查询哪种记忆系统:
| Memory Type | Trigger Condition | Query Signal | Failure Mode if Skipped |
|---|---|---|---|
| Working | 当前会话;当前轮次正在进行 | 直接填充 LLM 上下文窗口 | 失去即时对话连贯性;智能体忘记前一轮上下文 |
| Episodic | 需要跨会话连续性;用户引用先前交互 | 对交互历史进行向量相似度搜索 | 历史重复;智能体把每次会话都当作新的,破坏个性化 |
| Semantic | 需要事实或领域知识;无法仅从会话中回答 | 对知识库进行关键词或语义搜索 | 幻觉或过时答案;智能体无法将主张锚定到权威数据 |
这三种记忆共同构成记忆增强型智能体运行的认知基础。下一节中,我们将看到它们如何整合进统一架构,以支持上下文保留、连续性和自适应智能。
记忆增强型智能体架构
记忆增强型智能体架构,如图 5.3 所示,整合多个记忆组件,以支持上下文推理、连续性和持续学习,使智能体能够从反应式回应走向持续、有根据且自适应的互动。
图 5.3——记忆增强型智能体架构
下面说明每个组件在这个动态系统中的功能:
External Inputs 外部输入:流程始于外部刺激,例如用户查询、环境数据或传感器读数。这些输入启动感知阶段,并流入智能体核心认知引擎。
Agent Core(Cognition & Reasoning)智能体核心(认知与推理) :作为中心组件,Agent Core 负责推理、决策和编排记忆交互。它处理感知输入,按需查询记忆系统,并综合信息以指导行动。
Working Memory(Current Prompt Context)工作记忆(当前提示上下文) :它作为智能体的短期缓冲区,保存即时、会话特定上下文,例如最近对话轮次或正在进行的任务。这个活跃上下文直接影响 LLM 当前提示,支持实时推理和回应生成。
Vector Databases & Retrieval 向量数据库与检索:该系统充当通向长期记忆的桥梁,促进高效访问相关信息。当 Agent Core 需要超出即时上下文的知识时,会发出记忆查询。检索机制会根据语义相似性、新鲜度或用户偏好等因素评估相关性,并从情节记忆和语义记忆中提取信息。实践实现包括 Chroma,适合本地开发和原型;Pinecone,面向生产规模检索优化的托管云服务;以及 Weaviate,支持混合关键词和向量搜索的开源方案。
Episodic Memory(Historical Interactions & Events)情节记忆(历史交互与事件) :情节记忆捕获并存储历史会话、用户行为和关键事件。工作记忆中的信息会定期存储到这里,以保留有价值上下文,使智能体能够回忆先前交互,并维护长期连续性。
Semantic Memory(Facts & World Knowledge)语义记忆(事实与世界知识) :语义记忆保存结构化事实知识,包括领域特定信息、规则和通用世界知识。这个知识库通过来自外部来源的数据摄取持续更新,形成智能体推理和输出的稳定基础。
External Databases/APIs/Documents 外部数据库 / API / 文档:这些外部系统,例如 CRM、知识库、公共 API 和文档仓库,为语义记忆提供原始输入。它们确保智能体知识保持当前状态,并与权威来源对齐。
Agent Outputs 智能体输出:基于当前上下文、历史记忆和事实知识的组合,Agent Core 会生成输出,例如个性化回应、智能行动或工具调用。这些输出通过与环境交互完成闭环,并可能为下一轮认知循环生成新的输入。
这种集成架构使智能体能够同时利用即时、历史和事实知识,从而实现连贯、个性化,并持续改进的互动。为了说明这些架构组件如何在实践中的高风险应用中结合起来,下面的案例研究将考察一个个性化医疗助手。
为了将这些架构概念落到实践实现中,下面的代码展示了 MemoryAugmentedAgent 的核心逻辑。它演示了一个基本循环:检索相关情节记忆,为当前查询提供上下文,然后存储新的交互以供未来使用。该示例使用个性化医疗助手场景,展示记忆如何随着时间支持更连贯、更具上下文意识的回应。
import datetime
class MemoryAugmentedAgent:
def __init__(self, llm_client, vector_db):
self.llm = llm_client
self.episodic_memory = vector_db # Using a vector DB for episodic memory
def process_interaction(self, user_id, user_query):
"""Processes a user query, retrieves relevant memories, and stores the new interaction."""
# 1. Retrieve relevant past interactions from episodic memory
relevant_memories = self.episodic_memory.search(
query=user_query,
user_id=user_id,
limit=3
)
# 2. Construct a prompt that includes the retrieved memories
prompt = f"""
You are a personalized healthcare assistant.
Here is the user's current query: "{user_query}"
For context, here are relevant past interactions with this user:
{relevant_memories}
Provide a helpful and context-aware response.
"""
response = self.llm.generate(prompt)
# 3. Store the current interaction in episodic memory for future use
interaction_record = {
"user_id": user_id,
"query": user_query,
"response": response,
"timestamp": datetime.datetime.now().isoformat()
}
self.episodic_memory.add(interaction_record)
return response
在实际场景中,MemoryAugmentedAgent 会以与 LLM 和向量数据库的连接进行初始化,后者作为其记忆。它的价值会在多次交互中显现。例如,患者第一次可能报告:“I've been feeling very fatigued lately.” 智能体处理这个查询,生成回应,并且最重要的是,会将这次交互记录,包括查询、回应和时间戳,存入情节记忆。
之后,当同一位患者继续说:“That diet change you suggested helped a bit, but I'm still tired.” 时,智能体不会把它当作孤立查询。它的 process_interaction 函数会首先搜索情节记忆,并检索到之前关于疲劳的对话,因为它在语义上相关。随后,这段检索到的记忆会被直接注入发送给 LLM 的提示中。
最终提示大致如下:
You are a personalized healthcare assistant. Here is the user's current query: 'That diet change you suggested helped a bit, but I'm still tired.' For context, here are relevant past interactions with this user: [{'query': 'I've been feeling very fatigued lately.', 'response': '...', 'timestamp': '...'}] Provide a helpful and context-aware response.
这个过程确保 LLM 拥有完整对话历史,使其能够生成更加连贯且有帮助的回应,并承认患者持续存在的体验。
这段代码简化展示了其机制,但要真正理解这种架构的力量,最好看看所有记忆组件如何在复杂应用中协同运行。下面关于个性化医疗助手的案例研究,展示了这个集成系统如何支持复杂、长期且上下文感知的互动。
案例研究:个性化医疗助手
设想一个被设计为个性化医疗助手的 AI 智能体,用来帮助患者管理慢性病,或理解复杂医疗信息。这个智能体的有效性完全取决于其复杂记忆能力,因为它必须维护长期上下文、回忆患者特定细节,并提供准确、及时的信息。
感知与工作记忆:当患者输入症状,或询问有关药物的问题时,智能体核心会接收这些外部输入。即时对话,包括患者语气和当前查询,会保存在工作记忆,也就是当前提示上下文中,使智能体能够进行流畅且响应及时的对话。
情节记忆实践:每次交互后,关键细节,例如症状变化、有效应对策略、用药依从性模式,甚至患者传达的情绪状态,都会被处理并用于将会话上下文/事件存储到情节记忆,也就是历史交互与事件中。例如,如果患者在复诊中报告持续疲劳,智能体可以向其向量数据库与检索系统发送记忆查询。随后,它可能从情节记忆中检索与之前疲劳实例、尝试过的干预措施及其效果相关的上下文,以确保护理连续性。
用于临床知识的语义记忆:助手庞大的医学知识,包括药物相互作用、疾病协议和公共卫生指南,存放在语义记忆,也就是事实与世界知识中。这些知识通过来自外部数据库/API/文档的知识摄取持续更新,可能包括临床数据库、医学期刊和监管文件。当被问及某种具体药物时,智能体会查询其语义记忆,以获取准确且最新的信息。
通过记忆检索实现个性化:当智能体形成输出,例如给出症状管理建议或解释治疗方案时,它会将工作记忆中的信息,与从情节记忆和语义记忆中检索到的洞察和相关上下文结合起来。情节记忆提供患者历史和偏好,语义记忆提供医学事实。例如,如果情节记忆显示某种放松技巧曾对患者有效,它可能推荐该技巧;或者根据语义记忆中记录的患者过敏信息来定制饮食建议。
面向可扩展性的记忆巩固:为了管理大量患者交互历史和医学知识,智能体会定期执行记忆巩固/摘要。情节记忆中的长咨询可能被总结为简洁患者画像,例如:“Patient A, Type 2 Diabetes, responded well to diet changes (2025-01-15), struggled with medication adherence (2025-03-20).” 这可以确保向量数据库与检索系统保持高效,在不造成性能退化的情况下,提供高质量、个性化支持。
感知、当前上下文管理、历史回忆、事实知识检索和记忆优化之间的持续互动,使个性化医疗助手能够提供富有同理心、有依据且真正个体化的支持,展示了记忆增强型智能体在关键领域中的力量。
在分别理解了自主决策智能体、规划智能体和记忆增强型智能体之后,下一步是系统性比较它们,以突出各自独特优势、局限,以及它们在集成进更大系统时如何彼此互补。
架构比较分析
每一种基础认知架构——自主决策智能体、规划智能体和记忆增强型智能体——都在各自特定领域中表现突出。然而,它们真正的潜力来自战略性组合。这些架构并不互斥;相反,它们是互补构件,集成后能够形成复杂智能系统,用于解决真实世界中的多层问题。
每种架构都有独特优势,也伴随权衡。在设计面向具体用例的系统时,理解这些区别非常关键。
自主决策智能体:这类智能体擅长实时响应。它们快速处理信息、评估选项并作出即时决策。它们特别适合客户服务聊天机器人、告警系统和分诊场景。
权衡:它们对速度的强调,可能增加幻觉或不安全行动的风险,尤其是在缺少适当约束时。它们也可能缺乏处理复杂或战略性任务所需的深度。
规划智能体:这类智能体非常适合执行复杂、多步骤目标。它们擅长将高层目标拆解为可管理子任务,协调依赖关系,并动态调整策略。这使它们非常适合项目编排、工作流自动化和战略规划。
权衡:规划智能体通常较慢,因为执行前需要分析和设计。它们还需要稳健控制机制来监控进展和从错误中恢复,从而增加架构复杂度。
记忆增强型智能体:这类智能体通过利用过往交互,在会话之间提供连续性。它们使用工作记忆、情节记忆和语义记忆来个性化回应、维护上下文,并在长时间跨度上推理。CRM 系统和智能个人助手等应用会从这一能力中受益很大。
权衡:管理记忆系统和优化检索过程可能很复杂。这些系统也需要谨慎设计,以避免信息过载。
图 5.4——结合三种基础元素的集成认知架构
下面总结不同架构:
| Agent Type | Strength | Ideal Use Case | Limitations |
|---|---|---|---|
| Autonomous Decision-Making | 实时回应和灵活性 | 客户服务、分诊 | 幻觉风险;缺乏深层上下文 |
| Planning Agent | 结构化执行和适应性 | 项目编排、复杂工作流 | 执行较慢;需要控制逻辑 |
| Memory-Augmented Agent | 长期连贯性和个性化 | CRM 系统、任务交接、连续性 | 维护复杂;对检索设计敏感 |
表 5.2——基础智能体架构比较分析
综合来看,这些架构构成了复杂 agentic systems,也就是智能体系统的互补构件。它们真正的力量会在被组合成更大工作流或多智能体协作时显现出来,第 7 章会对此进行更详细研究。
工程最佳实践
在探索了智能智能体的各个构件,并理解了它们的比较优势和组合方式之后,下一步关键任务是考虑它们的实际实现。构建可靠且强大的智能智能体,并不仅仅是理解理论;它要求在整个开发生命周期中遵循扎实的工程原则。本节概述一些关键最佳实践,帮助你从概念设计过渡到稳健、生产就绪的智能体系统。
为可扩展性和可维护性而设计
智能智能体在真实应用中的成功,取决于它们能否稳定运行,并且易于管理和扩展。
为了在实践中实现这些目标,以下最佳实践对于构建可扩展、可维护的智能体系统至关重要:
从模块化开始:模块化是软件工程中的核心原则,对于智能体系统来说更加关键。将智能体能力分离为不同模块:感知、记忆、规划和行动。这种关注点分离可以简化开发、调试和未来增强。例如,更新认知模块中的 LLM 微调策略,不会直接破坏行动模块中的工具集成逻辑。
记录一切——可观测性的重要性:智能智能体,尤其是由 LLM 驱动的智能体,可能表现出涌现行为,有时还不可预测。因此,稳健可观测性至关重要。需要在智能体决策循环的每个阶段实现全面日志记录,从初始感知、提示构造,到工具调用和最终行动。LangSmith 等工具,也就是用于调试、测试、评估和监控 LLM 应用的平台,或类似方案,对于洞察智能体表现、识别失败并理解智能体为什么作出某个决策非常关键。这在测试和持续改进中极具价值,正如第 4 章《智能体部署与负责任开发》中所讨论的。
优化性能与上下文管理
LLM 很强大,但也伴随计算成本和上下文窗口限制。高效设计是关键。
避免提示膨胀:LLM 的上下文窗口是有限的,向其中填入过量或无关信息,会降低性能、增加延迟,并带来更高成本。必须优化检索管线,只提供最相关的上下文。相关技术,例如对检索文档进行重排序,将在第 6 章中详细探讨;此外也包括使用前文讨论过的摘要化记忆条目等方法。
采用最大化性能并最小化成本的技术:除了提示优化,还应考虑针对不同智能体类型的 LLM 选择指南、面向智能体特定行为的微调,以及模型扩展考量。这些内容已在第 2 章《智能体工程师工具箱》中详细介绍。
确保稳健性和可靠性
智能智能体运行在动态环境中,必须被设计为能够优雅处理不确定性。智能体不可避免地会遇到无法解决的情况,或者其行动可能不安全的情况。你需要为不可判定或不安全条件设计清晰 fallback 和升级路径。这可能意味着默认交给人类操作员、向用户请求澄清,或回滚某个行动。为工具集成实现稳健错误处理也至关重要,而这正是第 7 章中工具使用型智能体的关键方面。这也直接关联第 4 章中讨论的安全和隐私考量,尤其是提示注入防御和安全工具访问模式。
小结
本章探索了三种基础认知架构:自主决策智能体、规划智能体和记忆增强型智能体。这些智能体共同构成创建智能、自适应系统的基础构件。每种架构专注于认知中的不同方面:决策智能体支持快速、反应式回应;规划智能体编排复杂、多步骤目标;记忆增强型智能体则通过工作记忆、情节记忆和语义记忆提供连续性。它们共同实现了第 1 章介绍的感知、推理、行动和学习认知循环,使智能体能够从反应式行为走向长期、上下文感知智能。
关键在于,这些架构在集成时最强大,它们的优势可以结合起来,创造更强大、更有韧性的智能体。本章强调了模块化设计、可观测性、高效上下文管理和稳健安全措施等最佳实践,帮助工程师将这些概念转化为可扩展、可靠的系统。综合来看,这些模式支持从简单对话机器人,到能够复杂推理的记忆增强型智能体等各种应用。
通过自然延续第 1 章中的认知循环和客户服务示例,我们看到基础概念如何演化为生产就绪的自主系统,能够处理复杂真实世界场景,同时保持安全性、可靠性和性能。在下一章中,我们将转向信息检索与知识智能体,进一步扩展这些理念,探索智能体如何访问并利用大量外部知识来丰富自身决策。