智能体设计模式(三)多智能体协作-记忆管理-学习与适应

智能体设计模式(三)多智能体协作-记忆管理-学习与适应

本文是"智能体设计模式"系列的第三篇,涵盖第7-9章:多智能体协作、记忆管理、学习与适应。

系列文章:


第七章:多智能体协作(Multi-Agent Collaboration)

一个好汉三个帮,一个篱笆三个桩。AI 也需要团队合作。


一、一句话定位

多智能体协作模式解决什么问题?

复制代码
多智能体协作 = 让多个 AI 像团队一样分工合作
就像公司里有产品、开发、测试、运维------各司其职,协同作战

适合谁学?

  • 需要处理复杂跨领域任务的开发者
  • 构建大型智能体系统的工程师
  • 想让 AI 系统更强大、更可靠的技术人员

不适合谁?

  • 简单任务,一个 AI 就能搞定的场景

二、核心框架(知识骨架)

核心观点

复制代码
单个 AI 能力有限 = 一个人干不了所有事
多智能体协作 = 组建团队 = 分工 + 协作 = 1+1>2

关键概念速查表

概念 大白话解释 生活比喻 一句话记忆
多智能体 多个 AI 组成的团队 公司团队 人多力量大
角色分工 每个 AI 负责特定任务 各司其职 术业有专攻
协作模式 AI 之间如何配合 工作流程 配合默契
通信协议 AI 之间如何交流 开会沟通 信息共享

知识地图

复制代码
复杂任务 → 任务分解 → 分配给专业智能体 → 各自执行 → 结果汇总 → 最终输出
    ↓          ↓              ↓              ↓          ↓          ↓
"写研究报告"  拆成子任务    研究员+分析师+写手   各干各的    合并成果    完整报告

三、深入浅出讲解

开场钩子 🎣

想象你要拍一部电影:

一个人干所有事

  • 你要当导演、编剧、摄影、演员、剪辑、配乐...
  • 结果:累死也拍不好

组建团队

  • 导演负责整体把控
  • 编剧负责剧本
  • 摄影负责画面
  • 演员负责表演
  • 剪辑负责后期
  • 结果:各司其职,大片诞生

AI 也是一样------复杂任务需要"团队作战"。


【概念1:为什么需要多智能体协作?】

一句话是什么:单个 AI 能力有限,复杂任务需要多个专业 AI 配合。

生活化比喻

复制代码
单智能体 = 全能选手
- 什么都会一点
- 什么都不精通
- 复杂任务力不从心

多智能体 = 专业团队
- 每个人专精一项
- 配合起来威力巨大
- 复杂任务轻松搞定

单智能体的局限

问题 表现 后果
能力有限 一个 AI 不可能精通所有领域 某些任务做不好
工具受限 一个 AI 配太多工具会混乱 工具选择出错
上下文有限 信息太多装不下 遗漏重要信息
单点故障 一个 AI 出错全盘皆输 系统不稳定

多智能体的优势

优势 说明 效果
专业分工 每个 AI 专精一个领域 质量更高
模块化 各模块独立,易于维护 更灵活
可扩展 需要新能力就加新 AI 易扩展
容错性 一个 AI 出错不影响全局 更稳定

引经据典

复制代码
"三个臭皮匠,顶个诸葛亮" ------ 中国谚语

翻译成 AI 语言:
多个专业智能体协作,能解决单个智能体无法解决的复杂问题。

【概念2:协作模式有哪些?】

一句话是什么:不同的任务需要不同的协作方式。

生活化比喻

复制代码
协作模式就像工厂的生产方式:

1. 流水线(顺序交接)
   工人A做完 → 传给工人B → 传给工人C
   
2. 并行生产(并行处理)
   工人A、B、C同时做不同部件 → 最后组装
   
3. 质检流程(评审者模式)
   工人做完 → 质检员检查 → 不合格返工
   
4. 层级管理(层级结构)
   经理分配任务 → 组长执行 → 工人干活

六种主要协作模式

1. 顺序交接(Sequential Handoffs)

复制代码
智能体A → 智能体B → 智能体C → 最终结果

例子:写博客
研究员(收集资料)→ 写手(撰写文章)→ 编辑(润色修改)

2. 并行处理(Parallel Processing)

复制代码
        ┌→ 智能体A ─┐
输入 ──┼→ 智能体B ──┼→ 汇总 → 输出
        └→ 智能体C ─┘

例子:数据收集
天气智能体(查天气)
新闻智能体(查新闻)  → 同时执行 → 汇总结果
股票智能体(查股价)

3. 辩论与共识(Debate and Consensus)

复制代码
智能体A(观点1)
智能体B(观点2)  → 讨论辩论 → 达成共识
智能体C(观点3)

例子:投资决策
乐观分析师 + 悲观分析师 + 中立分析师 → 综合建议

4. 层级结构(Hierarchical)

复制代码
        管理者智能体
       /     |     \
    执行者A 执行者B 执行者C

例子:项目管理
项目经理智能体 → 分配任务给开发、测试、文档智能体

5. 专家团队(Expert Teams)

复制代码
研究员 + 分析师 + 写手 + 编辑 = 研究报告

