Community研究&データ分析github.com

Lilily58/Mem

🧠 SQLite、全文検索、ベクトル類似性、競合解決を用いて、永続的でハイブリッドな会話メモリを構築します。

Mem とは?

Lilily58/Mem は、AIアシスタント向けに設計された永続的なハイブリッド会話メモリスキルです。SQLite をバックエンドとして使用し、全文検索(FTS5)とベクトル類似性検索を組み合わせることで、過去の会話コンテキストを効率的に保持・検索できます。競合解決メカニズムを備えており、同じトピックに関する複数の情報が矛盾なく統合されるため、長期にわたる対話でも一貫性が保たれます。このスキルは、コマンドラインツールやエージェントフレームワークと統合可能で、環境変数や設定ファイルを使って柔軟に構成できます。開発者は、自然言語クエリや埋め込みベクトルを用いた類似検索を活用し、AIエージェントの記憶能力を大幅に向上させることができます。

対応~Claude Code~Codex CLI~Cursor
npx skills add Lilily58/Mem

Installed? Explore more 研究&データ分析 skills: affaan-m/uspto-database, affaan-m/scholar-evaluation, affaan-m/literature-review · View all 6 →

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

Mem は何をしますか?

🧠 SQLite、全文検索、ベクトル類似性、競合解決を用いて、AIアシスタント向けの永続的でハイブリッドな会話メモリを構築します。

概要

Lilily58/Mem は、AIエージェントやアシスタントに長期記憶を提供するためのスキルです。会話履歴をSQLiteデータベースに保存し、全文検索とベクトル類似性検索を組み合わせて、関連する過去のコンテキストを高速に取り出せます。競合解決機能により、同じ話題に関する矛盾した情報を整理し、一貫性のある記憶を維持します。

特徴

  • 永続ストレージ: データはSQLiteに保存され、セッションをまたいで利用可能。
  • 全文検索: FTS5を使用して、キーワードベースの高速検索を実現。
  • ベクトル類似性: 埋め込みベクトルを利用した意味的類似検索。
  • 競合解決: 同じエンティティに対する異なる情報を自動的にマージ・解決。
  • 軽量・移植性: 外部サービス不要で、スタンドアロンで動作。

インストール

# npm を使用する場合
npm install lilily58-mem

# またはリポジトリをクローン

クイックスタート

const Mem = require('lilily58-mem');

(async () => {
  const mem = new Mem({ dbPath: './memory.db' });
  await mem.init();

  // 会話を記憶
  await mem.remember({ role: 'user', content: '好きな色は青です' });

  // 記憶を検索
  const results = await mem.search('好きな色');
  console.log(results);
})();

設定

環境変数または設定ファイルで以下の値を指定できます:

  • MEM_DB_PATH: SQLiteデータベースのパス(デフォルト: ./memory.db)
  • MEM_EMBEDDING_MODEL: 埋め込みモデル名(例: all-MiniLM-L6-v2)
  • MEM_SEARCH_MODE: 検索モード(hybrid, fts, vector のいずれか)

API

new Mem(options)

  • options.dbPath: データベースファイルパス(文字列)
  • options.embeddingFn: カスタム埋め込み関数(省略時はデフォルトモデル)

async mem.init()

データベースとインデックスを初期化します。

async mem.remember(item)

会話項目を記憶に追加します。item は { role, content, metadata? } の形式。

async mem.search(query, options?)

クエリに基づいて記憶を検索します。options.limit で結果数を制限可能。

async mem.forget(filter)

条件に一致する記憶を削除します。

競合解決

競合解決は、同一エンティティ(例:ユーザーが言及した事実)に対して矛盾する情報が入力された場合に、以下の戦略で自動処理します:

  1. 最新優先: 新しい情報を古い情報より優先。
  2. 信頼度スコア: メタデータに信頼度があれば、高い方を採用。
  3. マージ: 両方の情報が部分的に正しい場合、統合して保存。

統合例

コマンドライン

echo '{"role":"user","content":"私の名前は太郎です"}' | mem remember
mem search '名前'

Agent Framework (カスタム)

from lilily58_mem import Mem

mem = Mem()
mem.remember("ユーザーはJavaScriptが得意です")
results = mem.search("スキル")

注意事項

  • データベースファイルは定期的にバックアップしてください。
  • 大きなベクトルデータを扱う場合は、適切なインデックス設定が必要です。
  • プライバシーに配慮し、機密情報は暗号化を検討してください。

ライセンス

MIT


詳細は GitHub リポジトリ を参照してください。

関連スキル