意味記憶(ベクトル化された事実)
エージェントがユーザーや世界について学んだ独立した事実を、ベクトルインデックスに保存します。
「意味記憶(ベクトル化された事実)」はCoddyKit上の無料AI Agentsレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはAI Agents学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 AI Agentsコースには全4レッスンが含まれています。
このレッスンの一部はまだ翻訳されておらず、英語で表示されています。
意味記憶とは
意味記憶には、エージェントが知っている、ユーザー、世界、会社などに関する独立した事実が保持されます。エピソード記憶とは異なり、特定の出来事に結び付いたタイムスタンプはありません。
例:
- 「ユーザーの名前はAliceです。」
- 「Aliceは摂氏を好みます。」
- 「現在の料金プランは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)事実を更新
事実が変わった場合はどうすればよいでしょうか。「Aliceは摂氏を好む」から「Aliceは現在、華氏を好む」への変更です。方法は2つあります。
- 古い事実を無効にする(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)は、エージェントのメモリを大規模に実装します。常にコンテキストに含まれる「core」メモリと、ベクトル検索する「archival」メモリを分離して扱います。
意味記憶とエピソード記憶
意味記憶はエピソード記憶とどのように異なりますか。
まとめ
ユーザーに関する事実をベクトルストアに保存し、各ターンで関連するK件を取得してシステムプロンプトに挿入します。矛盾を整合させ、時間の経過とともに信頼度を下げるか、期限切れにします。
よくある質問
「意味記憶(ベクトル化された事実)」レッスンは無料ですか?
はい。「意味記憶(ベクトル化された事実)」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、AI Agentsコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 AI Agentsコースには全4レッスンが含まれています。
「意味記憶(ベクトル化された事実)」で何を学びますか?
エージェントがユーザーや世界について学んだ独立した事実を、ベクトルインデックスに保存します。 ブラウザで直接実行するハンズオンコードでAI Agentsを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
AI Agentsを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのAI Agentsは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「意味記憶(ベクトル化された事実)」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このAI Agentsレッスンでコードを書いて実行できますか?
はい。すべてのAI Agentsレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- エピソード記憶(セッションごとの履歴)
- 意味記憶(ベクトル化された事実)
- 手続き記憶(スキルライブラリ)
- 記憶の減衰とガベージコレクション