例子:市场调研
数据收集专家 + 数据分析专家 + 报告撰写专家 → 完整报告

6. 评审者模式(Critic-Reviewer)

复制代码
生成者智能体 → 输出 → 评审者智能体 → 反馈 → 修改 → 最终输出

例子:代码生成
代码生成智能体 → 代码 → 代码审查智能体 → 改进建议 → 优化代码

【概念3:智能体之间如何通信?】

一句话是什么:智能体需要标准化的方式交换信息。

生活化比喻

复制代码
智能体通信就像公司内部沟通:

1. 邮件(异步消息)
   - 发出去就不管了
   - 对方有空再处理
   
2. 会议(同步讨论)
   - 大家一起讨论
   - 实时交流
   
3. 共享文档(共享状态)
   - 大家都能看到
   - 随时更新
   
4. 工单系统(任务委派)
   - 明确任务内容
   - 跟踪任务状态

通信的关键要素

要素 说明 例子
共享状态 所有智能体能访问的公共数据 session.state
消息传递 智能体之间发送消息 输出传给下一个智能体
任务委派 一个智能体把任务交给另一个 管理者分配任务
结果汇总 收集各智能体的输出 合并多个结果

【概念4:实际应用场景】

场景1:复杂研究与分析

复制代码
任务:写一份 AI 趋势研究报告

团队配置:
- 研究员智能体:搜索学术数据库
- 分析师智能体:分析数据趋势
- 写手智能体:撰写报告
- 编辑智能体:润色修改

协作流程:
研究员收集资料 → 分析师分析趋势 → 写手撰写报告 → 编辑润色

场景2:软件开发

复制代码
任务:开发一个功能模块

团队配置:
- 需求分析智能体:理解需求
- 代码生成智能体:编写代码
- 测试智能体:编写测试
- 文档智能体:编写文档

协作流程:
需求分析 → 代码生成 → 测试验证 → 文档编写

场景3:创意内容生成

复制代码
任务:策划营销活动

团队配置:
- 市场调研智能体:分析市场
- 文案智能体:撰写文案
- 设计智能体:生成素材
- 排期智能体:安排发布

协作流程:
市场调研 → 文案创作 → 素材设计 → 发布排期

场景4:客户支持

复制代码
任务:处理客户问题

团队配置:
- 一线客服智能体:处理常见问题
- 技术专家智能体:处理技术问题
- 计费专家智能体:处理账单问题

协作流程:
一线客服接待 → 识别问题类型 → 转给专家处理

四、实践示例(代码演示)

示例1:CrewAI 实现多智能体协作

python 复制代码
from crewai import Agent, Task, Crew, Process
from langchain_google_genai import ChatGoogleGenerativeAI

# 初始化模型
llm = ChatGoogleGenerativeAI(model="gemini-2.0-flash")

# 定义研究员智能体
researcher = Agent(
    role='高级研究分析师',
    goal='查找并总结 AI 领域的最新趋势',
    backstory="你是一位经验丰富的研究分析师,擅长发现关键趋势并综合信息。",
    verbose=True,
    llm=llm
)

# 定义写手智能体
writer = Agent(
    role='技术内容写手',
    goal='根据研究发现撰写清晰、有吸引力的博客文章',
    backstory="你是一位技术写手,擅长将复杂的技术话题转化为易懂的内容。",
    verbose=True,
    llm=llm
)

# 定义研究任务
research_task = Task(
    description="研究 2024-2025 年 AI 领域的三大新兴趋势,关注实际应用和潜在影响。",
    expected_output="三大 AI 趋势的详细总结,包括关键要点和来源。",
    agent=researcher,
)

# 定义写作任务(依赖研究任务的输出)
writing_task = Task(
    description="根据研究发现撰写一篇 500 字的博客文章,内容要有吸引力,易于理解。",
    expected_output="一篇完整的 500 字博客文章。",
    agent=writer,
    context=[research_task],  # 依赖研究任务
)

# 创建 Crew
blog_crew = Crew(
    agents=[researcher, writer],
    tasks=[research_task, writing_task],
    process=Process.sequential,  # 顺序执行
    verbose=True
)

# 执行
result = blog_crew.kickoff()
print(result)

代码解读

复制代码
研究任务 → 研究员智能体执行 → 输出研究结果
                                    ↓
写作任务 → 写手智能体执行 → 基于研究结果撰写 → 最终博客文章

示例2:Google ADK 层级结构

python 复制代码
from google.adk.agents import LlmAgent, BaseAgent

# 定义子智能体:迎宾员
greeter = LlmAgent(
    name="Greeter",
    model="gemini-2.0-flash-exp",
    instruction="你是一个友好的迎宾员。"
)

# 定义子智能体:任务执行者
task_doer = LlmAgent(
    name="TaskDoer",
    model="gemini-2.0-flash-exp",
    instruction="你负责执行具体任务。"
)

# 定义协调者(父智能体)
coordinator = LlmAgent(
    name="Coordinator",
    model="gemini-2.0-flash-exp",
    description="协调迎宾和任务执行的智能体",
    instruction="当需要问候时,委派给 Greeter;当需要执行任务时,委派给 TaskDoer。",
    sub_agents=[greeter, task_doer]  # 声明子智能体
)

