AIの知性を飛躍させる「MemoriLabs/Memori」入門:記憶の保存と検索のアーキテクチャ
ご提示いただいたオープンソースの記憶エンジン「MemoriLabs/Memori」について、ソフトウェアエンジニアの視点から、その有用性、導入方法、そしてサンプルコードの例を、コントのお化け屋敷のように面白おかしく、しかし技術的に分かりやすく解説しますね!
「MemoriLabs/Memori」は、LLM(大規模言語モデル)やAIエージェントに、まるで人間のような「記憶」を与えるためのオープンソースのエンジンです。
普通のLLMは、セッションが終わるとすぐに会話の内容を忘れてしまう、まるで「1分前のことも忘れる幽霊」のようなものです。この「記憶喪失」を克服し、過去の経験や知識を学習・活用できるようにするのがMemoriの役割です。
これはまさに、私たちが作るAIアプリケーションの「ユーザー体験(UX)」と「知性」を劇的に向上させるための、強力なツールです。
| メモリの機能 | お化け屋敷コントでの状況 | 技術的なメリット(エンジニア視点) |
| 長期記憶 (Long-Term Memory) | ユーザー 「前にカボチャのランプが好きって言ったよな?」 幽霊 「...え?誰だっけ?」 Memori 「お客様は前回、オレンジと黒のジャック・オ・ランタンを熱望されていました!」 | 文脈維持とパーソナライズ: 以前の対話や行動履歴に基づいて、関連性の高い情報や好み(ユーザーの好きな色、プロジェクト名など)を次の対話に自動で組み込める。 |
| 短期記憶 (Short-Term Memory) | 幽霊 「あれ?さっきどこまで脅かす話したっけ?」 Memori 「今、3番目の『うらめしや』を言いかけたところです!」 | 連続したタスク処理: 複雑な一連の指示(例:データベース検索 → 結果を加工 → レポート作成)の中間ステップを忘れずに保持し、エージェントの処理能力を向上させる。 |
| 反省・学習 (Reflection & Learning) | 幽霊 「どうやったらもっと怖がってくれるかな?」 Memori 「前回の大きな音よりも、囁き声の方が効果的でしたよ。」 | エージェントの自己改善: 過去の対話やタスクの結果を分析し、**「メタ記憶」**として知識を抽象化・構造化することで、次の行動の品質を向上させる。 |
MemoriはPythonベースで、非常にシンプルに導入できます。まるでアプリに記憶の魂を吹き込むようなものです。
まずは、Pythonの環境にMemoriライブラリをインストールします。
# pipで図書館から記憶の巻物を手に入れる
pip install Memori
Memoriの核となるのは、情報を保持し、検索し、LLM(あなたのAI)に提供するサイクルです。
記憶の格納 (Store) エージェントが何かを経験したり、ユーザーから情報を聞いたりしたら、それをMemoriに「思い出」として保存します。
記憶の検索 (Retrieve) ユーザーからの新しい質問が来たら、Memoriに保存されている「思い出」の中から、その質問に関連性の高いものを検索します。
LLMへの提供 (Context Injection) 検索した関連情報(コンテキスト)を、新しいユーザーの入力と一緒にLLMに渡します。
賢い応答 (Intelligent Response)
LLMは渡されたコンテキストを使って、過去を踏まえた賢い返答を生成します。
ここでは、Memoriを使って、以前の会話を覚えているシンプルなチャットボットを作成する例を示します。
# おまじないのようにライブラリをインポート
from Memori import Memori
# 1. 記憶エンジンの初期化
# 仮のデータストアとしてインメモリを使用(実際のプロジェクトではDBを使う)
memori_agent = Memori(
agent_id="ghost_assistant_001",
llm_model_name="openai/gpt-3.5-turbo", # 使うLLMモデルを指定
llm_api_key="YOUR_API_KEY", # APIキー
)
# 2. 最初の対話と記憶の格納
def first_interaction():
print("--- 最初の日の会話 ---")
# ユーザーからのインプット
user_input = "私の名前はアキラです。週末はいつもホラー映画を見ています。"
# LLMが応答を生成
llm_response = f"アキラさん、ホラー映画がお好きなんですね!それは素晴らしいです。"
# 記憶をMemoriに保存
memori_agent.store(
input=user_input,
output=llm_response,
tags={"topic": "introduction"}
)
print(f" Memoriに記憶を保存しました: {user_input}")
# 3. 日を置いての対話と記憶の活用
def second_interaction():
print("\n--- 翌日の会話(記憶の呼び出し) ---")
# ユーザーからの質問
user_query = "私が好きな映画のジャンルは何だったっけ?"
# Memoriが過去の関連情報を検索(これが「記憶」の正体)
# 検索結果がLLMに渡すコンテキストとなる
context = memori_agent.retrieve(user_query)
print(f" Memoriが呼び出した過去の記憶:\n{context}")
# LLMへのプロンプト構成
# 検索されたコンテキストをプロンプトに組み込むのが鍵!
prompt = f"以下の過去の会話(コンテキスト)に基づき、ユーザーの質問に答えてください。\n\nコンテキスト:\n{context}\n\nユーザーの質問: {user_query}"
# 応答生成 (※ここではLLMのAPI呼び出しを省略し、手動で賢い応答をシミュレート)
final_response = "あなたの過去の会話から、**ホラー映画**がお好きだと記憶しています。週末が楽しみですね!"
print(f"\n エージェントの返答:\n{final_response}")
# 実行!
first_interaction()
second_interaction()
--- 最初の日の会話 ---
Memoriに記憶を保存しました: 私の名前はアキラです。週末はいつもホラー映画を見ています。
--- 翌日の会話(記憶の呼び出し) ---
Memoriが呼び出した過去の記憶:
[...以前の対話や、その対話から抽出された重要な事実がリストアップされる...]
- ユーザーの名前はアキラ
- ユーザーは週末にホラー映画を見るのが好き
- タグ: introduction
エージェントの返答:
あなたの過去の会話から、**ホラー映画**がお好きだと記憶しています。週末が楽しみですね!
Memoriを使うことで、あなたのAIエージェントは、単なる「コントの幽霊」から、「過去の縁を覚えている、賢い執事のような幽霊」へと進化を遂げるでしょう!