Kmemo、LLMキャッシュ誤答を抑制
- •Kmemoは意味的類似度の後に10種類のテキストガードを加え、誤ったLLMキャッシュ応答を減らす
- •KotlinライブラリはJDK 17+が必要で、依存関係1つのkmemo-core 1.0.0として提供される
- •ブラインド検証ではニアミスの67%を拒否し、言い換えの88%を保持した
Kmemoは2026年7月25日に公開されたオープンソースのKotlinライブラリで、LLM呼び出し向けのセマンティックキャッシュを提供し、類似度検索とテキストガードで誤ったキャッシュ回答を減らす。著者によると、完全一致キャッシュは「python list reverse」を見た後でも「how do I reverse a list in Python」のようなプロンプトを取り逃がす一方、セマンティックキャッシュはプロンプトを埋め込み、最も近い過去の回答を再利用してAPI呼び出しと遅延を減らす。問題は、「Convert 100 USD to EUR」と「Convert 250 USD to EUR」がコサイン類似度で約0.99になり得るため、しきい値だけのキャッシュでは見えるエラーなしに誤った為替換算を返す可能性がある点だ。
Kmemoは類似度を最初のフィルターとして使い、残った候補を10種類のガードの連鎖に通して、プロンプト間の具体的な違いを探す。ガードは入れ替わった数値、単位の不一致、異なるエンティティ、異なる時間参照、否定、反対語の反転、比較の逆転、要求された回答種類の違いを確認する。ライブラリは不確かな一致を拒否する設定を標準とする。誤った拒否のコストはAPI呼び出し1回の追加で済むが、誤った受理は誤答を返すからだ。
KmemoはJDK 17+を必要とし、`io.github.nacode-studios:kmemo-core:1.0.0`として配布される。`kmemo-core`の依存関係は`kotlinx-coroutines-core`だけで、埋め込みプロバイダーは同梱せず、ユーザーが渡す任意の`String`から`FloatArray`への埋め込み器を受け入れる。`getOrPut`は検索と書き込みの両方でプロンプトを1回だけ埋め込み、同じ内容を要求する同時呼び出しはまとめられ、最初の呼び出しが計算し、残りはその回答を待つ。
ライブラリは、検索がなぜ失敗したかを知らなければ4%のヒット率を調整しにくいとして、`BELOW_THRESHOLD`や`REJECTED_BY_GUARD`などの理由付きでミスを報告する。読み取り専用の`cache.explain(prompt)`呼び出しは、すべての候補と各ガードの判定を表示する。Kmemoは、モデル、temperature、システムプロンプト、テナント、言語など、正しい回答を変える値のスコープもサポートし、例として`gpt-4o|t=0.0|v3`が挙げられている。
Kmemoは`MatchGuards.standard()`、`MatchGuards.strict()`、`MatchGuards.none()`を提供する。strictモードはヒット率と引き換えに余裕を取り、noneは類似度だけのベースラインとなる。ガードは英語以外でも動作し、イタリア語、スペイン語、ドイツ語、フランス語向けのキュレーション済みパックが、ローカライズされたニアミスコーパスで測定されている。子犬と成犬の駆虫、エタノールとメタノールの沸点のように世界知識が必要なケースでは、任意の`Verifier`がしきい値とガード通過後に安価なモデル呼び出しを行える。タイムアウトやエラーが起きた場合、候補は拒否される。
記事によると、Kmemoのガードは3つのラベル付きコーパスでテストされ、ブラインド検証分割がすべてのビルドでCI回帰ゲートとして使われる。ブラインド分割では、ニアミスの67%が拒否され、言い換えの88%が保持された。著者は、残るニアミスの大半はVerifierが扱う世界知識ケースだとし、再現用に`./gradlew :kmemo-core:test --tests 'CorpusTest'`を示している。
Kmemoには、別の設定からしきい値をコピーするのではなく、各埋め込みモデルに適したしきい値を測定する`ThresholdCalibrator`が含まれる。ストレージにはインメモリ、RediSearch KNN付きRedis、pgvector付きPostgres、任意で有効化するプロセス内HNSWストアを選べる。ライブラリはさらに、`maxAttempts = 4`の再試行付き埋め込み器、`EmbedFailurePolicy.FALL_BACK_TO_COMPUTE`、`negativeCacheSize = 10_000`、FAQウォーミング、イベントストリーム監視、`kmemo-micrometer`、`Slf4jCacheListener`、Spring Bootスターター、Spring AI `Advisor`、LangChain4j `ChatModel`ラッパー、Ktorサーバープラグイン、APIキー不要の例、Apache-2.0ライセンス、`1.0` SemVer安定性を備える。