# 层级关系自动建立
# greeter.parent_agent == coordinator
# task_doer.parent_agent == coordinator

示例3:Google ADK 并行处理

python 复制代码
from google.adk.agents import Agent, ParallelAgent

# 定义并行执行的子智能体
weather_fetcher = Agent(
    name="weather_fetcher",
    model="gemini-2.0-flash-exp",
    instruction="获取给定位置的天气信息。",
    output_key="weather_data"  # 结果存到 session.state["weather_data"]
)

news_fetcher = Agent(
    name="news_fetcher",
    model="gemini-2.0-flash-exp",
    instruction="获取给定主题的头条新闻。",
    output_key="news_data"  # 结果存到 session.state["news_data"]
)

# 创建并行智能体
data_gatherer = ParallelAgent(
    name="data_gatherer",
    sub_agents=[weather_fetcher, news_fetcher]  # 并行执行
)

# 执行时,两个子智能体同时工作,结果分别存入 session.state

示例4:Google ADK 顺序流水线

python 复制代码
from google.adk.agents import SequentialAgent, Agent

# 步骤1:获取数据
step1 = Agent(
    name="Step1_Fetch",
    output_key="data"  # 输出存到 session.state["data"]
)

# 步骤2:处理数据(使用步骤1的输出)
step2 = Agent(
    name="Step2_Process",
    instruction="分析 state['data'] 中的信息并提供摘要。"
)

# 创建顺序流水线
pipeline = SequentialAgent(
    name="MyPipeline",
    sub_agents=[step1, step2]  # 顺序执行
)

# 执行时:step1 先执行 → 结果存入 state → step2 读取并处理

五、精华提炼(去废话版)

核心要点(只保留干货):

  1. 分工协作:复杂任务拆给多个专业智能体 → 各司其职
  2. 协作模式:顺序、并行、层级、评审等 → 按需选择
  3. 通信机制:共享状态、消息传递、任务委派 → 信息流通
  4. 协同效应:1+1>2 → 团队能力超越个体之和

必须记住的

复制代码
多智能体协作 = 团队作战 = 分工 + 协作 = 解决复杂问题

六、行动清单

立即可做(5分钟内):

  • 想一个你之前让单个 AI 做但效果不好的复杂任务
  • 思考可以拆成哪几个角色来协作

本周实践

  • 用 CrewAI 实现一个简单的双智能体协作
  • 尝试顺序执行和并行执行两种模式

进阶挑战

  • 实现一个层级结构的多智能体系统
  • 加入评审者智能体提升输出质量

七、常见误区

误区1:智能体越多越好

复制代码
❌ 错误:任务不复杂也用10个智能体
✅ 正确:根据任务复杂度决定智能体数量,够用就好

误区2:忽视通信开销

复制代码
❌ 错误:智能体之间频繁通信
✅ 正确:设计高效的通信机制,减少不必要的交互

误区3:角色定义模糊

复制代码
❌ 错误:每个智能体都"什么都能做"
✅ 正确:每个智能体有明确的角色和职责边界

误区4:忽视协调机制

复制代码
❌ 错误:智能体各干各的,没有协调
✅ 正确:需要明确的协调机制(管理者或协议)

八、学习检查

基础理解

  • 能解释为什么需要多智能体协作
  • 能说出至少三种协作模式
  • 理解智能体之间如何通信

实践能力

  • 能用 CrewAI 实现多智能体协作
  • 能设计合适的角色分工
  • 能选择合适的协作模式

进阶理解

  • 理解不同协作模式的适用场景
  • 能设计复杂的多智能体系统
  • 理解协作的权衡(复杂度 vs 效果)

九、金句收藏

原文金句

复制代码
"多智能体协作能够产生协同效应,
其整体表现往往超越任何单个智能体的能力上限。"

我的总结金句

复制代码
"一个 AI 是独行侠,一群 AI 是复仇者联盟。"

"分工是为了专业,协作是为了强大。"

"复杂问题的解法:拆开来各个击破,合起来威力倍增。"

十、画龙点睛

总结升华

复制代码
多智能体协作的本质是"组织智慧"------
把复杂问题拆解,让专业的人做专业的事,
然后通过协作机制把各部分整合成完整的解决方案。

这就像人类社会的分工:
- 原始社会:一个人什么都干
- 现代社会:专业分工,协作生产

AI 也在经历同样的进化:
- 单智能体:一个 AI 什么都干
- 多智能体:专业分工,协作完成

协作的哲学

复制代码
"众人拾柴火焰高" ------ 中国谚语

对 AI 来说:
- 众人 = 多个专业智能体
- 拾柴 = 各自完成专业任务
- 火焰高 = 协同效应,成果超越个体之和

悬念预告

复制代码
多智能体协作让 AI 团队变得强大了,
但智能体如何记住之前的对话和经验呢?
如何避免"金鱼记忆",让 AI 越来越聪明?

下一章,我们将探索"记忆管理模式"------
让 AI 拥有"记忆",能够学习和积累经验。

一句话带走

复制代码
复杂任务别单干,组建 AI 团队各司其职,协作才能创造奇迹。

十一、延伸资源

想深入学习

