Skip to main content
Glama
README.md
# 编程智能体自我学习记忆引擎

一个基于 MCP(Model Context Protocol)的自我学习记忆引擎,为编程智能体提供 **"感知-反思-沉淀-应用"** 四层闭环学习能力。让智能体从错误中学习,越用越强。

## 架构概览

```
┌──────────────────────────────────────────────────────┐
│                    编程智能体                          │
│  (Claude Code / Cursor / 任何支持 MCP 的智能体)       │
└──────────┬───────────────────────┬────────────────────┘
           │ MCP Protocol          │
    ┌──────▼──────┐         ┌──────▼──────┐
    │  应用层      │         │  感知层      │
    │  检索+注入   │         │  错误捕获    │
    └──────┬──────┘         └──────┬──────┘
           │                       │
    ┌──────▼──────┐         ┌──────▼──────┐
    │  沉淀层      │         │  反思层      │
    │  技能+记忆   │◄────────│  根因分析    │
    └──────┬──────┘         └─────────────┘
           │
    ┌──────▼──────┐
    │  存储层      │
    │  SQLite+FTS5 │
    └─────────────┘
```

## 四层闭环

| 层 | 职责 | MCP 工具 |
|---|---|---|
| **感知层** Observation | 捕获工具执行错误、测试失败、用户纠正、对话信号 | `record_observation`, `capture_conversation_signals`, `get_pending_observations` |
| **反思层** Reflection | 根因分析,提取可复用经验 | `get_reflection_prompt`, `reflect_and_save`, `batch_get_reflection_prompts` |
| **沉淀层** Consolidation | 提炼技能,生成 SKILL.md,维护记忆 | `create_skill`, `get_skill_prompt`, `list_skills`, `get_skill`, `check_consolidation` |
| **应用层** Application | 检索相关经验,注入任务上下文 | `get_context`, `search_memory`, `search_skill` |
| **统计** | 查看引擎状态 | `get_stats` |

## 安装

```bash
# 进入项目目录(替换为你本机的实际路径)
cd memory-engine

# 安装依赖(绕过代理)
pip install --no-proxy -e .

# 或手动安装
pip install --no-proxy mcp[cli] jieba
```

## 配置 MCP 服务器

### ZCode / Claude Code

在 MCP 配置文件中添加:

```json
{
  "mcpServers": {
    "memory-engine": {
      "command": "python",
      "args": ["-m", "memory_engine.server"],
      "cwd": "<项目根目录的绝对路径>"
    }
  }
}
```

> 将 `<项目根目录的绝对路径>` 替换为本机克隆/存放本项目的实际路径(即包含 `pyproject.toml` 的目录),例如 Windows 上形如 `D:/tools/memory-engine`,macOS/Linux 上形如 `/home/user/tools/memory-engine`。

### Cursor / VS Code

在 `.cursor/mcp.json` 或 VS Code 的 MCP 设置中添加同样的配置。

### 独立运行(调试用)

```bash
cd memory-engine
python -m memory_engine.server
```

## 核心工作流

### 0. 捕获对话信号(感知增强)

vibe coding 过程中,操作者常在对话里留下显式信号——"请注意"、"请记住"等强调指令,
以及因智能体重复犯错产生的埋怨("怎么又……"、"我说过多少次了……")。
这些语句是最高价值的学习素材,应捕获并纳入记忆:

```
capture_conversation_signals(
  conversation_text="用户: 请注意,bat文件必须用ANSI编码
用户: 怎么又是编码问题,我说过多少次了",
  auto_record=true
)
```

检测器识别四类信号并按优先级排序:

| 信号 | 识别示例 | 含义 |
|---|---|---|
| `complaint` | "怎么又"、"还是不对"、"我说过多少次" | 重复犯错引发的埋怨,说明此前教训未被吸取(最高优先级) |
| `emphasis` | "请注意"、"请记住"、"务必"、"千万别" | 用户显式强调的规则 |
| `preference` | "以后都用"、"我喜欢"、"请默认" | 用户对工作方式的偏好 |
| `frustration` | "无语"、"太慢了"、"浪费时间" | 不满情绪,提示效率/体验问题 |

检测结果自动记录为 `conversation_signal` 类型观察,反思时使用专门定制的提示词
(推断既往错误 + 提炼为祈使句规则),后续流程与错误反思一致。

### 1. 记录错误(感知)

当工具执行失败时,智能体调用:

```
record_observation(
  obs_type="tool_error",
  tool_name="Bash",
  error_message="bat文件执行报错:编码错误",
  context="在Windows上创建的bat文件包含中文注释",
  tags="encoding,windows,bat"
)
```

### 2. 反思分析(反思)

获取分析提示词:

```
get_reflection_prompt(obs_id="abc123")
```

智能体根据返回的提示词分析根因,然后保存结果:

