Mem0のHistory storeでSQLite以外のDBを使う方法

updated@2026-02-23

TL; DR

  • 記事執筆時点の最新であるv1.0.4では、Python版でのHistoy storeはSQLite固定になっている
  • mem0.memory.storage.SQLiteManagerを参考に、使いたいDBに応じたManagerクラスを自作すればよい

Mem0とは

Mem0は一言で説明すると、LLMにいわゆるメモリー機能を持たせられるもの

その中でHistory storeは、Vector storeと違ってチャット履歴を時系列順に記録しておくもの

Vector storeは「知識」を、History storeは「文脈」を扱う (By Gemini)

このMem0にはOSS版があり、これを使うことでメモリー機能をセルフホスティングできる

DBの選択肢

公式ドキュメントの以下のページに記されている通り、Vector Databaseには多くの選択肢が用意されている

いくつかピックアップすると、

  • Qdrant: ローカル環境で済ませたい場合
  • pgvector: PostgreSQLをVector Databaseとしても使えるようにする拡張機能。既にPostgreSQLをホスティングしており、そこにMem0用のテーブルを追加するだけで済む構成
  • Amazon S3 Vectors: 2025年にリリースされたばかりの、Vector Databaseとして使えるタイプのS3バケット
  • Supabase: 最近よく耳にするやつ。内部的にはpgvectorが使われてるっぽい

のようになっている

ただしこれは、あくまでVector store用のDBの話

History storeはデフォルトではローカルでSQLiteを使う形になっているが、これを永続化させたい場合は一気に面倒になってくる

まずNode.js版のMem0であれば、デフォルトのSQLite以外にSupabaseを使うオプション設定が用意されているため、この場合は簡単

(以下のソースコードを参照)

しかしPython版ではどうだろうか

SQLiteManagerしか用意されてない!

しかも、このHistoryManagerを使うMemoryクラス側のコンストラクタで、SQLiteManagerで固定されてしまっている!

class Memory(MemoryBase):
    def __init__(self, config: MemoryConfig = MemoryConfig()):
        # 省略
        self.vector_store = VectorStoreFactory.create(
            self.config.vector_store.provider, self.config.vector_store.config
        )
        # 省略
        self.db = SQLiteManager(self.config.history_db_path)

https://github.com/mem0ai/mem0/blob/main/mem0/memory/main.py

ということがあり、
正直ここはPull Requestを投げてしまいたい気持ちがありましたがそんな余裕がある訳ではないので、ここでは取り急ぎの対策を共有します。

History storeにPostgreSQLを使うようにカスタマイズしてみる

今回はPostgreSQLを使うことにしてみます。

といってもやることは単純で、SQLiteManagerの実装を参考に、自前でPostgresManagerを実装します。

あとはMemoryクラスを継承し、コンストラクタを以下のように上書きします。

class CustomizedMemory(Memory):
    def __init__(self, config: MemoryConfig = MemoryConfig()):
        super().__init__(config)
        self.db = PostgresManager(self.config.history_db_path)

余談ですが、SQLiteManagerはSQL文が直で書かれているため、実装ミスによるSQLインジェクションが怖いという場合もあるかもしれません。

pgvectorには、SQLAlchemyなどのORMでもVector形式のテーブルを定義できるようにするためのライブラリが用意されています。

これを利用して、HistoryManagerの各種DB操作部分はORMを利用するような書き方にもできるかと思います。

ご参考までに

スポンサーリンク