想教给别人

  • 用"拍电影"比喻解释多智能体协作的必要性
  • 用"工厂生产"类比解释不同的协作模式
  • 用"公司团队"说明角色分工的重要性

第8章:记忆管理 ------ 让AI拥有"过目不忘"的超能力

一句话定位:记忆管理就是给AI装上"大脑硬盘",让它既能记住刚才聊了什么,又能调取多年前的知识。


一、秒懂定位(30秒版)

这个知识解决什么问题

复制代码
AI智能体如何像人一样"记住"信息?
短期记忆让它知道"我们刚才聊到哪了"
长期记忆让它记得"你上次说喜欢吃川菜"

一句话精华

复制代码
记忆管理 = 短期记忆(上下文窗口)+ 长期记忆(外部存储)
就像人脑的工作记忆 + 长期知识库

适合谁学 :想让AI"记住"用户偏好、历史对话的开发者
不适合谁:只做单轮问答、不需要上下文的简单应用


二、核心框架(知识骨架)

生活化比喻:AI的"记忆宫殿"

想象你是一个超级秘书:

复制代码
📋 短期记忆 = 你手里的便签本
   - 记录当前会议的要点
   - 会议结束就可以扔掉
   - 容量有限,写满了要翻页

💾 长期记忆 = 你的档案柜
   - 存放所有客户的资料
   - 需要时随时查阅
   - 容量大,但查找需要时间

关键概念速查表

概念 大白话解释 生活比喻 一句话记忆
短期记忆 当前对话的上下文 便签本 聊天记录,用完即焚
长期记忆 跨对话的持久存储 档案柜 用户档案,永久保存
上下文窗口 LLM能"看到"的范围 视野范围 窗口越大,看得越多
向量数据库 语义搜索的存储 智能档案员 按意思找,不按关键词
Session 一次对话会话 一通电话 挂了就结束
State 会话中的临时数据 通话笔记 这通电话的要点

知识地图

复制代码
用户输入 → [短期记忆处理] → 需要历史信息?
                              ↓ 是
                         [查询长期记忆]
                              ↓
                         [整合上下文]
                              ↓
                         [生成响应]
                              ↓
                         [更新记忆]

三、深入浅出讲解(教学版)

开场钩子

"你有没有遇到过这种尴尬?跟AI聊了半天,它突然'失忆'了,问你'请问您是哪位?'------这就是没有记忆管理的AI!"

核心讲解

【概念1:短期记忆 ------ AI的"便签本"】

一句话是什么:短期记忆就是AI在一次对话中能"记住"的内容。

生活化比喻

复制代码
想象你在餐厅点餐:
- 服务员记住你点了什么(短期记忆)
- 你说"再来一份刚才那个",他知道是什么
- 但你下次来,他可能就不记得了

AI的短期记忆也是这样:
- 记住这轮对话的所有内容
- 对话结束,记忆清空
- 下次开始,从头再来

引经据典

复制代码
"吾日三省吾身" ------ 孔子

AI也需要"三省":
1. 用户刚才说了什么?
2. 我刚才回答了什么?
3. 现在应该怎么接话?

这就是短期记忆的作用!

技术要点

python 复制代码
# 短期记忆的核心:上下文窗口
context_window = [
    {"role": "user", "content": "我想订一张去北京的机票"},
    {"role": "assistant", "content": "好的,请问您想什么时候出发?"},
    {"role": "user", "content": "下周五"},
    {"role": "assistant", "content": "下周五去北京,请问需要往返吗?"},
    # ... 窗口有限,太早的对话会被"遗忘"
]

常见误区(幽默版):

复制代码
❌ 误区:"上下文窗口越大越好"
   真相:窗口大了,处理慢、成本高,就像背着100斤便签本上班

❌ 误区:"短期记忆会自动保存"
   真相:对话结束就没了,就像阅后即焚的消息

【概念2:长期记忆 ------ AI的"档案柜"】

一句话是什么:长期记忆是AI跨对话、跨时间保存的信息。

生活化比喻

复制代码
想象你是VIP客户:
- 每次去银行,客户经理都知道你的偏好
- "王先生,还是老规矩,稳健型理财?"
- 这就是长期记忆的魔力!

AI的长期记忆:
- 记住用户的偏好、历史、习惯
- 下次对话,直接调取
- 提供个性化服务

技术实现

python 复制代码
# 长期记忆通常存储在外部数据库
# 向量数据库示例
from vector_db import VectorStore

# 存储用户偏好
memory_store = VectorStore()
memory_store.add({
    "user_id": "user_123",
    "preference": "喜欢川菜,不吃香菜",
    "history": "上次推荐了火锅店,用户很满意"
})

# 检索相关记忆
relevant_memories = memory_store.search(
    query="用户想吃什么",
    user_id="user_123"
)
# 返回:["喜欢川菜,不吃香菜", "上次推荐火锅店很满意"]

向量数据库的魔力

复制代码
传统搜索:关键词匹配
- 搜"吃饭" → 只能找到包含"吃饭"的记录

向量搜索:语义匹配
- 搜"吃饭" → 能找到"用餐"、"就餐"、"饮食"相关的记录
- 因为它理解"意思",不只是"字面"

【概念3:Session与State ------ 对话的"身份证"和"笔记本"】

