code/chapter15/Helloagents-AI-Town/MEMORY_SYSTEM_GUIDE.md
赛博小镇的NPC现在拥有了记忆系统,能够记住与玩家的对话历史,并在后续对话中引用之前的内容,让NPC更加智能和真实!
第一次对话:
玩家: "你好,你是做什么的?"
张三: "你好!我是Python工程师,主要负责多智能体系统开发。"
第二次对话 (5分钟后):
玩家: "还记得我刚才问你什么吗?"
张三: "当然记得!你问我是做什么的,我说我是Python工程师。最近在研究HelloAgents框架。"
第一天:
玩家: "你最喜欢的编程语言是什么?"
张三: "我最喜欢Python,简洁优雅,生态丰富。"
第二天:
玩家: "我们之前聊过编程语言吗?"
张三: "聊过!我记得我说过我最喜欢Python,你对这个感兴趣吗?"
与张三对话:
玩家: "我最近在学习多智能体系统"
张三: "太好了!我正好在研究这个,有什么问题可以问我。"
与李四对话:
玩家: "我刚才和张三聊了什么?"
李四: "抱歉,我不知道你和张三聊了什么,我只负责产品方面的工作。"
NPCAgentManager
├── agents: Dict[str, SimpleAgent] # NPC Agent
├── memories: Dict[str, MemoryManager] # NPC记忆管理器
└── chat(npc_name, message, player_id) # 对话接口
├── 1. 检索相关记忆
├── 2. 构建增强提示词
├── 3. 调用Agent生成回复
└── 4. 保存对话到记忆
backend/memory_data/
├── 张三/
│ ├── sqlite_store.db # SQLite数据库 (权威存储)
│ └── qdrant_collection/ # Qdrant向量索引 (语义检索)
├── 李四/
│ ├── sqlite_store.db
│ └── qdrant_collection/
└── 王五/
├── sqlite_store.db
└── qdrant_collection/
{
"id": "memory_uuid",
"content": "玩家说: 你好,你是做什么的?",
"type": "working", # working/episodic
"importance": 0.5, # 0-1之间
"timestamp": "2024-01-15T10:30:00",
"metadata": {
"speaker": "player",
"player_id": "player",
"session_id": "player",
"context": {
"interaction_type": "dialogue",
"npc_name": "张三"
}
}
}
POST /chat
Content-Type: application/json
{
"npc_name": "张三",
"message": "你好,你是做什么的?"
}
响应:
{
"npc_name": "张三",
"npc_title": "Python工程师",
"message": "你好!我是Python工程师,主要负责多智能体系统开发。",
"success": true
}
GET /npcs/张三/memories?limit=10
响应:
{
"npc_name": "张三",
"memories": [
{
"id": "uuid-1",
"content": "玩家说: 你好,你是做什么的?",
"type": "working",
"importance": 0.5,
"timestamp": "2024-01-15T10:30:00",
"metadata": {...}
},
...
],
"total": 10
}
DELETE /npcs/张三/memories?memory_type=working
响应:
{
"message": "已清空张三的记忆",
"npc_name": "张三",
"memory_type": "working"
}
cd backend
python test_memory.py
测试内容:
cd backend
python main.py
访问API文档: http://localhost:8000/docs
测试对话接口:
memory_config = MemoryConfig(
storage_path=f"./memory_data/{npc_name}", # 存储路径
working_memory_capacity=10, # 工作记忆容量
working_memory_tokens=2000, # 工作记忆token限制
episodic_memory_capacity=100, # 情景记忆容量
enable_forgetting=True, # 启用遗忘机制
forgetting_threshold=0.3 # 遗忘阈值
)
| 参数 | 默认值 | 建议范围 | 说明 |
|---|---|---|---|
| working_memory_capacity | 10 | 5-20 | 工作记忆容量,越大越占内存 |
| working_memory_tokens | 2000 | 1000-4000 | Token限制,影响上下文长度 |
| episodic_memory_capacity | 100 | 50-500 | 长期记忆容量,越大越占磁盘 |
| forgetting_threshold | 0.3 | 0.1-0.5 | 遗忘阈值,越低越容易遗忘 |
MemoryManager的使用
记忆检索策略
记忆存储机制
记忆遗忘机制
# 在agents.py的chat方法中
print(f"🧠 {npc_name}检索到{len(relevant_memories)}条相关记忆")
print(f"💾 对话已保存到{npc_name}的记忆中")
# 查看SQLite数据库
cd backend/memory_data/张三
sqlite3 sqlite_store.db
> SELECT * FROM memories;
# 使用API清空记忆
DELETE /npcs/张三/memories
# 或者直接删除文件
rm -rf backend/memory_data/张三
可能原因:
解决方法:
可能原因:
解决方法:
解决方法:
现在记忆系统已经完成,接下来我们将实现:
✅ NPC记忆系统已成功集成到赛博小镇!
核心特性:
教学价值:
下一步: