Fraise について
FraiseはAIエージェント向けのメモリデータベースで、コンパクトなFQLを使って時間情報付きグラフの事実を検索できます。単一のデーモンで動作し、テキスト・グラフ・任意のベクトル検索に対応しますが、長期永続化にはまだ対応していません。
主な機能
- 01FQLによる記憶と想起
- 02時間情報付きメモリグラフ
- 03テキスト・グラフ・ベクトルの混合検索
- 04関連性と新しさによる順位付け
- 05複数の独立したメモリグラフ
活用シーン
- 01後続のエージェントセッション用に事実を保存
- 02トピックやエンティティから事実を想起
- 03ユーザーやエージェントごとに記憶を分離
MCP 対応
`fraise mcp`は、MCPクライアントと稼働中のFraiseデーモンをつなぐstdioサーバーです。`remember`と`recall`のツールを公開します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
docker run -i --rm ghcr.io/fraisehq/fraise:0.3.5ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ghcr.io/fraisehq/fraise:0.3.5stdioツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Fraise
FraiseはAIエージェント向けのメモリデータベースです。 人間向けではなく、トークン向けに作られた言語で、エージェントが直接クエリします。
remember 'acme moved to annual billing' topic:billing entity:acme
recall billing entity:acme since:30d top:5
2つの動詞。1つのバイナリ。運用するインフラは不要です。
インストール
brew install fraisehq/tap/fraise
brew services start fraise
curl -X POST localhost:9876/api/v1/q -H 'content-type: application/json' \
-d "{\"query\": \"remember 'the parrot is turquoise' topic:color\"}"
Linuxパッケージ、Docker、go install、署名済みリリースバイナリについては、以下の始め方をご覧ください。
デプロイする前に耐久性をお読みください。永続化はissue #171で扱われており、次の主要な作業項目です。
比較
LoCoMo(複数セッションの会話10件、質問1,986件)で測定しました。すべてのシステムが同じ会話を取り込み、同じ抽出モデルと埋め込みモデルを使って、同じ質問に回答しています。k=10、全データを使用し、各システムの2026-10-11時点での最新実行結果です。
| システム | 検索再現率 | p50検索時間 | メモリトークン数 |
|---|---|---|---|
| fraise 0.3.3 | 0.910 | 0.185 s | 7,453,109 |
| hindsight 0.9.2 | 0.913 | 5.836 s | 1,688,873 |
| everos 1.2.3 | 0.897 | 0.376 s | 10,030,966 |
| letta 0.16.8 | 0.897 | 0.349 s | 226,854 |
| mem0 2.0.18 | 0.886 | 0.576 s | 4,120,078 |
| memos 2.0.33 | 0.865 | 0.307 s | 4,000,552 |
| graphiti 0.30.2 | 0.828 | 0.290 s | 9,861,973 |
| cognee 1.5.3 | 0.790 | 6.273 s | 8,526,019 |
| langmem 0.0.30 | 0.783 | 0.227 s | 1,078,110 |
Fraiseは最高の再現率にわずか0.003届かない水準で、その再現率を達成する唯一のシステムより31倍高速です。 ほぼ同じ証拠を、わずかな時間で見つけられます。トークン数の列は、その再現率を得るための代償です。抽出器(fraise-sdk 0.2.0)は、グラフがすでに保持している情報を参照しながら各メッセージを読み取り、このコンテキストによって再現率が向上しました。
これらの結果は、オープンなベンチマークハーネスであるagent-memory-benchmarksから得られたものです。k ∈ {1, 3, 5, 10}ごと、カテゴリごとの適合率、再現率、F1を測定し、すべての実行にタグを付け、タグから再現できるようにしています。全結果の表は、そのRESULTS.mdにあります。
Fraiseを選ぶ理由
- エージェントが実際に書けるクエリ言語。 FQLには動詞が2つ(
rememberとrecall)あり、それぞれを表現する方法は1つです。自由度が低いほど、モデルが間違える可能性が減り、表現に費やすトークンも少なくなります。 - ハイブリッド検索。 ファクトは全文検索、グラフ検索、および(任意で)ベクトル検索用にインデックス化されます。1つのクエリで、3つすべての検索結果を順位付けします。
- デフォルトで時間を考慮。 最近の記憶が古いものより優先されるため、指定しなくても再現時に新しさが考慮されます。
- 測定されたシステムの中で最速。 LoCoMoでp50 0.185 sを達成し、他のすべてのシステムを上回り、再現率が同等のシステムより31倍高速です。ユーザーを待たせている間も、ステップの途中で記憶と再現を実行できます。
- インフラ不要。 単一のバイナリです。プロビジョニングするデータベースも、別途起動するサービスもありません。
- オープンソース、MITライセンス。
ステータス
v0.3.3. 中核となる処理は一貫して動作し、クリーンなマシンでインストール手順を検証済みです。上記のベンチマーク結果はこのリリースで生成されました。0.4.0(10月下旬)ではスコアラーを変更し、explainとdescribeを追加します。0.5.0(11月)では永続化とforgetに対応します。
現在、エージェントのメモリ構築には適しています。長期的な本番利用にはまだ適していません。
仕組み
Fraise は、次の 3 種類のノードで構成される時間的メモリーグラフとして知識を保存します。
- 事実 — 記憶する内容を、それぞれ 1 つの文で表したもの
- エンティティ — 事実で言及されている人や物
- トピック — 事実の主題
エッジによって事実と言及されているエンティティ、および主題であるトピックを結び付けるため、どちら側からでもクエリを開始できます。recall はテキストと、必要に応じてベクトル類似度によって開始事実を見つけます。トピックやエンティティだけを指定する recall は、それらに分類された事実から開始します。depth:1 または depth:2 を指定すると、指定したトピックやエンティティに属する事実の一致度が、その規模から予測されるより高い場合、その証拠が残りの事実にも伝わります。結果は関連性と新しさでランク付けされ、上位 top 件が返されます。
ランキングはブラックボックスではありません。事実のスコアは、その事実自体の一致度に、規模から予測されるよりも大きな重みを持つアンカーから受け取る値を加えたものです。この「大きさ」を測る基準となる背景率は、クエリが触れたグラフの範囲からクエリごとに推定されるため、調整が必要な関連性の定数はありません。ハイブリッド検索でモデルの全容を確認できます。
1 つの Fraise インスタンスで複数の独立したメモリーグラフ(デフォルトでは 8 個)を保持でき、@N で指定します。ユーザーごと、セッションごと、エージェントごとなど、用途に合わせて使えます。
はじめに
Fraise は単一のバイナリです。データベースの準備も設定も必要ありません。以下のどの方法でも、ポート 9876 で localhost:9876 をリッスンするサーバーが起動します。
Homebrew を使う
brew install fraisehq/tap/fraise
brew services start fraise
サービスはクラッシュ後も復旧し、ログイン時に再起動され(keep_alive)、ログは $(brew --prefix)/var/log/fraise.log に記録されます。設定は $(brew --prefix)/etc/fraise/fraise.config.toml から読み込みます。このファイルは、すべての設定がデフォルト値のままコメントアウトされた状態でインストールされ、アップグレード時にも上書きされません。
Docker を使う
docker run -p 127.0.0.1:9876:9876 ghcr.io/fraisehq/fraise:latest
公開タグは、リリースごとのタグ、最新の安定版を示す latest、main の先端を示す edge、およびサーバーに関係する変更を含むすべてのマージに対して付与される、変更不可能な完全なコミット SHA のタグです。
イメージは SLSA の来歴情報付きでビルドされており、プルせずに検証できます。
gh attestation verify oci://ghcr.io/fraisehq/fraise:latest --repo FraiseHQ/fraise
Go を使う
go install github.com/FraiseHQ/fraise/cmd/server@latest
"$(go env GOPATH)/bin/server"
バイナリは、パッケージパスに続く名前である server としてインストールされます。使いやすい場合は fraise に名前を変更してください。
信頼性を確認するために、これ以上の作業は必要ありません。Go ツールチェーンは、すべてのモジュールのダウンロードを公開チェックサム透明性ログと照合し、結果はご利用のマシンでコンパイルされます。
Linux パッケージ
リリースごとに、systemd ユーザーユニットを含む .deb および .rpm パッケージが公開されます。
VERSION=0.3.0
ARCH=$(uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/')
curl -sSfLO "https://github.com/FraiseHQ/fraise/releases/download/v${VERSION}/fraise_${VERSION}_linux_${ARCH}.deb"
sudo dpkg -i "fraise_${VERSION}_linux_${ARCH}.deb"
systemctl --user enable --now fraise
ログはジャーナルに記録され(journalctl --user -u fraise -f)、ユニットは ~/.config/fraise/fraise.config.toml が存在する場合にこれを読み込みます。すべての設定がコメントアウトされた同梱のデフォルト設定は /etc/fraise/fraise.config.toml にあり、コピーして使用できます。ログインセッションを終了してもエージェントを稼働させるには、ユーザーマネージャーが動作し続けるようにします。loginctl enable-linger $USER を実行してください。システムレベル(共有サーバー)のユニットについては、マネージドサービスとして実行するをご覧ください。
リリースバイナリから
VERSION=0.3.0
OS=$(uname -s | tr '[:upper:]' '[:lower:]') # linux | darwin
ARCH=$(uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/') # amd64 | arm64
ASSET="fraise_${VERSION}_${OS}_${ARCH}.tar.gz"
BASE="https://github.com/FraiseHQ/fraise/releases/download/v${VERSION}"
curl -sSfLO "${BASE}/${ASSET}"
tar xzf "$ASSET"
./fraise
Windows ビルドは、同じ命名規則で .zip として公開されます。
リリースを検証する
リリースには、上記と同じ VERSION および BASE を使い、checksums.txt に対する cosign 署名が付属します。
curl -sSfLO "${BASE}/checksums.txt"
curl -sSfLO "${BASE}/checksums.txt.sigstore.json"
# 1. the bundle proves checksums.txt came from this repo's release workflow
cosign verify-blob \
--bundle checksums.txt.sigstore.json \
--certificate-identity-regexp 'https://github.com/FraiseHQ/fraise/.github/workflows/go.yaml@refs/tags/v.*' \
--certificate-oidc-issuer https://token.actions.githubusercontent.com \
checksums.txt
# 2. checksums.txt proves your archive is the one it covers
sha256sum --ignore-missing -c checksums.txt # macOS: shasum -a 256 --ignore-missing -c
ソースから実行する
git clone https://github.com/FraiseHQ/fraise
cd fraise
make dev
最初の記憶を登録する
curl -X POST localhost:9876/api/v1/q \
-H 'content-type: application/json' \
-d "{\"query\": \"remember 'the parrot is turquoise' topic:color\"}"
curl -X POST localhost:9876/api/v1/q \
-H 'content-type: application/json' \
-d '{"query":"recall parrot"}'
{
"results": {
"count": 1,
"hits": [
{ "value": "the parrot is turquoise", "timestamp": "...", "score": 0.2867 }
]
}
}
エージェントから利用する
MCP
fraise mcp は stdio の MCP サーバーです。稼働中のデーモンへの軽量なブリッジとして動作し、あらゆる MCP クライアントから記憶と想起を行えます。recall と remember の 2 つのツールを公開し、デーモンがデフォルトのアドレスで稼働している場合はフラグを指定する必要はありません。
まずデーモンを起動し(brew services start fraise、または Linux では systemctl --user start fraise)、次に使用するコーディングエージェントにブリッジを登録します。
Claude Code
claude mcp add fraise -- fraise mcp
これにより、現在のプロジェクトに登録されます。すべてのプロジェクトで利用できるようにするには、代わりに --scope user を追加してください。
Codex
codex mcp add fraise -- fraise mcp
または、~/.codex/config.toml に直接記述します。
[mcp_servers.fraise]
command = "fraise"
args = ["mcp"]
OpenCode
プロジェクトのルートにある opencode.json に追加します。
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"fraise": {
"type": "local",
"command": ["fraise", "mcp"]
}
}
}
その他のクライアント
{
"mcpServers": {
"fraise": { "command": "fraise", "args": ["mcp"] }
}
}
ブリッジは MCP 経由で自身の情報を提供します。各ツールには、説明と引数および結果の完全な JSON スキーマが付属します。FQL の形式、具体的な使用例、スコアの意味も含まれるため、クライアントは指示がなくても recall と remember の機能や呼び出し方法を把握できます。一方、ツールの説明だけではポリシー、つまり促されなくてもメモリーを参照する習慣や、何を保存する価値があるかの判断までは伝えられません。それはエージェントがすでに読み込むファイル、つまり Claude Code の CLAUDE.md、Codex と OpenCode の AGENTS.md に記述します。必要な習慣は 2 つだけです。以前の決定や好みに基づく回答をする前にメモリーを参照すること、そして後のセッションでも役立つ事実だけを、検索に役立つトピックとエンティティを添えて、1 回の呼び出しにつき 1 つの自己完結した事実として保存することです。
SDK
Python(sdk/python)— 現時点で唯一の SDK です。
pip install --pre fraise-sdk
from fraise_sdk import FraiseClient
with FraiseClient("http://localhost:9876") as fraise:
fraise.remember("the parrot is turquoise", topics=["color"])
for hit in fraise.recall("parrot", top=5):
print(hit.value, hit.score)
Python SDK は依存関係が少なく、エンベッダーを指定するとベクトル検索をサポートします。埋め込みと完全な API については、README をご覧ください。
TypeScript — まだ利用できません(#179)。提供されるまでは、TypeScript の呼び出し元は fraise mcp を使うか、HTTP エンドポイントに直接接続します。これは 1 つのルートに対する 2 つの動詞なので、クライアントは fetch を使った短いラッパーで実装できます。HTTP API をご覧ください。
Claude Agent SDK
Python SDK には Claude Agent SDK 用のメモリーツールが含まれており、エージェントが保存および参照する内容を判断できるよう、インプロセスの MCP サーバーとして公開されます。
from claude_agent_sdk import ClaudeAgentOptions
from fraise_sdk import FraiseClient
from fraise_sdk.integrations.claude_agents import memory_server, allowed_tools
fraise = FraiseClient("http://localhost:9876")
options = ClaudeAgentOptions(
system_prompt="Remember durable facts the user shares, and recall them when relevant.",
mcp_servers={"fraise_memory": memory_server(fraise)},
allowed_tools=allowed_tools(),
)
Docker で実行できる完全なエージェントは、examples/claude-agent-sdk にあります。
OpenAI Agents SDK
memory_tools(client) は、バインド済みの recall および remember ツールを返します。
from agents import Agent, Runner
from fraise_sdk import FraiseClient
from fraise_sdk.integrations.openai_agents import memory_tools
fraise = FraiseClient("http://localhost:9876")
agent = Agent(
name="Assistant",
instructions="Remember durable facts the user shares, and recall them when relevant.",
tools=memory_tools(fraise),
)
result = Runner.run_sync(agent, "My favourite colour is orange.")
print(result.final_output)
Docker で実行できる完全なエージェントは、examples/openai-agents にあります。
参考資料
コントリビューション
コントリビューションを歓迎します。ビルド、テスト、変更の提出方法については、CONTRIBUTING.md をご覧ください。
行動規範
このプロジェクトは Contributor Covenant に準拠しています。
コミュニティ
Fraise について質問やアイデアがある方、または Fraise を使って何かを構築している方は、Discord にご参加ください。バグ報告や機能リクエストは、見失われないように イシュー に投稿してください。
ライセンス
MIT — LICENSE をご覧ください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。