一句话是什么:Session是一次对话的身份标识,State是这次对话中的临时数据。

生活化比喻

复制代码
Session = 电话号码
- 每通电话有唯一标识
- 用来区分不同的对话

State = 通话笔记
- 这通电话里记录的要点
- 挂了电话可能就不需要了

代码示例

python 复制代码
# Google ADK 中的 Session 和 State
from google.adk.sessions import InMemorySessionService

# 创建会话服务
session_service = InMemorySessionService()

# 创建一个新会话
session = session_service.create_session(
    app_name="restaurant_bot",
    user_id="user_123",
    session_id="session_456"
)

# 在会话中存储状态
session.state["user_preference"] = "川菜"
session.state["current_step"] = "selecting_restaurant"

# 读取状态
print(session.state["user_preference"])  # 输出:川菜

四、实践示例

示例1:带记忆的聊天机器人

python 复制代码
"""
一个能记住用户偏好的餐厅推荐机器人
"""
from google.adk.agents import LlmAgent
from google.adk.sessions import InMemorySessionService
from google.adk.memory import InMemoryMemoryService

# 初始化服务
session_service = InMemorySessionService()
memory_service = InMemoryMemoryService()

# 创建智能体
restaurant_agent = LlmAgent(
    name="RestaurantBot",
    model="gemini-2.0-flash",
    instruction="""
    你是一个餐厅推荐助手。
    请根据用户的偏好推荐合适的餐厅。
    记住用户的口味偏好,下次可以直接使用。
    """,
    output_key="recommendation"  # 自动保存推荐结果到状态
)

# 使用示例
async def recommend_restaurant(user_id: str, user_input: str):
    # 获取或创建会话
    session = session_service.get_session(
        app_name="restaurant",
        user_id=user_id,
        session_id=f"{user_id}_current"
    )
    
    # 从长期记忆中检索用户偏好
    memories = memory_service.search_memory(
        app_name="restaurant",
        user_id=user_id,
        query=user_input
    )
    
    # 将记忆整合到上下文中
    context = f"用户历史偏好:{memories}\n当前请求:{user_input}"
    
    # 生成推荐
    response = await restaurant_agent.run(context)
    
    # 保存到长期记忆
    memory_service.add_session_to_memory(session)
    
    return response

示例2:状态管理的最佳实践

python 复制代码
"""
使用状态前缀管理不同范围的数据
"""

# 状态前缀说明:
# 无前缀 = 会话级别(当前对话)
# user: = 用户级别(跨会话)
# app: = 应用级别(所有用户共享)
# temp: = 临时数据(不持久化)

def update_user_state(tool_context):
    state = tool_context.state
    
    # 会话级别:只在当前对话有效
    state["current_order"] = "宫保鸡丁"
    
    # 用户级别:跨对话保存
    state["user:favorite_cuisine"] = "川菜"
    state["user:allergy"] = "花生"
    
    # 应用级别:所有用户共享
    state["app:today_special"] = "麻婆豆腐"
    
    # 临时数据:处理完就丢弃
    state["temp:processing_step"] = 3
    
    return {"status": "success"}

五、精华提炼(去废话版)

核心要点

  1. 短期记忆 = 上下文窗口

    • 容量有限,成本与大小成正比
    • 对话结束即清空
    • 用于维持当前对话连贯性
  2. 长期记忆 = 外部存储

    • 向量数据库实现语义搜索
    • 跨对话持久保存
    • 用于个性化和知识积累
  3. Session + State = 会话管理

    • Session 标识一次对话
    • State 存储对话中的临时数据
    • 通过前缀区分数据范围

砍掉的废话

  • 各种数据库的详细配置(用到再查)
  • 复杂的分布式存储方案(进阶内容)
  • 过多的API细节(看文档)

必须记住的

复制代码
记忆管理三板斧:
1. 短期靠窗口 ------ 上下文窗口管当前
2. 长期靠存储 ------ 向量数据库管历史
3. 状态靠前缀 ------ 不同前缀管不同范围

六、行动清单

立即可做(5分钟内)

  • 理解短期记忆和长期记忆的区别
  • 了解向量数据库的基本概念

本周实践

  • 用 InMemorySessionService 实现一个简单的对话机器人
  • 尝试使用状态前缀管理不同范围的数据

进阶挑战

  • 接入真实的向量数据库(如 Pinecone、Weaviate)
  • 实现跨会话的用户偏好记忆

七、常见误区

误区1:"上下文窗口越大越好"

真相

复制代码
窗口大小是个权衡:
- 太小:AI容易"失忆"
- 太大:成本高、速度慢

最佳实践:
- 保留最相关的信息
- 总结旧对话,压缩存储
- 重要信息存长期记忆

误区2:"直接修改session.state就行"

真相

python 复制代码
# ❌ 错误做法:直接修改
session.state["key"] = "value"  # 可能不会被持久化!

# ✅ 正确做法:通过事件更新
session_service.append_event(session, event_with_state_delta)

误区3:"长期记忆什么都存"

真相

复制代码
存储策略:
- 存:用户偏好、重要决策、关键信息
- 不存:临时计算结果、敏感信息、过时数据

记住:存储有成本,检索有延迟

