Episodic / Semantic Memory
情景与语义记忆情景记忆="何时何地发生了什么",语义记忆="我知道的事实"。
详解
情景记忆(Episodic Memory)和语义记忆(Semantic Memory)是认知科学对长期记忆的两种分类,现在也被直接借用来描述 AI Agent 的记忆结构。情景记忆记录的是「带时间戳的具体事件」——「2025年6月20日,用户小明询问了 Python 列表推导式,我给出了示例,用户说很有帮助」;语义记忆记录的是「与事件无关的一般性事实」——「小明是 Python 初学者,偏好简短回答」。两者都属于长期记忆,区别在于:情景记忆保留了事件的上下文(什么时间、什么情况、结果如何),语义记忆则把信息抽象成了通用知识,脱离了具体情境。工程上,这两类记忆可以用不同的存储结构来区分:情景记忆适合用时序数据库或带时间戳的向量存储(每条记录是一次完整交互);语义记忆适合用键值对或知识图谱(每条记录是一个事实断言)。Agent 设计时明确区分这两类,有助于决策「何时检索事件回放」(情景)vs「何时检索背景知识」(语义)。
一个类比
情景记忆像你的日记:「3月15日,我和朋友去了那家新开的火锅店,等了一小时,味道很辣但值得」——带时间、地点、经过、感受。语义记忆像你脑子里的常识:「火锅是一种四川菜系,吃的时候要蘸麻酱」——不记得是哪天知道的,就是「知道」而已。
举个例子
# 用两张表分别存情景记忆(事件)和语义记忆(事实)
import sqlite3
from datetime import datetime
conn = sqlite3.connect("agent_memory.db")
# 情景记忆表:记录每次具体交互,保留时间和上下文
conn.execute("""
CREATE TABLE IF NOT EXISTS episodic (
id INTEGER PRIMARY KEY,
timestamp TEXT,
event TEXT
)
""")
# 语义记忆表:记录抽象事实,没有时间绑定
conn.execute("""
CREATE TABLE IF NOT EXISTS semantic (
id INTEGER PRIMARY KEY,
key TEXT UNIQUE,
value TEXT
)
""")
# 写入情景记忆:用户做了什么
conn.execute(
"INSERT INTO episodic (timestamp, event) VALUES (?, ?)",
(datetime.now().isoformat(), "用户小明询问了列表推导式,示例代码被采纳"),
)
# 写入语义记忆:从交互中提炼的事实
conn.execute(
"INSERT OR REPLACE INTO semantic (key, value) VALUES (?, ?)",
("user_skill_level", "Python 初学者,偏好有注释的示例代码"),
)
conn.commit()PYTHON 示例
相关概念
- → Long-term Memory· 长期记忆