Skip to content

自我改进模式 (Self-Improving Pattern)

通过持久化的技能库实现跨任务自我改进。

自我改进模式为 Agent 赋予了一套分层记忆系统,使其越用越强。它会从成功的任务执行中自动提炼出可复用的技能(Skill),在后续相似任务中检索并使用它们,并周期性整合热记忆以防止其无限膨胀。

这是 AgentFlow 中唯一一个支持跨轮次学习的模式——状态在多次调用之间持久化。


适用场景

适合使用 不适合使用
长期运行的 AI 助手 / 编码 Agent 一次性、单一用途的任务
重复性任务模式(代码审查、数据分析、调试) 纯随机或探索性任务
跨会话学习 —— Agent 随使用次数增长能力 对持久化数据敏感的隐私环境
质量随时间累积的场景 无可复用流程的任务(纯问答)

架构

flowchart TD
    A([START]) --> B["router\n— 分类任务 & 检索匹配技能 —"]
    B --> C["executor\n— 执行任务(可选技能指导)—"]
    C --> D["evaluator\n— 打分 1–10 & 决策路由 —"]
    D -- "score≥7 且 steps≥3 且无匹配技能" --> E["skill_extractor\n— 抽取可复用技能 —"]
    D -- "task_count % N == 0" --> F["memory_updater\n— 整合热记忆 —"]
    D -- "否则" --> G([END])
    E --> F
    E --> G
    F --> G

    style A fill:#2d6a4f,color:#fff
    style B fill:#264653,color:#fff
    style C fill:#264653,color:#fff
    style D fill:#e76f51,color:#fff
    style E fill:#e9c46a,color:#000
    style F fill:#e9c46a,color:#000
    style G fill:#2d6a4f,color:#fff

State 在图中流转:

字段 类型 说明
task str 当前任务描述
task_type str 任务分类(如 code_review
matched_skill dict \| None 匹配到的技能文档(完整内容)
execution_steps list[str] 执行器记录的步骤
result str 最终执行结果
evaluation_score float 评估器打分(1–10)
should_create_skill bool 本轮是否值得抽取新技能
should_update_memory bool 是否触发周期性热记忆整合
task_count int 已完成任务计数器

核心代码

from patterns.self_improving import SelfImprovingPattern, MemoryStore

# storage_dir 在多次调用间持久化 —— Agent 的技能库就在这里
pattern = SelfImprovingPattern(
    storage_dir="./.my_agent_memory",
    nudge_interval=5,       # 每 5 个任务整合一次热记忆
    skill_threshold=7.0,    # 评分达到此阈值才抽取技能
    min_steps_for_skill=3,  # 单步任务通常没有可复用流程
)

result = pattern.run("审查这个 REST 端点的安全问题")
print(f"评分: {result['evaluation_score']}/10")
print(f"匹配技能: {result['matched_skill']}")

配置参数

参数 默认值 说明
model "gpt-4o-mini" 模型名(通过 agentflow.utils.get_default_llm 选择)
llm None 预配置的 LangChain chat model 实例
storage_dir "./.agent_memory" MEMORY.jsonskills/*.json 的存储目录
nudge_interval 5 每 N 个任务触发一次热记忆整合
skill_threshold 7.0 抽取技能的最低评分(满分 10)
min_steps_for_skill 3 执行步骤达到此数量才考虑抽取技能

快速开始

# 1. 克隆并安装
git clone https://github.com/your-org/agentflow.git
cd agentflow && uv sync

# 2. 配置 API Key
cp .env.example .env
# 添加 OPENAI_API_KEY 或 DEEPSEEK_API_KEY

# 3. 运行示例
uv run python -m patterns.self_improving.example

示例运行 5 个任务。任务 2–4 都是代码审查,任务 3–4 时 Agent 已经建立了 code_review 技能——观察输出中 Matched skillNone 变为技能名。


工作原理详解

1. 分层记忆

热记忆MEMORY.json)是一个小型的、常驻加载的快照,注入到每次系统提示中。它包含环境事实、约定俗成的规则和经验教训——大小上限约 2000 字符,确保提示开销不会随使用增长而膨胀。

技能库skills/*.json)是冷存储。只有技能索引(名称 + 一句话描述)被路由节点加载。当路由匹配到技能后,才按需加载完整的技能文档。

2. 渐进式披露

路由节点的提示只多消耗少量 token(仅技能名称)。只有当任务真正匹配时,才加载完整的技能内容。这借鉴了 Hermes Agent 的洞见:"技能名称是廉价的,技能主体是昂贵的"——只在确定相关时才加载昂贵的部分。

3. 周期性 Nudge

nudge_interval 个任务,memory_updater 节点被触发。它让 LLM 整合热记忆:合并重复条目、删除过时条目、补充新的持久性经验。这防止记忆无限膨胀,同时保持有价值知识的可及性。

4. 技能抽取

当一轮运行评分高于 skill_threshold 且执行步骤不少于 min_steps_for_skill(且没有复用现有技能),skill_extractor 节点触发。它生成一份结构化的技能文档,包含 procedure(步骤)、pitfalls(陷阱)和 verification(验证方法)字段——捕获的是方法,而不仅仅是结果。


与其他模式的对比

维度 自我改进模式 反思模式 专家链模式
学习范围 跨任务,持久化 单任务内,临时 跨固定专家,无持久化
记忆 热 + 冷分层 无(仅 State)
技能复用 动态,自动抽取 不适用 静态,预定义路由
最佳场景 长期运行助手、代码 Agent 迭代文本精炼 顺序专家路由
延迟 中等(额外 LLM 调用) 中等(写作-评审循环) 低(固定顺序)

运行测试

uv run pytest patterns/self_improving/tests/ -v

测试使用 Mock LLM 和隔离的 tmp_path 存储,无需 API Key。


文件结构

patterns/self_improving/
├── __init__.py
├── pattern.py          # SelfImprovingPattern 类 + MemoryStore
├── example.py          # 可运行演示(5 任务技能库演示)
├── diagram.mmd         # Mermaid 图源文件
├── README.md           # 英文文档
├── README_zh.md        # 本文件(中文文档)
├── py.typed            # PEP 561 类型标记
└── tests/
    ├── __init__.py
    └── test_self_improving.py   # 20+ Mock LLM 测试