```
reflect_and_save(
  obs_id="abc123",
  root_cause="Windows的cmd.exe默认使用系统ANSI编码,UTF-8编码的bat文件会导致中文注释被解析错误",
  category="encoding",
  lesson="在Windows上创建bat文件时,文件必须使用ANSI/GBK编码,而非UTF-8",
  solution="将bat文件保存为ANSI编码,或使用chcp 65001切换代码页",
  tags="encoding,windows,bat,cmd",
  generalizable=true
)
```

### 3. 提炼技能(沉淀)

积累足够经验后,检查是否可以提炼技能:

```
check_consolidation()
```

创建技能:

```
create_skill(
  name="windows-bat-encoding",
  description="Windows bat文件中文编码问题的处理方法",
  trigger_conditions="创建或编辑.bat文件\n在Windows上运行脚本失败且涉及中文",
  steps="将文件保存为ANSI编码\n或使用chcp 65001 + UTF-8 BOM",
  caveats="chcp 65001仅在当前cmd会话有效\n某些旧版Windows不支持UTF-8 BOM",
  category="encoding"
)
```

### 4. 检索应用(应用)

开始新任务前,获取相关经验:

```
get_context(task_description="需要创建一个Windows批处理脚本来部署应用")
```

返回包含相关技能和案例的上下文,直接注入到 prompt 中。

## 记忆分层

| 类型 | 说明 | 示例 |
|---|---|---|
| **情景记忆** Episodic | 具体的"故事",某次修复的完整记录 | "2024-01-15 修复了XX项目的bat编码问题" |
| **语义记忆** Semantic | 抽象化的规则和教训 | "Windows上bat文件应使用ANSI编码" |
| **技能** Skill | 标准化的可执行操作指南 | SKILL.md 文件 |

## 数据存储

- **SQLite 数据库** (`data/memories.db`):结构化存储,支持 FTS5 全文检索
- **JSONL 日志** (`data/observations.jsonl`):原始观察记录的追加日志
- **Markdown 文件** (`data/skills/`):生成的技能文档,人类可读,可版本控制

## 项目结构

```
memory-engine/
├── 开发思路.md              # 设计文档
├── README.md                # 本文件
├── pyproject.toml           # Python 项目配置
├── requirements.txt         # 依赖列表
├── config/
│   └── settings.json        # 引擎配置
├── src/memory_engine/
│   ├── __init__.py
│   ├── server.py            # MCP 服务器入口(15个工具)
│   ├── models/
│   │   └── schemas.py       # 数据模型
│   ├── observation/
│   │   ├── collector.py     # 感知层:错误收集器
│   │   └── signal_detector.py # 感知层:对话信号检测器
│   ├── reflection/
│   │   └── analyzer.py      # 反思层:根因分析器
│   ├── consolidation/
│   │   ├── memory_store.py  # 存储层:SQLite + FTS5
│   │   └── skill_generator.py # 沉淀层:技能生成器
│   └── application/
│       └── retriever.py     # 应用层:记忆检索器
├── data/
│   ├── memories.db          # SQLite 数据库(运行后生成)
│   ├── observations.jsonl   # 观察日志(运行后生成)
│   └── skills/              # 技能 Markdown(运行后生成)
└── tests/
    └── test_engine.py       # 测试
```

## 错误类别

`encoding` | `build_error` | `runtime_error` | `test_failure` | `dependency` | `configuration` | `platform_specific` | `performance` | `security` | `best_practice` | `api_usage` | `preference` | `communication` | `other`

## 设计理念

- **不依赖外部 LLM**:反思和技能提炼由调用方(智能体本身)完成,引擎只提供框架和存储
- **MCP 原生**:作为标准 MCP 服务器运行,任何支持 MCP 的智能体都可以直接接入
- **人机协同**:所有记忆和技能都以人类可读的格式存储(Markdown、JSON),便于审查和维护
- **渐进式学习**:从单次错误→情景记忆→语义记忆→技能,层层抽象,逐步提炼

TDQS

B3.2/5.0

Scored across 15 tools

Disambiguation5/5

每个工具都有明确且独特的用途:记录观察、捕获信号、获取待办、获取反思提示、保存反思、批量获取提示、搜索技能、统计、创建技能、获取技能提示、列出技能、获取技能、检查整合、获取上下文、搜索记忆。即使有相似工具(如get_pending_observations与get_reflection_prompt),它们分别针对观察记录和提示生成,边界清晰。

Naming Consistency5/5

所有工具名称均采用小写蛇形命名,且遵循动词_名词模式(如record_observation, search_skill, create_skill)。命名风格统一,没有混合约定,动词选择也符合操作语义。

Tool Count5/5

15个工具覆盖了记忆引擎的核心功能:记录、分析、反思、技能管理、上下文检索等,每个工具都有明确的存在价值,没有冗余或重叠。数量在合理范围内(接近上限但仍紧凑)。

Completeness4/5

工具表面覆盖了记忆引擎的主要生命周期:观察记录->反思->技能创建->检索。缺少明确的删除/更新操作(如删除记忆或技能),但对于该领域并非核心需求,且其他关键步骤齐全。

Maintenance

ActivityMaintained
ResponsivenessNo issues