重新定义智能:AI Agent如何模拟人类行为逻辑
重新定义智能:AI Agent如何模拟人类行为逻辑
1. 引言
在人工智能发展的历史长河中,我们一直在追求一个终极目标:创造出能够像人类一样思考、决策和行动的智能系统。从早期的符号主义AI到后来的连接主义,再到如今的大语言模型时代,我们不断在向这个目标迈进。然而,真正的"智能"不仅仅是处理信息的能力,更是一种能够理解环境、设定目标、制定计划并执行行动的综合能力。
今天,我们站在一个新的十字路口——AI Agent(智能体)的兴起正在重新定义我们对智能的理解。AI Agent不仅仅是被动地响应指令,而是能够主动感知环境、形成信念、制定目标、规划行动并执行决策,这正是人类行为逻辑的核心所在。
在这篇文章中,我们将深入探讨AI Agent如何模拟人类的行为逻辑,从理论基础到实际实现,从数学模型到代码案例,全方位解析这一正在改变AI格局的前沿技术。
2. 核心概念
2.1 什么是AI Agent?
AI Agent(智能体)是人工智能领域的一个核心概念,指的是能够感知环境、做出决策并采取行动的实体。这个概念最早可以追溯到20世纪80年代的分布式人工智能研究,但直到近年来,随着大语言模型的兴起,AI Agent才真正迎来了它的黄金时代。
让我们先给出一个正式的定义:
AI Agent:一个位于某个环境中,能够自主感知环境状态,通过内部决策过程选择并执行行动,以实现特定目标的计算系统。
这个定义包含了几个关键要素:
- 环境:Agent存在和行动的外部世界
- 感知:Agent获取环境信息的能力
- 决策:Agent基于感知信息选择行动的内部过程
- 行动:Agent对环境产生影响的方式
- 目标:Agent行动的导向和目的
2.2 人类行为逻辑的核心要素
要理解AI Agent如何模拟人类行为逻辑,我们首先需要理解人类行为逻辑本身。让我们从认知科学的角度,剖析人类行为的核心要素:
- 感知与理解:人类通过感官获取外界信息,并将其转化为有意义的理解
- 记忆与学习:人类能够存储过去的经验,并从中学习
- 推理与决策:人类能够基于已有信息进行逻辑推理,做出决策
- 目标设定与规划:人类能够设定目标,并制定实现目标的计划
- 行动执行与反馈:人类能够执行计划,并根据结果调整策略
这些要素构成了一个完整的人类行为循环,而AI Agent正是要在计算系统中模拟这个循环。
2.3 AI Agent vs. 传统AI系统
为了更清晰地理解AI Agent的特点,让我们将其与传统AI系统进行对比:
| 特性 | 传统AI系统 | AI Agent |
|---|---|---|
| 自主性 | 被动响应指令 | 主动感知和行动 |
| 目标导向 | 完成特定任务 | 追求长期目标 |
| 环境交互 | 有限或无交互 | 持续与环境交互 |
| 适应性 | 固定行为模式 | 能够根据经验调整 |
| 社交能力 | 无 | 能够与其他Agent或人类交互 |
3. 问题背景
3.1 传统AI的局限性
尽管AI在过去几十年取得了巨大进步,但传统AI系统仍存在一些根本性的局限性:
- 任务特异性:大多数传统AI系统是为特定任务设计的,缺乏通用性
- 缺乏主动性:传统AI系统通常是被动的,等待用户输入指令
- 有限的上下文理解:传统AI系统往往难以理解复杂的上下文和长期目标
- 无法持续学习:传统AI系统在部署后通常无法持续学习和适应
- 缺乏规划能力:传统AI系统往往缺乏长期规划和决策能力
这些局限性正是AI Agent想要解决的问题。
3.2 大语言模型的崛起与Agent的新机遇
近年来,大语言模型(LLMs)如GPT-4、Claude、Llama等的崛起为AI Agent的发展带来了前所未有的机遇:
- 强大的语言理解和生成能力:LLMs能够理解复杂的语言指令,并生成连贯的文本
- 丰富的世界知识:LLMs在预训练过程中学习了大量的世界知识
- 一定的推理能力:LLMs展现出了令人惊讶的推理和问题解决能力
- 多模态能力:最新的LLMs能够处理图像、音频等多种模态的信息
这些能力使得LLMs成为构建AI Agent的理想基础组件。
3.3 从"工具"到"伙伴"的范式转变
AI Agent的兴起代表着一种范式转变:从将AI视为"工具"到将AI视为"伙伴"。在传统范式中,人类是使用者,AI是工具;而在新范式中,AI Agent能够主动理解人类意图,与人类协作,甚至代表人类自主行动。
这种转变在多个领域已经开始显现:
- 个人助理:从简单的指令响应到主动提供建议
- 软件开发:从代码补全到自主开发功能
- 客户服务:从脚本化回复到个性化交互
- 医疗健康:从诊断辅助到健康管理伙伴
4. 问题描述
4.1 人类行为逻辑的计算建模挑战
要让AI Agent模拟人类行为逻辑,我们面临着一系列根本性的挑战:
- 如何表示和处理不确定性:人类世界充满了不确定性,如何在计算系统中建模和处理这种不确定性?
- 如何平衡短期和长期目标:人类经常需要在短期满足和长期利益之间做出权衡,AI Agent如何做到这一点?
- 如何实现持续学习:人类能够从每一次经历中学习,AI Agent如何在部署后持续学习和适应?
- 如何建模常识推理:人类拥有大量的常识知识,并能够基于这些知识进行推理,如何让AI Agent也具备这种能力?
- 如何处理社交互动:人类的许多行为发生在社交环境中,如何让AI Agent理解和参与社交互动?
4.2 AI Agent设计的技术难题
除了理论挑战外,AI Agent的设计还面临着一系列技术难题:
- 架构设计:如何设计一个灵活、可扩展的Agent架构?
- 知识表示:如何有效地表示和组织Agent的知识?
- 决策机制:如何设计一个高效、合理的决策机制?
- 行动执行:如何确保Agent的行动能够准确、安全地执行?
- 评估方法:如何评估AI Agent的性能和智能程度?
5. AI Agent的核心架构
5.1 经典Agent架构
在AI领域,有几种经典的Agent架构,它们分别从不同角度模拟了人类行为逻辑:
5.1.1 简单反射Agent
简单反射Agent是最简单的Agent架构,它基于当前感知直接选择行动,不考虑感知历史。这种架构类似于人类的本能反应。
感知 → 条件-行动规则 → 行动
虽然简单,但这种架构在某些特定场景下非常有效,例如恒温器控制系统。
5.1.2 基于模型的反射Agent
基于模型的反射Agent在简单反射Agent的基础上增加了内部状态,用于跟踪感知历史。这种架构能够处理部分可观察环境。
感知 → 更新内部状态 → 条件-行动规则 → 行动
↑
世界模型
5.1.3 目标驱动Agent
目标驱动Agent在基于模型的反射Agent的基础上增加了目标信息,用于指导行动选择。这种架构能够根据目标进行更复杂的决策。
感知 → 更新内部状态 → 基于目标选择行动 → 行动
↑ ↑
世界模型 目标
5.1.4 效用驱动Agent
效用驱动Agent在目标驱动Agent的基础上增加了效用函数,用于衡量不同状态的"好坏"程度。这种架构能够在多个目标之间进行权衡。
感知 → 更新内部状态 → 基于效用选择行动 → 行动
↑ ↑
世界模型 效用函数
5.1.5 学习Agent
学习Agent在上述架构的基础上增加了学习组件,能够从经验中改进自己的行为。这是最接近人类学习能力的架构。
感知 → 更新内部状态 → 决策机制 → 行动
↑ ↑
世界模型 学习机制
↑
批评反馈
5.2 现代LLM-based Agent架构
随着大语言模型的兴起,一种新的Agent架构正在形成,它充分利用了LLM的强大能力。让我们来看一个典型的LLM-based Agent架构:
这个架构包含以下核心组件:
- 大语言模型核心:作为Agent的"大脑",负责推理、决策和规划
- 感知模块:负责感知和理解环境
- 记忆系统:负责存储和检索Agent的经验
- 目标管理:负责设定和管理Agent的目标
- 行动执行模块:负责执行Agent的决策
- 工具集:为Agent提供扩展能力的工具集合
5.3 记忆系统的设计
记忆是人类行为逻辑的核心要素之一,也是AI Agent设计的关键组件。一个好的记忆系统应该能够:
- 存储多种类型的信息:包括事实、经验、规则等
- 高效检索相关信息:根据当前上下文快速找到相关记忆
- 更新和遗忘:能够更新旧记忆,遗忘不重要的信息
- 泛化和抽象:能够从具体经验中提取抽象知识
在现代LLM-based Agent中,记忆系统通常采用分层结构:
- 感觉记忆:短暂存储原始感知信息
- 短期记忆:存储当前上下文信息
- 工作记忆:用于推理和决策的临时工作区
- 长期记忆:长期存储重要信息和经验
6. 人类行为逻辑的核心机制及其Agent实现
6.1 感知与理解
感知与理解是人类行为逻辑的第一步,也是AI Agent与环境交互的起点。
6.1.1 人类感知与理解的特点
人类的感知与理解具有以下特点:
- 多模态整合:人类能够同时处理视觉、听觉、触觉等多种感知信息
- 选择性注意:人类能够选择性地关注重要信息,忽略无关信息
- 上下文理解:人类能够基于上下文理解感知信息的含义
- 预测性编码:人类的感知系统会不断预测未来的感知信息
6.1.2 Agent中的感知与理解实现
在AI Agent中,感知与理解通常通过以下方式实现:
class PerceptionModule:
def __init__(self, llm):
self.llm = llm
self.sensors = {} # 不同的感知传感器
def add_sensor(self, sensor_name, sensor):
"""添加感知传感器"""
self.sensors[sensor_name] = sensor
def perceive(self, environment):
"""感知环境"""
raw_perceptions = {}
for sensor_name, sensor in self.sensors.items():
raw_perceptions[sensor_name] = sensor.sense(environment)
# 整合和理解感知信息
understood_perception = self._integrate_and_understand(raw_perceptions)
return understood_perception
def _integrate_and_understand(self, raw_perceptions):
"""整合和理解多模态感知信息"""
# 将原始感知信息转化为文本描述
perception_text = self._perceptions_to_text(raw_perceptions)
# 使用LLM理解感知信息
prompt = f"""
请分析以下感知信息,提取关键内容,并描述当前的环境状态:
感知信息:
{perception_text}
请以JSON格式返回,包含以下字段:
- key_facts: 关键事实列表
- environment_state: 环境状态描述
- potential_opportunities: 潜在机会列表
- potential_threats: 潜在威胁列表
"""
response = self.llm.generate(prompt)
return self._parse_response(response)
6.2 记忆与学习
记忆与学习是人类行为逻辑的核心,也是AI Agent持续改进的基础。
6.2.1 人类记忆与学习的机制
人类的记忆与学习具有以下特点:
- 编码、存储和检索:记忆的三个基本过程
- 联想记忆:相关信息会被关联存储和检索
- 遗忘机制:人类会主动遗忘不重要的信息
- 强化学习:通过奖励和惩罚来学习
- 观察学习:通过观察他人来学习
- 抽象概括:从具体经验中提取抽象知识
6.2.2 Agent中的记忆系统实现
让我们来看一个简单的记忆系统实现:
import numpy as np
from datetime import datetime
from typing import List, Dict, Any
import json
class Memory:
def __init__(self, content: str, memory_type: str, importance: float = 0.5,
timestamp: datetime = None, embedding: np.ndarray = None):
self.content = content
self.memory_type = memory_type # 'fact', 'experience', 'rule', 'goal'
self.importance = importance # 0.0到1.0之间的重要性评分
self.timestamp = timestamp or datetime.now()
self.embedding = embedding
self.access_count = 0
self.last_access = self.timestamp
def to_dict(self) -> Dict[str, Any]:
return {
'content': self.content,
'memory_type': self.memory_type,
'importance': self.importance,
'timestamp': self.timestamp.isoformat(),
'access_count': self.access_count,
'last_access': self.last_access.isoformat()
}
class MemorySystem:
def __init__(self, llm, embedder, capacity: int = 10000):
self.llm = llm
self.embedder = embedder
self.capacity = capacity
self.short_term_memory: List[Memory] = []
self.long_term_memory: List[Memory] = []
self.short_term_capacity = 10 # 短期记忆容量
def add_memory(self, content: str, memory_type: str,
importance: float = None, force_long_term: bool = False):
"""添加新记忆"""
# 生成嵌入向量
embedding = self.embedder.embed(content)
# 如果没有提供重要性评分,使用LLM评估
if importance is None:
importance = self._evaluate_importance(content, memory_type)
memory = Memory(content, memory_type, importance, embedding=embedding)
if force_long_term:
self._add_to_long_term(memory)
else:
self._add_to_short_term(memory)
def _add_to_short_term(self, memory: Memory):
"""添加到短期记忆"""
self.short_term_memory.append(memory)
# 如果短期记忆已满,将部分记忆转移到长期记忆
if len(self.short_term_memory) > self.short_term_capacity:
# 保留最重要的短期记忆,将其他转移到长期记忆
self.short_term_memory.sort(key=lambda m: m.importance, reverse=True)
to_transfer = self.short_term_memory[self.short_term_capacity:]
self.short_term_memory = self.short_term_memory[:self.short_term_capacity]
for memory in to_transfer:
self._add_to_long_term(memory)
def _add_to_long_term(self, memory: Memory):
"""添加到长期记忆"""
# 如果长期记忆已满,删除最不重要的记忆
if len(self.long_term_memory) >= self.capacity:
self._forget_least_important()
self.long_term_memory.append(memory)
def _forget_least_important(self):
"""忘记最不重要的记忆"""
# 综合考虑重要性、访问频率和最近访问时间
def memory_score(memory):
recency = (datetime.now() - memory.last_access).total_seconds()
recency_factor = 1.0 / (1.0 + recency / 86400.0) # 衰减因子,按天计算
frequency_factor = min(1.0, memory.access_count / 10.0)
return memory.importance * 0.5 + recency_factor * 0.3 + frequency_factor * 0.2
self.long_term_memory.sort(key=memory_score)
# 删除评分最低的10%记忆
delete_count = max(1, len(self.long_term_memory) // 10)
self.long_term_memory = self.long_term_memory[delete_count:]
def retrieve(self, query: str, top_k: int = 5,
memory_types: List[str] = None) -> List[Memory]:
"""检索相关记忆"""
query_embedding = self.embedder.embed(query)
# 筛选记忆类型
candidate_memories = self.long_term_memory.copy()
if memory_types:
candidate_memories = [m for m in candidate_memories if m.memory_type in memory_types]
# 计算相关性分数
for memory in candidate_memories:
# 计算语义相关性
semantic_relevance = self._cosine_similarity(query_embedding, memory.embedding)
# 计算近期因子
recency = (datetime.now() - memory.last_access).total_seconds()
recency_factor = 1.0 / (1.0 + recency / 86400.0)
# 综合评分
memory.relevance_score = (
semantic_relevance * 0.6 +
memory.importance * 0.2 +
recency_factor * 0.2
)
# 排序并返回top-k
candidate_memories.sort(key=lambda m: m.relevance_score, reverse=True)
top_memories = candidate_memories[:top_k]
# 更新访问计数和时间
for memory in top_memories:
memory.access_count += 1
memory.last_access = datetime.now()
return top_memories
def _evaluate_importance(self, content: str, memory_type: str) -> float:
"""评估记忆的重要性"""
prompt = f"""
请评估以下信息的重要性,从0.0(完全不重要)到1.0(极其重要)评分:
信息类型:{memory_type}
信息内容:{content}
请只返回一个0.0到1.0之间的数字,不要其他内容。
"""
try:
response = self.llm.generate(prompt)
importance = float(response.strip())
return max(0.0, min(1.0, importance))
except:
return 0.5 # 默认重要性
def _cosine_similarity(self, vec1: np.ndarray, vec2: np.ndarray) -> float:
"""计算余弦相似度"""
dot_product = np.dot(vec1, vec2)
norm1 = np.linalg.norm(vec1)
norm2 = np.linalg.norm(vec2)
return dot_product / (norm1 * norm2) if norm1 > 0 and norm2 > 0 else 0.0
def reflect(self):
"""反思:从记忆中提取抽象知识"""
# 检索最近的重要记忆
recent_memories = sorted(
[m for m in self.long_term_memory if m.memory_type == 'experience'],
key=lambda m: m.timestamp,
reverse=True
)[:20]
if len(recent_memories) < 3:
return # 没有足够的记忆进行反思
# 准备反思提示
memories_text = "\n".join([
f"- {m.timestamp.strftime('%Y-%m-%d %H:%M')}: {m.content}"
for m in recent_memories
])
prompt = f"""
请分析以下最近的经历,提取3-5个重要的见解或规则:
最近的经历:
{memories_text}
请以JSON格式返回,包含一个"insights"数组,每个元素包含:
- content: 见解或规则的内容
- type: 类型('rule', 'principle', 'pattern')
- confidence: 置信度(0.0到1.0)
"""
try:
response = self.llm.generate(prompt)
insights = json.loads(response)['insights']
# 将提取的见解添加到记忆中
for insight in insights:
self.add_memory(
content=insight['content'],
memory_type=insight['type'],
importance=insight['confidence'],
force_long_term=True
)
except Exception as e:
print(f"反思过程出错: {e}")
6.3 推理与决策
推理与决策是人类行为逻辑的核心,也是AI Agent智能的集中体现。
6.3.1 人类推理与决策的特点
人类的推理与决策具有以下特点:
- 多种推理模式:包括演绎推理、归纳推理、溯因推理等
- 启发式思维:使用经验法则快速做出决策
- 情感影响:情绪和情感会影响决策过程
- 社会因素:社会规范和他人意见会影响决策
- 有限理性:在信息不完全和时间有限的情况下做出满意决策
6.3.2 Agent中的推理与决策实现
让我们来看一个基于LLM的推理与决策实现:
import json
from typing import List, Dict, Any, Optional
from enum import Enum
class DecisionType(Enum):
IMMEDIATE_ACTION = "immediate_action" # 立即行动
PLAN = "plan" # 制定计划
ASK_FOR_MORE_INFO = "ask_for_more_info" # 询问更多信息
DELIBERATE = "deliberate" # 需要进一步思考
NO_ACTION = "no_action" # 不采取行动
class ReasoningEngine:
def __init__(self, llm, memory_system, goal_manager):
self.llm = llm
self.memory_system = memory_system
self.goal_manager = goal_manager
def reason_and_decide(self, perception: Dict[str, Any],
context: Optional[Dict[str, Any]] = None) -> Dict[str, Any]:
"""推理和决策"""
# 1. 检索相关记忆
query = self._perception_to_query(perception)
relevant_memories = self.memory_system.retrieve(query, top_k=10)
# 2. 获取当前目标
current_goals = self.goal_manager.get_active_goals()
# 3. 进行推理
reasoning_result = self._reason(perception, relevant_memories, current_goals, context)
# 4. 做出决策
decision = self._make_decision(reasoning_result, current_goals)
# 5. 记录推理过程
self._record_reasoning(perception, reasoning_result, decision)
return decision
def _perception_to_query(self, perception: Dict[str, Any]) -> str:
"""将感知信息转化为检索查询"""
facts = perception.get('key_facts', [])
state = perception.get('environment_state', '')
return f"当前环境状态: {state}\n关键事实: {', '.join(facts)}"
def _reason(self, perception: Dict[str, Any],
relevant_memories: List[Any],
current_goals: List[Any],
context: Optional[Dict[str, Any]] = None) -> Dict[str, Any]:
"""进行推理"""
# 准备推理上下文
perception_text = json.dumps(perception, ensure_ascii=False, indent=2)
memories_text = "\n".join([
f"- [{m.memory_type}] {m.content}"
for m in relevant_memories
])
goals_text = "\n".join([
f"- {goal.description} (优先级: {goal.priority})"
for goal in current_goals
])
# 构建推理提示
prompt = f"""
请作为一个智能代理,分析当前情况并进行推理。
当前感知:
{perception_text}
相关记忆:
{memories_text if memories_text else "无"}
当前目标:
{goals_text if goals_text else "无"}
额外上下文:
{json.dumps(context, ensure_ascii=False, indent=2) if context else "无"}
请进行以下分析:
1. 形势评估:分析当前情况的关键要素
2. 机会识别:识别可能的机会
3. 风险评估:评估潜在的风险
4. 选项生成:生成可能的行动选项
5. 选项评估:评估每个选项的优缺点
请以JSON格式返回你的分析。
"""
try:
response = self.llm.generate(prompt)
return json.loads(response)
except Exception as e:
print(f"推理过程出错: {e}")
return {
"形势评估": "无法进行详细评估",
"机会识别": [],
"风险评估": [],
"选项生成": [],
"选项评估": []
}
def _make_decision(self, reasoning_result: Dict[str, Any],
current_goals: List[Any]) -> Dict[str, Any]:
"""基于推理结果做出决策"""
options = reasoning_result.get("选项生成", [])
if not options:
return {
"decision_type": DecisionType.NO_ACTION.value,
"reasoning": "没有可行的行动选项"
}
# 构建决策提示
options_text = "\n".join([
f"{i+1}. {option}"
for i, option in enumerate(options)
])
goals_text = "\n".join([
f"- {goal.description} (优先级: {goal.priority})"
for goal in current_goals
])
option_evaluations = reasoning_result.get("选项评估", {})
evaluations_text = json.dumps(option_evaluations, ensure_ascii=False, indent=2)
prompt = f"""
请基于以下信息做出决策:
可能的行动选项:
{options_text}
选项评估:
{evaluations_text}
当前目标:
{goals_text if goals_text else "无特定目标"}
请选择最佳的行动方案,并决定决策类型:
- immediate_action: 可以立即执行的行动
- plan: 需要制定详细计划的行动
- ask_for_more_info: 需要更多信息才能决定
- deliberate: 需要进一步思考
- no_action: 不采取任何行动
请以JSON格式返回决策,包含以下字段:
- decision_type: 决策类型
- selected_option: 选择的选项(如果有)
- reasoning: 决策理由
- next_steps: 下一步行动(如果适用)
"""
try:
response = self.llm.generate(prompt)
decision = json.loads(response)
return decision
except Exception as e:
print(f"决策过程出错: {e}")
return {
"decision_type": DecisionType.DELIBERATE.value,
"reasoning": f"决策过程出错: {e}"
}
def _record_reasoning(self, perception: Dict[str, Any],
reasoning_result: Dict[str, Any],
decision: Dict[str, Any]):
"""记录推理过程"""
record = {
"timestamp": datetime.now().isoformat(),
"perception": perception,
"reasoning": reasoning_result,
"decision": decision
}
# 保存到记忆系统
self.memory_system.add_memory(
content=json.dumps(record, ensure_ascii=False),
memory_type="reasoning_record",
importance=0.6
)
6.4 目标设定与规划
目标设定与规划是人类行为逻辑的重要组成部分,也是AI Agent实现长期目标的关键。
6.4.1 人类目标设定与规划的特点
人类的目标设定与规划具有以下特点:
- 目标层次结构:从长期愿景到短期目标的层次结构
- 动态调整:根据情况变化调整目标和计划
- 资源约束:考虑时间、精力等资源约束
- 多目标平衡:平衡多个可能冲突的目标
- 灵活性:计划具有一定的灵活性,能够应对意外情况
6.4.2 Agent中的目标管理与规划实现
让我们来看一个目标管理与规划的实现:
import json
from typing import List, Dict, Any, Optional
from datetime import datetime, timedelta
from enum import Enum
class GoalStatus(Enum):
PENDING = "pending"
ACTIVE = "active"
COMPLETED = "completed"
FAILED = "failed"
PAUSED = "paused"
class Goal:
def __init__(self, description: str, priority: float = 0.5,
deadline: Optional[datetime] = None,
parent_goal_id: Optional[str] = None):
self.id = id(self) # 简单的ID生成
self.description = description
self.priority = priority # 0.0到1.0之间的优先级
self.status = GoalStatus.PENDING
self.created_at = datetime.now()
self.deadline = deadline
self.parent_goal_id = parent_goal_id
self.subgoals: List[str] = [] # 子目标ID列表
self.progress = 0.0 # 0.0到1.0之间的进度
self.plan: Optional[str] = None # 实现目标的计划
self.history: List[Dict[str, Any]] = [] # 状态变更历史
def update_status(self, new_status: GoalStatus, reason: str = ""):
"""更新目标状态"""
self.history.append({
"timestamp": datetime.now().isoformat(),
"old_status": self.status.value,
"new_status": new_status.value,
"reason": reason
})
self.status = new_status
def to_dict(self) -> Dict[str, Any]:
return {
"id": self.id,
"description": self.description,
"priority": self.priority,
"status": self.status.value,
"created_at": self.created_at.isoformat(),
"deadline": self.deadline.isoformat() if self.deadline else None,
"parent_goal_id": self.parent_goal_id,
"subgoals": self.subgoals,
"progress": self.progress,
"plan": self.plan,
"history": self.history
}
class GoalManager:
def __init__(self, llm):
self.llm = llm
self.goals: Dict[int, Goal] = {} # 所有目标
self.goal_hierarchy: Dict[int, List[int]] = {} # 目标层次结构
def add_goal(self, description: str, priority: float = 0.5,
deadline: Optional[datetime] = None,
parent_goal_id: Optional[int] = None) -> int:
"""添加新目标"""
goal = Goal(description, priority, deadline, parent_goal_id)
self.goals[goal.id] = goal
# 更新层次结构
if parent_goal_id and parent_goal_id in self.goals:
self.goals[parent_goal_id].subgoals.append(goal.id)
if goal.id not in self.goal_hierarchy:
self.goal_hierarchy[goal.id] = []
return goal.id
def get_active_goals(self) -> List[Goal]:
"""获取所有活跃目标,按优先级排序"""
active_goals = [
goal for goal in self.goals.values()
if goal.status == GoalStatus.ACTIVE
]
# 按优先级和紧急程度排序
active_goals.sort(
key=lambda g: (g.priority, self._calculate_urgency(g)),
reverse=True
)
return active_goals
def _calculate_urgency(self, goal: Goal) -> float:
"""计算目标的紧急程度"""
if not goal.deadline:
return 0.0
time_left = (goal.deadline - datetime.now()).total_seconds()
if time_left <= 0:
return 1.0 # 已经过期,最紧急
# 紧急程度随着时间减少而增加
total_time = (goal.deadline - goal.created_at).total_seconds()
if total_time <= 0:
return 0.5
return 1.0 - (time_left / total_time)
def update_goal_progress(self, goal_id: int, progress: float,
reason: str = ""):
"""更新目标进度"""
if goal_id not in self.goals:
return
goal = self.goals[goal_id]
goal.progress = max(0.0, min(1.0, progress))
if progress >= 1.0 and goal.status != GoalStatus.COMPLETED:
goal.update_status(GoalStatus.COMPLETED, f"目标已完成: {reason}")
self._check_parent_goals(goal.parent_goal_id)
def _check_parent_goals(self, parent_goal_id: Optional[int]):
"""检查父目标是否可以完成"""
if not parent_goal_id or parent_goal_id not in self.goals:
return
parent_goal = self.goals[parent_goal_id]
# 检查所有子目标是否都已完成
all_subgoals_completed = all(
self.goals[subgoal_id].status == GoalStatus.COMPLETED
for subgoal_id in parent_goal.subgoals
if subgoal_id in self.goals
)
if all_subgoals_completed and parent_goal.subgoals:
# 计算父目标的进度
completed_count = sum(
1 for subgoal_id in parent_goal.subgoals
if subgoal_id in self.goals and
self.goals[subgoal_id].status == GoalStatus.COMPLETED
)
parent_goal.progress = completed_count / len(parent_goal.subgoals)
parent_goal.update_status(
GoalStatus.COMPLETED,
"所有子目标已完成"
)
# 继续检查更上层的父目标
self._check_parent_goals(parent_goal.parent_goal_id)
def create_plan(self, goal_id: int, context: Optional[Dict[str, Any]] = None) -> str:
"""为目标创建计划"""
if goal_id not in self.goals:
return "目标不存在"
goal = self.goals[goal_id]
# 收集相关信息
goal_info = goal.to_dict()
subgoals_info = [
self.goals[subgoal_id].to_dict()
for subgoal_id in goal.subgoals
if subgoal_id in self.goals
]
# 构建计划生成提示
prompt = f"""
请为以下目标创建一个详细的执行计划:
目标信息:
{json.dumps(goal_info, ensure_ascii=False, indent=2)}
子目标信息:
{json.dumps(subgoals_info, ensure_ascii=False, indent=2) if subgoals_info else "无"}
额外上下文:
{json.dumps(context, ensure_ascii=False, indent=2) if context else "无"}
请提供:
1. 实现目标的主要步骤
2. 每个步骤的具体行动
3. 每个步骤的时间估计
4. 可能的障碍和应对策略
5. 成功标准
请以结构化的格式返回计划。
"""
try:
plan = self.llm.generate(prompt)
goal.plan = plan
return plan
except Exception as e:
return f"计划创建失败: {e}"
def decompose_goal(self, goal_id: int, context: Optional[Dict[str, Any]] = None) -> List[int]:
"""将目标分解为子目标"""
if goal_id not in self.goals:
return []
goal = self.goals[goal_id]
# 构建目标分解提示
prompt = f"""
请将以下目标分解为可执行的子目标:
目标:{goal.description}
优先级:{goal.priority}
截止时间:{goal.deadline.strftime('%Y-%m-%d %H:%M') if goal.deadline else '无'}
额外上下文:
{json.dumps(context, ensure_ascii=False, indent=2) if context else "无"}
请提供3-7个子目标,每个子目标应该:
1. 具体、可测量
2. 有明确的完成标准
3. 按逻辑顺序排列
请以JSON格式返回,包含一个"subgoals"数组,每个元素有:
- description: 子目标描述
- priority: 建议优先级(0.0-1.0)
- estimated_time: 估计完成时间(小时)
- completion_criteria: 完成标准
"""
try:
response = self.llm.generate(prompt)
subgoals_data = json.loads(response)["subgoals"]
subgoal_ids = []
for subgoal_data in subgoals_data:
# 计算子目标的截止时间
deadline = None
if goal.deadline and "estimated_time" in subgoal_data:
try:
estimated_hours = float(subgoal_data["estimated_time"])
deadline = goal.deadline - timedelta(hours=estimated_hours)
except:
pass
# 创建子目标
subgoal_id = self.add_goal(
description=subgoal_data["description"],
priority=subgoal_data.get("priority", goal.priority * 0.8),
deadline=deadline,
parent_goal_id=goal_id
)
subgoal_ids.append(subgoal_id)
return subgoal_ids
except Exception as e:
print(f"目标分解失败: {e}")
return []
7. AI Agent的数学模型
7.1 马尔可夫决策过程
马尔可夫决策过程(MDP)是描述Agent与环境交互的经典数学框架。
7.1.1 MDP的定义
一个马尔可夫决策过程可以表示为一个五元组:
M=(S,A,P,R,γ)\mathcal{M} = (\mathcal{S}, \mathcal{A}, P, R, \gamma)M=(S,A,P,R,γ)
其中:
- S\mathcal{S}S 是状态集合
- A\mathcal{A}A 是行动集合
- P(s′∣s,a)P(s'|s, a)P(s′∣s,a) 是状态转移概率,表示在状态sss执行行动aaa后转移到状态s′s's′的概率
- R(s,a,s′)R(s, a, s')R(s,a,s′) 是奖励函数,表示在状态sss执行行动aaa转移到状态s′s's′后获得的即时奖励
- γ∈[0,1)\gamma \in [0, 1)γ∈[0,1) 是折扣因子,表示未来奖励的折扣率
7.1.2 策略与价值函数
策略π(a∣s)\pi(a|s)π(a∣s)表示在状态sss下选择行动aaa的概率。
状态价值函数Vπ(s)V^\pi(s)Vπ(s)表示在策略π\piπ下从状态sss开始的期望累积奖励:
Vπ(s)=Eπ[∑t=0∞γtRt∣s0=s]V^\pi(s) = \mathbb{E}_\pi \left[ \sum_{t=0}^{\infty} \gamma^t R_t \mid s_0 = s \right]Vπ(s)=Eπ[t=0∑∞γtRt∣s0=s]
行动价值函数Qπ(s,a)Q^\pi(s, a)Qπ(s,a)表示在状态sss下执行行动aaa,然后遵循策略π\piπ的期望累积奖励:
Qπ(s,a)=Eπ[∑t=0∞γtRt∣s0=s,a0=a]Q^\pi(s, a) = \mathbb{E}_\pi \left[ \sum_{t=0}^{\infty} \gamma^t R_t \mid s_0 = s, a_0 = a \right]Qπ(s,a)=Eπ[t=0∑∞γtRt∣s0=s,a0=a]
7.1.3 贝尔曼方程
状态价值函数和行动价值函数满足贝尔曼方程:
Vπ(s)=∑a∈Aπ(a∣s)∑s′∈SP(s′∣s,a)[R(s,a,s′)+γVπ(s′)]V^\pi(s) = \sum_{a \in \mathcal{A}} \pi(a|s) \sum_{s' \in \mathcal{S}} P(s'|s, a) \left[ R(s, a, s') + \gamma V^\pi(s') \right]Vπ(s)=a∈A∑π(a∣s)s′∈S∑P(s′∣s,a)[R(s,a,s′)+γVπ(s′)]
Qπ(s,a)=∑s′∈SP(s′∣s,a)[R(s,a,s′)+γ∑a′∈Aπ(a′∣s′)Qπ(s′,a′)]Q^\pi(s, a) = \sum_{s' \in \mathcal{S}} P(s'|s, a) \left[ R(s, a, s') + \gamma \sum_{a' \in \mathcal{A}} \pi(a'|s') Q^\pi(s', a') \right]Qπ(s,a)=s′∈S∑P(s′∣s,a)[R(s,a,s′)+γa′∈A∑π(a′∣s′)Qπ(s′,a′)]
7.1.4 最优策略
最优策略π∗\pi^*π∗是指在所有状态下都能获得最大期望累积奖励的策略:
π∗(s)=argmaxπVπ(s),∀s∈S\pi^*(s) = \arg\max_\pi V^\pi(s), \quad \forall s \in \mathcal{S}π∗(s)=argπmaxVπ(s),∀s∈S
最优状态价值函数V∗(s)V^*(s)V∗(s)和最优行动价值函数Q∗(s,a)Q^*(s, a)Q∗(s,a)分别表示最优策略下的价值函数:
V∗(s)=maxa∑s′∈SP(s′∣s,a)[R(s,a,s′)+γV∗(s′)]V^*(s) = \max_a \sum_{s' \in \mathcal{S}} P(s'|s, a) \left[ R(s, a, s') + \gamma V^*(s') \right]V∗(s)=amaxs′∈S∑P(s′∣s,a)[R(s,a,s′)+γV∗(s′)]
Q∗(s,a)=∑s′∈SP(s′∣s,a)[R(s,a,s′)+γmaxa′Q∗(s′,a′)]Q^*(s, a) = \sum_{s' \in \mathcal{S}} P(s'|s, a) \left[ R(s, a, s') + \gamma \max_{a'} Q^*(s', a') \right]Q∗(s,a)=s′∈S∑P(s′∣s,a)[R(s,a,s′)+γa′maxQ∗(s′,a′)]
7.2 部分可观察马尔可夫决策过程
在现实世界中,Agent往往无法完全观察环境状态,这就需要使用部分可观察马尔可夫决策过程(POMDP)。
7.2.1 POMDP的定义
一个POMDP可以表示为一个七元组:
P=(S,A,P,R,O,Z,γ)\mathcal{P} = (\mathcal{S}, \mathcal{A}, P, R, \mathcal{O}, Z, \gamma)P=(S,A,P,R,O,Z,γ)
其中:
- S,A,P,R,γ\mathcal{S}, \mathcal{A}, P, R, \gammaS,A,P,R,γ 与MDP相同
- O\mathcal{O}O 是观察集合
- Z(o∣s′,a)Z(o|s', a)Z(o∣s′,a) 是观察概率,表示在执行行动aaa转移到状态s′s's′后观察到ooo的概率
7.2.2 信念状态
在POMDP中,Agent维护一个信念状态b(s)b(s)b(s),表示对当前环境状态的概率分布:
b(s)=P(s∣h)b(s) = P(s \mid h)b(s)=P(s∣h)
其中hhh是历史信息(观察和行动序列)。
信念状态更新规则:
$$b’(s’) = \
更多推荐



所有评论(0)