八、学习检查

基础知识

  • 能解释短期记忆和长期记忆的区别
  • 理解上下文窗口的作用和限制
  • 知道向量数据库的基本原理

实践能力

  • 能使用 SessionService 管理会话
  • 能正确使用状态前缀
  • 能实现基本的记忆检索

进阶理解

  • 理解记忆管理对AI性能的影响
  • 能设计合理的记忆存储策略
  • 能处理记忆相关的常见问题

九、金句收藏

原文金句

复制代码
"记忆能力使智能体能够维护历史记录、实现持续学习、
提供个性化交互,并有效处理复杂的时序依赖性问题。"

我的总结金句

复制代码
"没有记忆的AI,就像金鱼一样只有7秒记忆;
有了记忆管理,AI才能真正'认识'你。"

十、画龙点睛(收尾)

总结升华

记忆管理不只是技术问题,更是AI"智能"的关键:

  • 短期记忆让AI能"接话"
  • 长期记忆让AI能"认人"
  • 两者结合,AI才能提供真正个性化的服务

悬念预告

学会了记忆管理,AI能记住信息了。但如何让AI从经验中"学习",变得越来越聪明?下一章"学习与适应",我们来揭秘!

一句话带走

复制代码
记忆管理 = 让AI从"金鱼脑"升级为"大象脑"
短期记忆管当下,长期记忆管永久

十一、延伸资源

想深入学习

  • Google ADK 官方文档:Session 和 Memory 部分
  • 向量数据库入门:Pinecone、Weaviate、Chroma

想教给别人

  • 用"便签本 vs 档案柜"的比喻解释短期/长期记忆
  • 用"VIP客户服务"的例子说明个性化记忆的价值

第9章:学习与适应 ------ 让AI越用越聪明

一句话定位:学习与适应就是让AI从"死板执行者"进化为"聪明学习者",能从经验中成长。


一、秒懂定位(30秒版)

这个知识解决什么问题

复制代码
AI如何变得越来越聪明?
不是每次都从零开始,而是能从过去的经验中学习
遇到新情况,能自己想办法适应

一句话精华

复制代码
学习与适应 = AI的"成长能力"
从"照本宣科"到"举一反三"
从"被动执行"到"主动进化"

适合谁学 :想让AI持续改进、自我优化的开发者
不适合谁:只需要固定功能、不需要进化的简单应用


二、核心框架(知识骨架)

生活化比喻:AI的"学习之路"

想象AI是一个新员工:

复制代码
📚 第一天上班(初始状态)
   - 只会照着手册做事
   - 遇到问题就懵了
   - 需要人手把手教

🎓 工作三个月后(学习中)
   - 开始总结经验
   - 知道哪些方法有效
   - 能处理常见问题

🏆 工作一年后(适应完成)
   - 能举一反三
   - 遇到新问题能想办法
   - 甚至能改进工作流程

关键概念速查表

概念 大白话解释 生活比喻 一句话记忆
强化学习 试错中学习最优策略 打游戏升级 做对了奖励,做错了惩罚
监督学习 从标注数据中学习 老师批改作业 看答案学做题
无监督学习 自己发现数据规律 自学成才 没答案也能找规律
少样本学习 看几个例子就会 一点就通 聪明人学得快
在线学习 边用边学 边干边学 实时更新知识
PPO 稳定的策略优化 小步快跑 每次改进一点点
DPO 直接偏好优化 用户说了算 直接学用户喜好

知识地图

复制代码
学习与适应的演进路径:

[预设规则] → [从数据学习] → [从反馈学习] → [自我改进]
    ↓              ↓              ↓              ↓
  死板执行      模式识别      策略优化      自主进化

三、深入浅出讲解(教学版)

开场钩子

"你家的扫地机器人第一天是不是到处乱撞?但用了一周后,它是不是变'聪明'了,知道哪里有障碍物?这就是学习与适应的魔力!"

核心讲解

【概念1:强化学习 ------ AI的"打怪升级"】

一句话是什么:强化学习就是AI通过试错,学习什么行为能获得最大奖励。

生活化比喻

复制代码
想象你在玩一个新游戏:
- 不知道规则,先随便试
- 做对了,得分+100 ✓
- 做错了,扣血-50 ✗
- 慢慢摸索出最优策略

AI的强化学习也是这样:
- 尝试不同的行动
- 好的行动得到奖励
- 坏的行动受到惩罚
- 最终学会最优策略

引经据典

复制代码
"纸上得来终觉浅,绝知此事要躬行" ------ 陆游

强化学习的精髓就是"躬行":
- 不是看书学的,是自己试出来的
- 不是别人教的,是自己悟出来的
- 实践出真知,试错出智慧

核心原理

python 复制代码
# 强化学习的基本循环
def reinforcement_learning_loop():
    state = get_current_state()  # 观察当前状态
    
    while not done:
        action = agent.choose_action(state)  # 选择行动
        next_state, reward = environment.step(action)  # 执行并获得反馈
        agent.learn(state, action, reward, next_state)  # 从经验中学习
        state = next_state  # 更新状态

【概念2:PPO ------ AI的"稳健学习法"】

