KiokuBench
KiokuBench は、記憶のシステムが何を覚え、何を置き換え、何を忘れたかを、記憶そのものを正解の事実の台帳と突き合わせて測るベンチマークです。Kioku は日本語の「記憶」です。
LoCoMo や LongMemEval のように読み出しの正答率だけを見ると、何でも保存するシステムの点が上がってしまいます。KiokuBench では、古い版が残っていないか、忘れる依頼の内容が残っていないか、ノイズや言語や大きさはどうかという記憶の中身も確かめます。
sepiace は2026年10月14日時点、ほかは2026年9月30日時点の結果です。Supermemory は2026年9月27日から28日にかけて API で測りました。オープンソースの Mem0 は9月29日に、ByteRover は9月30日に、手元で動かして測りました。
同じデータで、Claude Code の純正メモリと Claude Code + sepiace も比べました
KiokuBench Index
KiokuBench Index は、8つの指標を4つの柱にまとめ、1つの値にしたものです。0から100で、大きいほど良い値です。下の表は、会話をそのまま渡す経路での10人の合計から計算しました。緑で塗った値が、同じ経路のなかでいちばん良い値です。
- sepiace96.1sepiaceIndex: 96.1覚える: 98.7置き換える: 98.0忘れる: 100.0整える: 88.3
- Supermemory58.9SupermemoryIndex: 58.9覚える: 95.3置き換える: 95.0忘れる: 22.0整える: 60.5
- ByteRover39.2ByteRoverIndex: 39.2覚える: 72.3置き換える: 19.0忘れる: 62.0整える: 27.7
- Mem08.5Mem0Index: 8.5覚える: 96.3置き換える: 0.0忘れる: 0.0整える: 55.0
- 全部保存8.0全部保存Index: 8.0覚える: 99.0置き換える: 0.0忘れる: 0.0整える: 41.7
棒にカーソルを合わせるか選ぶと、4つの柱の値が出ます。灰色の棒は、参考として載せた全部保存の基準です。
| システム | Index | 覚える | 置き換える | 忘れる | 整える |
|---|---|---|---|---|---|
| 会話そのまま | |||||
| sepiace | 96.1 | 98.7 | 98.0 | 100.0 | 88.3 |
| Supermemory | 58.9 | 95.3 | 95.0 | 22.0 | 60.5 |
| Mem0 | 8.5 | 96.3 | 0.0 | 0.0 | 55.0 |
| ByteRover | 39.2 | 72.3 | 19.0 | 62.0 | 27.7 |
| 基準 | |||||
| 全部保存 | 8.0 | 99.0 | 0.0 | 0.0 | 41.7 |
計算のしかた
8つの指標を、0から1の大きいほど良い値にそろえてから、4つの柱にまとめます。
| 柱 | 中身 |
|---|---|
| 覚える | 再現率、変更の反映、確認の質問の平均 |
| 置き換える | 1 − 古い版が残る |
| 忘れる | 1 − 忘却の違反 |
| 整える | 1 − ノイズ率、1 − 言語の不一致、1 ÷ 圧縮の平均。圧縮が1を下回るときは1にします。 |
0.01を下回る柱は0.01にしてから、4つの柱の幾何平均を100倍します。
幾何平均にしたのは、柱を1つでも落とすと大きく下がるようにするためです。覚えるだけで忘れないシステムも、忘れるだけで覚えないシステムも、記憶としては使えません。下限の0.01は、柱が1つ0になっただけで、ほかの柱の差まで見えなくなるのを防ぎます。
8つの指標の値は、下の結果の表にあります。
結果
10人の合計です。緑で塗った値が、同じ経路のなかで良いほうです。
| 経路 | 再現率 | 変更の 反映 | 古い版が 残る | 忘却の 違反 | ノイズ率 | 言語の 不一致 | 確認の 質問 | 圧縮 |
|---|---|---|---|---|---|---|---|---|
| 会話そのまま | ||||||||
| sepiace | 99% | 100% | 2% | 0% | 12% | 0% | 97% | 1.30 |
| Supermemory | 98% | 100% | 5% | 78% | 20% | 42% | 88% | 2.30 |
| Mem0 | 100% | 100% | 100% | 100% | 47% | 9% | 89% | 4.78 |
| ByteRover | 85% | 95% | 81% | 38% | 70% | 49% | 37% | 49.66 |
| 依頼文 | ||||||||
| sepiace | 99% | 99% | 13% | 0% | 0% | 0% | 96% | 1.03 |
| Supermemory*1 | 83% | 78% | 35% | 65% | 18% | 42% | 82% | 2.06 |
| Supermemory*2 | 90% | 83% | 46% | 2% | 8% | 42% | 77% | 1.80 |
| Mem0*1 | 100% | 99% | 100% | 100% | 2% | 1% | 88% | 1.79 |
| ByteRover*1 | 93% | 97% | 83% | 25% | 40% | 45% | 34% | 27.92 |
| 変更の合図あり | ||||||||
| sepiace | 99% | 99% | 25% | 0% | 0% | 0% | 94% | 1.15 |
| Supermemory*1 | 92% | 90% | 11% | 40% | 12% | 44% | 89% | 1.95 |
| Mem0*1 | 100% | 100% | 100% | 100% | 2% | 2% | 91% | 1.80 |
| ByteRover*1 | 96% | 99% | 91% | 20% | 38% | 39% | 33% | 28.22 |
| 基準 | ||||||||
| 全部保存 | 100% | 100% | 100% | 100% | 83% | 0% | 97% | 12.30 |
- *1 振り分けなし。忘れる依頼もほかの依頼と同じように渡し、システム自身に判断させます。sepiace と同じ条件です。
- *2 振り分けあり。忘れる依頼だけを Supermemory の forget-matching に渡します。
全部保存の基準は、会話の発言をすべてそのまま残したものです。確認の質問では、埋め込みで近い発言から順に文脈の上限まで渡します。
言語ごとの結果
| 経路 | 再現率 | 変更の 反映 | 古い版が 残る | 忘却の 違反 | ノイズ率 | 言語の 不一致 | 確認の 質問 |
|---|---|---|---|---|---|---|---|
| 会話そのまま(英語) | |||||||
| sepiace | 100% | 100% | 2% | 0% | 9% | 0% | 98% |
| Supermemory | 100% | 100% | 4% | 70% | 15% | 0% | 89% |
| Mem0 | 100% | 100% | 100% | 100% | 44% | 0% | 90% |
| ByteRover | 83% | 96% | 74% | 35% | 69% | 0% | 61% |
| 会話そのまま(日本語) | |||||||
| sepiace | 98% | 100% | 2% | 0% | 15% | 0% | 96% |
| Supermemory | 97% | 100% | 6% | 85% | 25% | 79% | 87% |
| Mem0 | 100% | 100% | 100% | 100% | 50% | 17% | 87% |
| ByteRover | 87% | 94% | 88% | 40% | 70% | 87% | 13% |
| 依頼文(英語) | |||||||
| sepiace | 99% | 98% | 14% | 0% | 0% | 0% | 94% |
| Supermemory*1 | 68% | 58% | 30% | 60% | 30% | 0% | 86% |
| Mem0*1 | 99% | 98% | 100% | 100% | 2% | 0% | 88% |
| ByteRover*1 | 97% | 100% | 82% | 20% | 36% | 0% | 54% |
| 依頼文(日本語) | |||||||
| sepiace | 100% | 100% | 12% | 0% | 1% | 0% | 97% |
| Supermemory*1 | 98% | 98% | 40% | 70% | 7% | 81% | 77% |
| Mem0*1 | 100% | 100% | 100% | 100% | 3% | 3% | 88% |
| ByteRover*1 | 90% | 94% | 84% | 30% | 43% | 80% | 14% |
| 変更の合図あり(英語) | |||||||
| sepiace | 99% | 100% | 10% | 0% | 0% | 0% | 95% |
| Supermemory*1 | 87% | 84% | 2% | 15% | 20% | 0% | 95% |
| Mem0*1 | 100% | 100% | 100% | 100% | 0% | 0% | 91% |
| ByteRover*1 | 94% | 100% | 90% | 10% | 35% | 0% | 51% |
| 変更の合図あり(日本語) | |||||||
| sepiace | 99% | 98% | 40% | 0% | 1% | 0% | 93% |
| Supermemory*1 | 98% | 96% | 20% | 65% | 5% | 84% | 83% |
| Mem0*1 | 100% | 100% | 100% | 100% | 3% | 5% | 92% |
| ByteRover*1 | 97% | 98% | 92% | 30% | 41% | 77% | 15% |
読み取れること
- 3つの経路のすべてで、sepiace は忘却の違反、ノイズ率、言語の不一致がもっとも低く、確認の質問がもっとも高くなりました。例外は変更の合図がある経路の古い版が残る割合で、Supermemory のほうが低くなりました。
- その経路で sepiace の古い版が残る割合は25%で、日本語では40%でした。前回の測定では、22件のうち17件が一部の項目だけが変わった事実でした。たとえば「毎週火曜日の18時に市民プールで泳いでいる」に対して「水泳の時間を18時から18時30分へ変更した」と伝えた場合です。新しい文は時刻しか言っていないので、古い文を消すと市民プールが失われます。sepiace は記憶の本文を書き換えないので、両方を残します。
- Mem0 は、古い版も忘れる依頼の内容もすべて残し、どちらもすべての経路で100%でした。これは Mem0 2.2.1 の設計どおりです。add は新しい記憶を足すだけで、既存の記憶を書き換えたり消したりしません。何も捨てないので、再現率は100%近くになります。忘れる依頼そのものも、忘れるはずの内容を書いた新しい記憶になりました。
- ByteRover は、Mem0 と違って記憶を書き換えも消しもしますが、忘却の違反は20%から38%残りました。変わった事実の81%から91%では、ファイルの変更の記録に古い版が残りました。日本語の会話をほとんど英語で記憶し、単語で探す検索のため、日本語の確認の質問の多くで何も見つかりませんでした。
- Supermemory は、日本語の入力の約8割を英語の記憶にしていました。
- 同じ LLM(openai/gpt-6-luna)での取り込みの費用は、ByteRover が LLM の呼び出し9,034回で $8.11 でした。記憶の依頼1回あたり、約6.6回呼んでいます。Mem0 は1,377回で $0.36 でした。
指標
| 指標 | 意味 | 良い向き |
|---|---|---|
| 再現率 | 最後の時点で正しい事実のうち、記憶に残っている割合です。 | 高い |
| 変更の反映 | 変わった事実のうち、新しい版が記憶にある割合です。 | 高い |
| 古い版が残る | 変わった事実のうち、古い版も記憶に残っている割合です。 | 低い |
| 忘却の違反 | 忘れてと頼まれた内容のうち、まだ記憶に残っている割合です。 | 低い |
| ノイズ率 | 記憶の文のうち、台帳のどの事実にも当たらない割合です。 | 低い |
| 言語の不一致 | 記憶の文のうち、会話と違う言語で書かれた割合です。 | 低い |
| 確認の質問 | 記憶から約1,000トークンの文脈を作り、回答役が確認の質問に正しく答えた割合です。 | 高い |
| 圧縮 | 記憶の文字数を台帳の事実の文字数で割った値です。1に近いほど無駄がありません。 | 1に近い |
経路
取り込み方は3つあります。
- 会話そのまま。会話をそのまま渡し、何を覚えるかは記憶のシステムに任せます。sepiace には発言を1つずつ、Supermemory にはセッションを1つの文書にして、Mem0 にはセッションの発言の並びを1回の add で、ByteRover にはセッションを1回の curate で渡します。
- 依頼文。台帳から作った「覚えて」と「忘れて」の依頼を渡します。変わった事実は、変わったあとの事実を「覚えて」と渡すだけで、変わったことは伝えません。
- 変更の合図あり。依頼文と同じですが、変更の依頼で A から B に変わったと伝えます。
依頼文の経路では、忘れる依頼もほかの依頼と同じように渡し、どうするかは各システム自身に判断させます。すべてのシステムで同じ条件です。Supermemory では、忘れる依頼だけを forget-matching に渡し、操作の種類をこちらで教える渡し方も試しました。
データセット v0.1
- 人物は10人で、英語が5人、日本語が5人です。
- 1人あたり40件の事実の台帳があり、2人は39件です。台帳から作った30セッションの会話と、事実1件につき1問の確認の質問もあります。
- 事実のうち10件は途中で変わり、4件は途中で忘れてと頼まれます。
- 台帳、会話、確認の質問は、OpenRouter の openai/gpt-6-luna で生成しました。
- 採点役のモデルで、会話が台帳どおりかを確かめました。台帳にない事実が1件、事実の一部だけを忘れる依頼が2件ありました。人の目での確認はまだしていません。
条件
- 採点役と回答役は、どちらも OpenRouter の openai/gpt-6-luna です。
- sepiace は、2026年10月14日時点のコードで測りました。
- Supermemory の取り込みは、dreaming を instant にしました。既定の dynamic は取り込みが途切れてから約10分後にまとめて記憶を作る方式で、会話のたびに待つと1人あたり5時間を超えるためです。
- Supermemory の forget-matching は、既定の設定のまま使いました。
- Supermemory の検索は、Supermemory 自身が MemoryBench で使う設定にしました。hybrid で、しきい値は0.3、件数は30件です。
- Mem0 は、オープンソースの mem0ai 2.2.1 を手元で動かしました。中の LLM は openai/gpt-6-luna、埋め込みは sepiace と同じ BAAI/bge-m3、記憶の置き場所は手元の Qdrant です。追加の依存を入れない既定のインストールなので、検索は埋め込みだけです。検索は30件で、しきい値は Mem0 の既定の0.1です。
- ByteRover は、byterover-cli 3.16.1(brv、Elastic License 2.0)を、ByteRover のアカウント、クラウドの同期、ホストされた LLM を使わずに手元で動かしました。中の LLM は openai/gpt-6-luna です。curate には日付を渡す引数がないので、各入力の先頭に日付を書きました。記憶の整理(dream)は、取り込みのあとに1人1回だけ動かしました。確認の質問は brv query を使い、ほかのシステムと同じ文脈の量に収めました。
限界
- KiokuBench は、sepiace を作っているチームが設計し、測りました。頼まれたら忘れることや、会話の言語のまま残すことのように、sepiace が大事にしている振る舞いを指標にしているので、その前提で読んでください。ほかのシステムは、条件の節に書いた設定で動かしました。
- 10人を1回だけ測った結果です。判定が揺れるので、同じコードでも測るたびに数件ずつ変わります。
- データセットは小さく、人の目での確認もまだです。大きな版の v1 を作る予定です。