语义记忆(向量化事实)
将智能体了解到的有关用户或世界的独立事实存储在向量索引中。
语义记忆(向量化事实) 是 CoddyKit 上的免费 AI Agents 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 AI Agents 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 AI Agents 课程共包含 4 节课。
本课时的部分内容尚未翻译,以英文显示。
什么是语义记忆
语义记忆保存代理所知道的零散事实——关于用户、世界和公司的事实。与情景记忆不同,它没有与特定事件绑定的时间戳。
示例:
- “用户的名字是爱丽丝。”
- “爱丽丝偏好摄氏度。”
- “当前定价层级是 Pro,每月 20 美元。”
存储格式
向量存储 + 结构化元数据:
CREATE TABLE semantic_facts (
id UUID PRIMARY KEY,
user_id TEXT NOT NULL,
fact TEXT NOT NULL,
embedding vector(1536),
source TEXT, -- 'extracted' / 'user-stated' / 'system'
confidence REAL DEFAULT 1.0,
created_at TIMESTAMPTZ DEFAULT NOW()
);从对话中提取事实
每次会话结束后,运行一个 LLM 提取器:
extract_prompt = '''
From the conversation below, list any new facts about the user.
Return JSON: [{"fact": "...", "confidence": 0.0-1.0}]
Conversation:
{transcript}
'''
print(extract_prompt.strip())
Saving Extracted Facts
import uuid
for f in extracted:
vec = embed(f['fact'])
conn.execute('''
INSERT INTO semantic_facts (id, user_id, fact, embedding, confidence, source)
VALUES (%s, %s, %s, %s, %s, 'extracted')
''', (str(uuid.uuid4()), user_id, f['fact'], vec, f['confidence']))推理时检索
对于每个新查询,检索相关事实,并将其注入系统提示:
def relevant_facts(user_id, query, k=5):
qvec = embed(query)
rows = conn.execute('''
SELECT fact FROM semantic_facts
WHERE user_id = %s
ORDER BY embedding <=> %s LIMIT %s
''', (user_id, qvec, k))
return [r[0] for r in rows]
facts = relevant_facts(user_id, user_question)
system = SYSTEM_PROMPT + '\n\nKnown facts:\n' + '\n'.join(facts)更新事实
如果事实发生变化怎么办?“爱丽丝偏好摄氏度” -> “爱丽丝现在偏好华氏度”。有两种策略:
- 将旧事实标记为过时(添加 updated_at,软删除)
- 或者:存储矛盾事实,在检索时解决冲突
事实协调
提取事实时,检查其是否与现有事实矛盾:
def reconcile(user_id, new_fact):
similar = relevant_facts(user_id, new_fact, k=3)
response = llm.invoke(f'Is the new fact ({new_fact}) consistent with existing facts ({similar})? If contradicting, return the obsolete one.')
if response.has_contradiction:
mark_obsolete(response.obsolete_id)
save_fact(new_fact)Confidence-Weighted Retrieval
rows = conn.execute('''
SELECT fact FROM semantic_facts
WHERE user_id = %s AND confidence > 0.6
ORDER BY embedding <=> %s LIMIT %s
''', ...)事实衰减
有些事实会过时(“当前项目是 X”)。请添加 TTL,或随时间推移降低置信度:
UPDATE semantic_facts
SET confidence = confidence * 0.95
WHERE created_at < NOW() - INTERVAL '30 days';隐私敏感事实
存储前请加密 PII。某些事实(健康状况、财务信息)需要额外保护——请将它们存储在单独且访问限制更严格的表中。
用户可编辑的事实
向用户展示已存储的事实,并允许用户编辑或删除。这样可以建立信任,减少令人不适的记忆错误。
将记忆作为工具
将记忆操作公开为代理自身可以调用的工具:
tools = [
{'name': 'remember_fact', 'description': 'Save a new fact about the user'},
{'name': 'forget_fact', 'description': 'Remove a stored fact'},
{'name': 'recall_facts', 'description': 'Search relevant facts for a query'}
]
import json
print(json.dumps(tools, indent=2))
Letta 与 MemGPT
Letta 框架(前身为 MemGPT)以可扩展的方式实现代理记忆,并将记忆分为独立的“核心”记忆(始终位于上下文中)和“存档”记忆(通过向量搜索)。
语义记忆与情景记忆
语义记忆与情景记忆有何不同?
回顾
将关于用户的事实存储在向量数据库中,在每次交互时检索相关的 K 条事实,并将其注入系统提示。协调矛盾事实,并让事实随时间衰减或过期。
常见问题解答
「语义记忆(向量化事实)」课时是免费的吗?
是的 — 「语义记忆(向量化事实)」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 AI Agents 课程的其余内容,请升级到 CoddyKit PRO。 AI Agents 课程共包含 4 节课。
「语义记忆(向量化事实)」这节课中我会学到什么?
将智能体了解到的有关用户或世界的独立事实存储在向量索引中。 你通过在浏览器中直接运行的动手代码来练习 AI Agents,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 AI Agents 需要有经验吗?
无需任何先前经验。CoddyKit 上的 AI Agents 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。
「语义记忆(向量化事实)」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 AI Agents 课中编写并运行代码吗?
能。每节 AI Agents 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 情节记忆(按会话记录)
- 语义记忆(向量化事实)
- 程序记忆(技能库)
- 记忆衰减与垃圾回收