一句话是什么:PPO(近端策略优化)是一种让AI稳定学习的方法,避免"学傻了"。

生活化比喻

复制代码
想象你在学开车:

❌ 激进学习法:
   - 今天学会了右转
   - 明天突然忘了怎么直行
   - 学一步退两步

✅ PPO学习法:
   - 每次只改进一点点
   - 确保新技能不影响旧技能
   - 稳扎稳打,步步为营

核心思想

复制代码
PPO的"安全刹车"机制:

1. 收集经验:先用当前策略玩一会儿
2. 评估改进:计算新策略能带来多少提升
3. 限制幅度:不让改动太大,防止"翻车"
4. 稳定更新:小步快跑,持续进步

为什么重要

复制代码
没有PPO的AI学习:
- 可能突然"学傻了"
- 性能大起大落
- 不稳定,不可靠

有了PPO的AI学习:
- 稳定持续进步
- 不会突然退步
- 可靠,可预测

【概念3:DPO ------ AI的"用户偏好直通车"】

一句话是什么:DPO(直接偏好优化)让AI直接从用户偏好中学习,不需要复杂的奖励模型。

生活化比喻

复制代码
传统方法(PPO + 奖励模型):
1. 收集用户反馈:"A比B好"
2. 训练一个"评分员"来打分
3. 用评分员的分数训练AI
4. 两步走,容易出错

DPO方法:
1. 收集用户反馈:"A比B好"
2. 直接用这个偏好训练AI
3. 一步到位,简单直接

对比说明

复制代码
PPO方法 = 请翻译 + 请老师打分 + 根据分数学习
DPO方法 = 直接告诉AI"这个好,那个不好"

DPO更简单、更直接、更稳定

【概念4:自我改进 ------ AI的"自我进化"】

一句话是什么:自我改进是AI能够修改自己的代码或策略,让自己变得更好。

案例:SICA(自我改进编码智能体)

复制代码
SICA的进化之路:

第1代:只会简单的文件覆盖
   ↓ 自我改进
第2代:开发了"智能编辑器"
   ↓ 自我改进
第3代:加入了差异分析功能
   ↓ 自我改进
第4代:实现了AST符号定位

每一代都比上一代更强!

工作原理

python 复制代码
# SICA的自我改进循环
def self_improvement_loop():
    while True:
        # 1. 回顾历史版本
        best_version = archive.get_best_performing_version()
        
        # 2. 分析改进空间
        improvements = analyze_potential_improvements(best_version)
        
        # 3. 修改自己的代码
        new_version = modify_code(best_version, improvements)
        
        # 4. 测试新版本
        performance = benchmark(new_version)
        
        # 5. 记录结果
        archive.add(new_version, performance)
        
        # 6. 如果足够好,就用新版本
        if performance > best_version.performance:
            deploy(new_version)

四、实践示例

示例1:目标驱动的代码生成智能体

python 复制代码
"""
一个能自我改进的代码生成智能体
目标:生成符合质量标准的代码
"""
from langchain_openai import ChatOpenAI

llm = ChatOpenAI(model="gpt-4o", temperature=0.3)

def generate_code(use_case: str, goals: list[str], max_iterations: int = 5):
    """
    迭代生成代码,直到满足所有目标
    """
    previous_code = ""
    feedback = ""
    
    for i in range(max_iterations):
        print(f"=== 第 {i + 1} 次迭代 ===")
        
        # 1. 生成代码
        prompt = f"""
        用例:{use_case}
        目标:{goals}
        之前的代码:{previous_code}
        反馈:{feedback}
        
        请生成改进后的Python代码。
        """
        code = llm.invoke(prompt).content
        
        # 2. 自我评估
        eval_prompt = f"""
        评估以下代码是否满足目标:{goals}
        
        代码:{code}
        
        只回答 True 或 False
        """
        is_good = llm.invoke(eval_prompt).content.strip().lower() == "true"
        
        if is_good:
            print("✅ 目标达成!")
            return code
        
        # 3. 获取改进建议
        feedback_prompt = f"""
        代码:{code}
        目标:{goals}
        
        请指出代码的不足之处。
        """
        feedback = llm.invoke(feedback_prompt).content
        previous_code = code
        
        print(f"📝 反馈:{feedback[:100]}...")
    
    return code

# 使用示例
code = generate_code(
    use_case="计算斐波那契数列",
    goals=["代码简洁", "处理边界情况", "有注释"]
)

示例2:基于记忆的学习智能体

python 复制代码
"""
一个能从历史经验中学习的智能体
"""
class LearningAgent:
    def __init__(self):
        self.experience_memory = []  # 经验记忆
        self.success_patterns = {}   # 成功模式
    
    def act(self, situation: str) -> str:
        """根据情况采取行动"""
        # 1. 查找类似的历史经验
        similar_experiences = self.find_similar(situation)
        
        # 2. 如果有成功经验,复用
        for exp in similar_experiences:
            if exp["success"]:
                return exp["action"]
        
        # 3. 否则,尝试新策略
        return self.try_new_strategy(situation)
    
    def learn(self, situation: str, action: str, success: bool):
        """从结果中学习"""
        # 记录经验
        self.experience_memory.append({
            "situation": situation,
            "action": action,
            "success": success
        })
        
        # 更新成功模式
        if success:
            pattern = self.extract_pattern(situation)
            self.success_patterns[pattern] = action
    
    def find_similar(self, situation: str) -> list:
        """找到类似的历史经验"""
        # 使用语义相似度匹配
        return [exp for exp in self.experience_memory 
                if self.is_similar(exp["situation"], situation)]
    
    def try_new_strategy(self, situation: str) -> str:
        """尝试新策略"""
        # 基于已知模式推理
        for pattern, action in self.success_patterns.items():
            if pattern in situation:
                return action
        return "default_action"

