> ## Documentation Index
> Fetch the complete documentation index at: https://docs.sambanova.ai/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Mem0

Mem0 は、文脈を保った会話を維持するために設計されたメモリエンジンです。ユーザーが同じ内容を繰り返し入力する必要をなくし、エージェントが一貫性のある継続的な応答を返せるようにします。すべてを自社インフラ上で管理したいチームに適したアダプティブなメモリソリューションであり、スタック・データ・カスタマイズを完全にコントロールできます。

## 前提条件

作業を始める前に、以下の環境を準備してください。

* [SambaCloud](https://cloud.sambanova.ai/apis) のアカウントと API キー
* **OpenAI の API キー。** Mem0 はチャットモデルに加えて Embedding (埋め込み) モデルを必要としますが、[SambaNova の Embedding は SambaStack のみで提供](/docs/ja/features/embeddings)されています。SambaCloud では embedder を別のプロバイダーから用意する必要があるため、SambaNova のキーに加えて `OPENAI_API_KEY` が必須です。どの呼び出しがどこへ送られるかは [Mem0 での SambaNova の使われ方](#mem0-での-sambanova-の使われ方) をご参照ください。
* Python 3.10 以上。サンプルリポジトリでバージョン固定されている `langchain` および `langchain-sambanova` のリリースは 3.10 を必要とするため、3.9 では `pip install -r requirements.txt` が失敗します。
* ベクトルストアのインストールや起動は不要です。Mem0 はデフォルトでローカル組み込みモードの Qdrant を使用し、ローカルマシン上のディレクトリに書き込みます。

<Note>
  macOS に標準搭載されている Python は 3.9 で、`python` ではなく `python3` として提供されます。`python3 --version` でバージョンを確認してください。3.10 未満の場合は、[pyenv](https://github.com/pyenv/pyenv)、[uv](https://docs.astral.sh/uv/)、または `brew install python@3.12` でサポート対象のバージョンをインストールしてから先へ進んでください。
</Note>

## Mem0 での SambaNova の使われ方

Mem0 は 3 種類の呼び出しを行い、それぞれが独立してプロバイダーに解決されます。どの呼び出しがどれに当たるかを理解すれば、2 つのキーが必要な理由がわかります。

| 役割 | 動作 | 本ガイドで使用するプロバイダー |
| :- | :- | :- |
| Chat completions | ユーザーに表示される応答を生成します | SambaNova `gpt-oss-120b` |
| メモリ LLM | 会話から事実を抽出し、メモリの追加・更新・削除を判断します | SambaNova `gpt-oss-120b` |
| Embedder | 類似検索のためにメモリとクエリをベクトルに変換します | OpenAI `text-embedding-3-small` |

<Warning>
  Mem0 の設定から `llm` ブロックを省略しても、Mem0 は SambaNova にフォールバックしません。デフォルトの `provider: "openai"` とモデル `gpt-4.1-nano-2025-04-14` になり、`OPENAI_API_KEY` を読み取るため、メモリ抽出が気づかないうちに OpenAI 上で実行されてしまいます。この処理を SambaNova 上で実行するために、以下のように `llm` ブロックを明示的に設定してください。
</Warning>

## クイックスタート

このクイックスタートは単体で完結しています。何もクローンすることなく、メモリを保存し、後のターンで想起し、プロンプトに反映します。

### Mem0 のインストール

```bash theme={}
pip install "mem0ai==1.0.1"
```

バージョンは固定してください。Mem0 の設定スキーマはメジャーバージョン間で変わり、以下の設定は 1.x のスキーマに合わせて書かれています。`mem0ai` は依存関係として `openai` クライアントをインストールするため、別途インストールする必要はありません。

### API キーの設定

```bash theme={}
export SAMBANOVA_API_KEY="your-sambanova-api-key"
export OPENAI_API_KEY="your-openai-api-key"
```

### メモリの保存と想起

以下を `quickstart.py` として保存し、`python quickstart.py` で実行します。

```python theme={}
import os

from mem0 import Memory
from openai import OpenAI

SAMBANOVA_BASE_URL = "https://api.sambanova.ai/v1"
CHAT_MODEL = "gpt-oss-120b"
USER_ID = "alice"

# Both lookups raise KeyError immediately if the variable is unset, so a missing
# key fails before the first request instead of surfacing as a 401 later.
sambanova_api_key = os.environ["SAMBANOVA_API_KEY"]
openai_api_key = os.environ["OPENAI_API_KEY"]

config = {
    "llm": {
        "provider": "openai",
        "config": {
            "model": CHAT_MODEL,
            "openai_base_url": SAMBANOVA_BASE_URL,
            "api_key": sambanova_api_key,
        },
    },
    "embedder": {
        "provider": "openai",
        "config": {
            "model": "text-embedding-3-small",
            "embedding_dims": 1536,
            "api_key": openai_api_key,
        },
    },
    "vector_store": {
        "provider": "qdrant",
        "config": {
            "collection_name": "sambanova_mem0",
            "embedding_model_dims": 1536,
            "path": "./.qdrant",
            "on_disk": True,
        },
    },
}

memory = Memory.from_config(config)
client = OpenAI(api_key=sambanova_api_key, base_url=SAMBANOVA_BASE_URL)


def chat(message: str) -> str:
    # 1. Recall memories relevant to this message.
    recalled = memory.search(query=message, user_id=USER_ID, limit=3).get("results", [])
    context = "\n".join(f"- {item['memory']}" for item in recalled) or "No relevant memories yet."
    print(f"[recalled]\n{context}\n")

    # 2. Use them in the prompt.
    response = client.chat.completions.create(
        model=CHAT_MODEL,
        messages=[
            {
                "role": "system",
                "content": f"You are a helpful assistant. Use these memories only if relevant:\n{context}",
            },
            {"role": "user", "content": message},
        ],
    )
    reply = response.choices[0].message.content

    # 3. Store this turn so later turns can recall it.
    memory.add(
        [
            {"role": "user", "content": message},
            {"role": "assistant", "content": reply},
        ],
        user_id=USER_ID,
    )
    return reply


print(chat("I'm allergic to peanuts, and I love Thai food."))
print(chat("What should I order for dinner?"))
```

この設定には、見た目以上に重要な点が 2 つあります。

* `openai_base_url` は、OpenAI 互換クライアントの接続先を変更するために Mem0 が読み取るキーです。`base_url` と書くと `TypeError: __init__() got an unexpected keyword argument 'base_url'` が発生します。
* `embedder` ブロックには意図的に `openai_base_url` を設定していないため、接続先は `https://api.openai.com/v1` になります。環境変数 `OPENAI_BASE_URL` は設定しないでください。Mem0 の embedder がこれを読み取って Embedding リクエストを SambaNova に送信してしまいますが、SambaCloud では Embedding は提供されていません。

### 動作確認

最初のターンでは想起するものがありません。2 番目のターンが動作の証明になります。ターン 1 から抽出されたメモリが返され、プロンプトに反映されます。

```text theme={}
[recalled]
No relevant memories yet.

<reply to your first message>

[recalled]
- Is allergic to peanuts
- Loves Thai food

<dinner suggestion that avoids peanuts>
```

抽出されるメモリと 2 つの応答の正確な文言は、実行のたびに変わります。連携が機能していることの確認になるのは、2 番目の `[recalled]` ブロックが空でないことです。

あるユーザーについて保存されているすべての内容を一覧するには、以下を `quickstart.py` の末尾に追記します。上で定義した `memory` オブジェクトと `USER_ID` を再利用します。

```python theme={}
for item in memory.get_all(user_id=USER_ID)["results"]:
    print(item["id"], "|", item["memory"])
```

<Note>
  `on_disk` は意図的に `True` に設定しています。Mem0 のローカル Qdrant ストアのデフォルトは `on_disk: False` で、このモードでは `Memory` オブジェクトを構築するたびにストアのディレクトリが削除されるため、メモリが再起動後に残りません。`on_disk: True` に設定すると、実行をまたいでメモリが保持されます。
</Note>

## サンプルアプリケーションの実行

[sambanova/integrations](https://github.com/sambanova/integrations/tree/main/mem0) リポジトリには、同じ追加・検索のループを対話型の REPL でラップした、より長いサンプルがあります。

### リポジトリのクローン

```bash theme={}
git clone https://github.com/sambanova/integrations.git
cd integrations/mem0
```

### 仮想環境の作成

```bash theme={}
python3 -m venv .venv
source .venv/bin/activate
```

インストールの前に、環境がサポート対象のバージョンを使用していることを確認します。

```bash theme={}
python --version
```

### 依存パッケージのインストール

```bash theme={}
pip install -r requirements.txt
```

### 環境変数の設定

プロジェクトディレクトリに `.env` ファイルを作成し、両方のキーを記述します。

```bash theme={}
SAMBANOVA_API_KEY=your-sambanova-api-key
OPENAI_API_KEY=your-openai-api-key
```

または、ターミナルで変数を直接エクスポートします。

```bash theme={}
export SAMBANOVA_API_KEY="your-sambanova-api-key"
export OPENAI_API_KEY="your-openai-api-key"
```

### スクリプトの実行

このスクリプトは、SambaNova に接続された Mem0 のメモリクライアントを初期化して対話型のチャットループを開始するため、フォローアップの質問をすることでターンをまたいだメモリの保持を確認できます。終了するには `exit` と入力します。

<Warning>
  このサンプルは Embedding モデルに `E5-Mistral-7B-Instruct` を設定していますが、このモデルは [2026年4月6日に SambaCloud での提供が終了](/docs/ja/models/deprecations)し、[SambaStack のみで提供](/docs/ja/features/embeddings)されています。SambaCloud のキーでは、メモリの書き込みと検索がすべて失敗します。別の SambaNova Embedding モデルに置き換えても解決しません。SambaCloud は現在 Embedding エンドポイントを提供していないためです。

  SambaCloud に対してサンプルを実行するには、`main.py` を編集して SambaNova 以外の embedder を使用してください。`embedder` ブロックを上記 [クイックスタート](#メモリの保存と想起) の OpenAI embedder に置き換え、`embedding_model_dims` を `text-embedding-3-small` に合わせて `1536` に設定します (サンプルは現在 E5-Mistral 用に `4096` を設定しています)。あるいは、Embedding エンドポイントを提供する SambaStack デプロイメントに向けてサンプルを実行してください。

  また、このサンプルは `llm` ブロックを省略しているため、メモリ抽出は SambaNova ではなく OpenAI 上で実行されます。SambaNova 上で実行するには、クイックスタートの `llm` ブロックを追加してください。
</Warning>

```bash theme={}
python main.py
```

スクリプトはバナーを表示した後、入力を待機します。

```text theme={}
Chat with AI memory system (type 'exit' to quit)

You:
```

このプロンプトはモデル呼び出しが行われる前に表示されるため、ここまで到達しても確認できるのは依存パッケージのインポートが成功したことだけです。設定やキーの問題は、起動時ではなく最初のメッセージ送信時に表面化します。

完全なソースコードと追加のサンプルは、GitHub の [Mem0 連携サンプル](https://github.com/sambanova/integrations/tree/main/mem0) でご覧いただけます。

## トラブルシューティング

<AccordionGroup>
  <Accordion title="command not found: python">
    macOS には `python` 実行ファイルはなく、`python3` のみが提供されます。仮想環境の作成には `python3 -m venv .venv` を使用してください。`source .venv/bin/activate` で有効化すれば、環境内では `python` が期待どおりに動作します。
  </Accordion>

  <Accordion title="pip install が langchain の要件で失敗する">
    バージョン固定されている `langchain` および `langchain-sambanova` のリリースには Python 3.10 以上が必要です。有効化した環境内のインタープリターを `python --version` で確認し、3.9 と表示される場合はサポート対象のインタープリターで環境を作り直してください。
  </Accordion>

  <Accordion title="チャットループは起動するが、最初のメッセージで失敗する">
    プロンプトはモデル呼び出しが行われる前に表示されるため、設定に問題があっても、最初のメッセージを送信するまで表面化しません。そのターンでは、Embedding エンドポイントに対するメモリ検索、チャット補完、そして両方を再度使用するメモリ書き込みの 3 つの呼び出しが順に行われます。Embedding の呼び出しが最初なので、通常はそれが最初に失敗します。エラーのテキストを読み、どのエンドポイントがリクエストを拒否したかを確認してください。
  </Accordion>

  <Accordion title="AuthenticationError: Error code: 401">
    2 つのキーのいずれかが未設定または誤っています。メッセージ本文を読んでどちらかを判別してください。`platform.openai.com` を案内する 401 は embedder からのものなので、`OPENAI_API_KEY` を確認します。それ以外の 401 はチャットまたはメモリ LLM の呼び出しからのものなので、`SAMBANOVA_API_KEY` を確認し、[SambaCloud ポータル](https://cloud.sambanova.ai/apis) からコピーし直してください。

    各ターンの最初の処理はメモリ検索であるため、embedder が最初に失敗する呼び出しになります。そのため、SambaNova のキーが正しくても OpenAI の 401 が表示されることがあります。また、サンプルの `main.py` は `os.environ.setdefault` を呼び出すため、起動時に失敗する代わりにプレースホルダの値で代替され、エラーは最初のメッセージ送信時にのみ表面化します。クイックスタートは代わりに `os.environ[...]` でキーを読み取るため、キーが欠けていれば即座に失敗します。
  </Accordion>

  <Accordion title="Embedding エンドポイントへのメモリの書き込み・検索が失敗する">
    SambaNova の Embedding は [SambaStack のみで提供](/docs/ja/features/embeddings)されており、`E5-Mistral-7B-Instruct` は [2026年4月6日に SambaCloud での提供が終了](/docs/ja/models/deprecations)しました。SambaCloud のキーではこのエンドポイントに到達できません。クイックスタートのように SambaNova 以外の embedder を設定するか、SambaStack デプロイメントを使用してください。
  </Accordion>

  <Accordion title="SambaNova を使用しているのに OPENAI_API_KEY のエラーが出る">
    想定どおりの動作です。Mem0 には embedder が必要ですが、SambaCloud は Embedding を提供していないため、embedder は OpenAI 上で動作し `OPENAI_API_KEY` を読み取ります。両方のキーを設定する必要があります。設定から `llm` ブロックも省略している場合は、Mem0 のメモリ LLM もデフォルトの OpenAI になり、同じキーを読み取ります。
  </Accordion>

  <Accordion title="TypeError: __init__() got an unexpected keyword argument 'base_url'">
    Mem0 の OpenAI 互換プロバイダー設定では、`base_url` ではなく `openai_base_url` を使用します。`llm` 設定ブロック内のキー名を変更してください。
  </Accordion>

  <Accordion title="openai_base_url が SambaNova を指しているのにリクエストが OpenAI に送られる">
    `llm` ブロックが存在し、`provider` が `openai`、`openai_base_url` が `https://api.sambanova.ai/v1` に設定されていることを確認してください。Mem0 は専用のプロバイダーではなく OpenAI 互換クライアントを通じて SambaNova に接続するため、`provider: "sambanova"` は `Unsupported LLM provider` として拒否されます。
  </Accordion>

  <Accordion title="再起動するたびにメモリが空になる">
    Mem0 のローカル Qdrant ストアのデフォルトは `on_disk: False` で、このモードでは `Memory` オブジェクトの構築時にストアのディレクトリが削除されます。実行をまたいでメモリを保持するには、`vector_store` 設定で `on_disk` を `True` に設定してください。
  </Accordion>

  <Accordion title="2 ターン目で何も想起されない">
    メモリの書き込みでは、会話をメモリ LLM に通して事実を抽出するため、保存に値する事実を含まないターンからはメモリが生成されません。何が保存されたかは `memory.get_all(user_id=USER_ID)` で確認してください。また、メモリはユーザーごとにスコープされるため、`search` と `add` が同じ `user_id` を使用していることも確認してください。
  </Accordion>

  <Accordion title="embedder を変更した後にベクトルの次元が一致しない">
    `vector_store` 設定の `embedding_model_dims` は、Embedding モデルの出力サイズと一致している必要があります (`text-embedding-3-small` は `1536`、`E5-Mistral-7B-Instruct` は `4096`)。embedder を変更した後は、ローカルのストアディレクトリを削除して、コレクションが新しいサイズで再作成されるようにしてください。
  </Accordion>
</AccordionGroup>

## 参考情報

Mem0 の詳細については、[Mem0 の公式ドキュメント](https://docs.mem0.ai/introduction) をご参照ください。
