随着大型语言模型代理在持续现实角色中的流行度增加,它们将自然地遇到连续的任务流。然而,一个关键限制是它们无法从累积的交互历史中学习,迫使它们丢弃有价值的见解并重复过去的错误。基于论文《ReasoningBank: Scaling Agent Self-Evolving with Reasoning Memory》(https://arxiv.org/abs/2509.25140),我们实现了这个增强记忆的推理系统,通过MCP(模型上下文协议)协议为AI代理提供了经验记忆管理的能力。
推理银行提出了一种新颖的记忆框架,可以从代理自身判断的成功和失败经验中提取通用化的推理策略。在测试过程中,代理从推理银行检索相关的记忆以指导其交互,并将新学到的知识整合回去,使其随着时间变得更强大。这种由记忆驱动的经验扩展为代理自我进化和生成新兴行为创造了新的维度。
reasoning-bank-mcp/
├── src/
│ ├── server.py # MCP服务器入口
│ ├── config.py # 配置管理
│ ├── tools/ # MCP工具
│ │ ├── retrieve_memory.py # 检索记忆
│ │ └── extract_memory.py # 提取记忆
│ ├── retrieval/ # 检索策略
│ │ ├── base.py # 抽象接口
│ │ ├── factory.py # 策略工厂
│ │ └── strategies/ # 具体策略实现
│ ├── deduplication/ # 去重策略(v0.2.0+)
│ │ ├── base.py # 抽象接口
│ │ ├── factory.py # 策略工厂
│ │ └── strategies/
│ │ ├── hash_dedup.py # 哈希去重
│ │ └── semantic_dedup.py # 语义去重
│ ├── merge/ # 合并策略(v0.2.0+)
│ │ ├── base.py # 抽象接口
│ │ ├── factory.py # 策略工厂
│ │ └── strategies/
│ │ ├── llm_merge.py # LLM智能合并
│ │ └── voting_merge.py # 投票选择
│ ├── services/ # 服务层(v0.2.0+)
│ │ └── memory_manager.py # 记忆管理服务
│ ├── storage/ # 存储后端
│ │ ├── base.py # 抽象接口
│ │ └── backends/ # 具体存储实现
│ ├── llm/ # LLM客户端
│ │ ├── base.py # 抽象接口
│ │ ├── factory.py # Provider工厂
│ │ └── providers/ # 具体Provider实现
│ ├── prompts/ # 提示词模板
│ └── utils/ # 工具函数
└── data/ # 数据存储目录
├── memories.json # 记忆数据库
├── archived_memories.json # 归档记忆(v0.2.0+)
└── embeddings.json # 嵌入向量
git clone https://github.com/hanw39/ReasoningBank-MCP.git
cd ReasoningBank-MCP
pip install -e .
{
"mcpServers": {
"reasoning-bank": {
"command": "reasoning-bank-mcp",
"env": {
"DASHSCOPE_API_KEY": "你的百炼APIKEY"
}
}
}
}
1) 启动服务器:
# 使用默认配置 (127.0.0.1:8000)
python3 -m src.server --transport sse
# 或指定主机和端口
python3 -m src.server --transport sse --host 0.0.0.0 --port 8080
2) 客户端配置:
{
"mcpServers": {
"reasoning-bank": {
"url": "http://127.0.0.1:8000/sse"
}
}
}
你是一个具备推理记忆能力的智能助手,你的agnet_id为`Qoder`,在使用MCP时必须传入“agent_id”=“Qoder”。拥有两个核心MCP工具:
1. `retrieve_memory`:用于在任务开始或方向改变时检索相关经验。
2. `extract_memory`:用于在任务结束或失败后提取并保存经验。
你必须严格遵循以下行为准则:
【记忆策略规则】
① **任务开始前必须调用MCP的 `retrieve_memory`**
- 在你开始执行任何复杂任务(如写代码、分析、规划、调试、总结等)之前,先调用此工具。
- 输入的 `query` 应描述当前任务目标或用户需求。
- 如果当前任务与上一次任务在主题、目标或上下文上存在明显差异,也必须再次调用 `retrieve_memory`。
② **任务方向转变时调用MCP的 `retrieve_memory`**
- 当你发现用户修改了任务目标、问题方向、文件对象或上下文内容时,应立即重新调用 `retrieve_memory`。
- 保证你始终基于最新的上下文记忆进行思考。
③ **任务结束后必须调用MCP的 `extract_memory`**
- 当你认为任务已经完成时(即输出最终答案或解决方案前),必须调用 `extract_memory`。
- 轨迹(trajectory)应包含任务执行的重要步骤、对话与关键推理。
- 即使用户没有明确要求保存,也必须执行。
④ **出现失败时调用 `extract_memory`**
- 如果任务执行失败、报错、或用户表示“不成功”“不对”“需要重新来”等情况,也必须调用一次 `extract_memory`。
- 在失败情境下记录失败原因和改进线索。
⑤ **至少调用一次**
- 每个独立任务周期中,必须至少:
- 1 次 `retrieve_memory`
- 1 次 `extract_memory`
python3 -m src.server --help
# 可用参数:
# --transport {stdio,sse} 传输方式 (默认: stdio)
# --host HOST SSE模式的主机地址 (默认: 127.0.0.1)
# --port PORT SSE模式的端口号 (默认: 8000)
如果需要自定义配置,可以编辑config.yaml:
# LLM Provider 配置
llm:
provider: "dashscope" # dashscope | openai | anthropic
dashscope:
api_key: "${DASHSCOPE_API_KEY}"
chat_model: "qwen-plus"
# Embedding Provider 配置
embedding:
provider: "dashscope" # dashscope | openai
dashscope:
model: "text-embedding-v3"
# 检索策略配置
retrieval:
strategy: "hybrid"
min_score_threshold: 0.85 # 最小相关度阈值
hybrid:
weights:
semantic: 0.6
confidence: 0.2
success: 0.15
recency: 0.05
# 记忆管理器配置(v0.2.0+)
memory_manager:
enabled: true # 启用记忆管理器
# 去重配置
deduplication:
strategy: "semantic" # semantic
on_extraction: true # 提取时实时去重
semantic:
threshold: 0.90 # 相似度阈值
top_k_check: 5 # 检查前K条相似记忆
# 合并配置
merge:
strategy: "llm" # llm | voting
auto_execute: true # 自动执行合并
trigger:
min_similar_count: 3 # 最少相似记忆数
similarity_threshold: 0.85 # 相似度阈值
llm:
temperature: 0.7
original_handling: "archive" # 原始经验归档
retrieve_memory检索相关的历史经验记忆以辅助指导当前任务的执行。
参数:
query (string, 必填): 当前任务的查询描述top_k (number, 可选): 检索的记忆数量,默认为1agent_id (string, 可选): 代理ID,用于多租户隔离
返回:
{
"status": "success",
"min_score_threshold": 0.85,
"filtered_count": 2,
"memories": [
{
"memory_id": "mem_001",
"score": 0.92,
"title": "完整历史查询策略",
"content": "...",
"success": true,
"agent_id": "claude-code"
}
],
"formatted_prompt": "以下是我从过去与环境的交互中积累的一些记忆项..."
}
说明:
min_score_threshold使用的最小相关度阈值filtered_count过滤掉的低相关度记忆数量score记忆的相关度得分(0.0-1.0),仅返回超过阈值的记忆extract_memory从任务轨迹中提取推理经验并保存到记忆库中。
参数:
trajectory (array, 必填): 任务执行的轨迹步骤列表
step (number), role (string), content (string), metadata (object, 可选)query (string, 必填): 任务查询描述success_signal (boolean, 可选): 任务是否成功,null时自动判断async_mode (boolean, 可选): 是否异步处理,默认为trueagent_id (string, 可选): 代理ID,用于多租户隔离
返回(异步模式):
{
"status": "processing",
"message": "记忆提取任务已提交,正在后台处理",
"task_id": "extract_12345",
"async_mode": true
}
返回(同步模式):
{
"status": "success",
"message": "记忆提取成功",
"memory_id": "mem_123",
"agent_id": "claude-code"
}
支持两种检索策略:
通过min_score_threshold配置项可以过滤掉低相关度的记忆:
retrieval:
strategy: "hybrid"