五、精华提炼(去废话版)

核心要点

  1. 强化学习 = 试错学习

    • 通过奖惩信号学习最优策略
    • 适合游戏、机器人控制等场景
  2. PPO = 稳定学习

    • 限制每次更新幅度
    • 防止学习过程中"翻车"
  3. DPO = 直接学偏好

    • 跳过奖励模型
    • 直接从用户偏好学习
  4. 自我改进 = 自主进化

    • AI能修改自己的代码
    • 持续迭代,越来越强

必须记住的

复制代码
学习与适应四重境界:
1. 照本宣科 ------ 只会执行预设规则
2. 模式识别 ------ 能从数据中学习
3. 策略优化 ------ 能从反馈中改进
4. 自主进化 ------ 能自我修改升级

六、行动清单

立即可做(5分钟内)

  • 理解强化学习的基本概念
  • 了解PPO和DPO的区别

本周实践

  • 实现一个简单的迭代改进循环
  • 尝试让AI根据反馈自我优化

进阶挑战

  • 研究SICA的实现原理
  • 探索AlphaEvolve的进化算法

七、常见误区

误区1:"AI学习一次就够了"

真相

复制代码
学习是持续的过程:
- 环境在变化
- 用户需求在变化
- 最优策略也在变化

持续学习 > 一次性训练

误区2:"让同一个AI既写代码又评判代码"

真相

复制代码
自己评判自己容易"自我感觉良好"

更好的做法:
- 分离生成和评估
- 用不同的模型/智能体
- 引入外部验证

误区3:"学习越快越好"

真相

复制代码
学习速度 vs 学习稳定性

太快:可能学偏了,突然退步
太慢:进步太慢,效率低

PPO的智慧:小步快跑,稳中求进

八、学习检查

基础知识

  • 能解释强化学习的基本原理
  • 理解PPO为什么比普通方法更稳定
  • 知道DPO相比传统方法的优势

实践能力

  • 能实现简单的迭代改进循环
  • 能设计基于反馈的学习机制

进阶理解

  • 理解自我改进的可能性和风险
  • 能评估不同学习方法的适用场景

九、金句收藏

原文金句

复制代码
"学习与适应能力是提升智能体性能的关键。
这些机制让智能体能够突破预设参数的束缚,
在与环境交互中通过经验积累实现自我进化。"

我的总结金句

复制代码
"不会学习的AI是工具,会学习的AI是伙伴。
工具用久了会磨损,伙伴相处久了会默契。"

十、画龙点睛(收尾)

总结升华

学习与适应是AI从"工具"到"智能体"的关键跨越:

  • 工具只能执行预设功能
  • 智能体能从经验中成长
  • 真正的智能,在于持续进化的能力

悬念预告

AI学会了学习,但如何让不同的AI系统互相"对话"?下一章"模型上下文协议",我们来看看AI世界的"通用语言"!

一句话带走

复制代码
学习与适应 = AI的成长基因
从试错中学习,从反馈中进化
让AI越用越聪明,越来越懂你

十一、延伸资源

想深入学习

想教给别人

  • 用"打游戏升级"解释强化学习
  • 用"新员工成长"比喻AI的学习过程
  • 用"小步快跑"说明PPO的稳定性

版本信息

  • 文档版本:v1.0
  • 创建日期:2026-01-16
  • 基于材料:Agentic Design Patterns - Chapter 07-09
  • 教学风格:教与学专家(30年教学经验 + 20年学习研究经验)
相关推荐
scott1985122 小时前
opencv 畸变系数的说明
人工智能·数码相机·opencv
LS_learner2 小时前
Transmormer从零基础到精通
人工智能
ASD123asfadxv2 小时前
【蜂巢健康监测】基于YOLO的蜂群病虫害识别系统
人工智能·yolo·目标跟踪
说私域2 小时前
基于AI智能名片链动2+1模式服务预约商城系统的社群运营与顾客二次消费吸引策略研究
大数据·人工智能·小程序·开源·流量运营
丝斯20113 小时前
AI学习笔记整理(50)——大模型中的Graph RAG
人工智能·笔记·学习
Coder_Boy_3 小时前
基于SpringAI的在线考试系统-DDD业务领域模块设计思路
java·数据库·人工智能·spring boot·ddd
一允3 小时前
Git学习记录
git·学习
崇山峻岭之间3 小时前
Matlab学习记录37
android·学习·matlab
甜辣uu3 小时前
双算法融合,预测精准度翻倍!机器学习+深度学习驱动冬小麦生长高度与产量智能预测系统
人工智能·小麦·冬小麦·生长高度·植物生长预测·玉米·生长预测