kevy
kevy 6.3.0 · AI アプリケーション

データと、その見つけ方を
ひとつのストアに

RAG やエージェントの記憶は、たいてい 3 つのシステムを意味します。キャッシュ、ベクトルデータベース、検索インデックス——同じ事実が 3 つにあり、互いにずれていきます。kevy は、ベクトル KNN、BM25 全文検索、変更フィードをエンジンに持っています。すでに書いたキーの上で、そのまま動きます。

なぜ向いているのか

RAG のスタックで高くつくのは、検索ではありません。真実の 3 つのコピーを、歩調を合わせて保つことです。文書を書いたら、それを埋め込み、索引に入れ、キャッシュを無効化することを、忘れずにやらなければなりません。そのどれもが、忘れうる場所です。

kevy では、インデックスはパイプラインではなく宣言です。どのキーの、どのフィールドかをエンジンに伝えれば、書き込みパスがインデックスを最新に保ちます。あとから実行するものはなく、遅れていくものもありません。

kevy がやらないのは、埋め込みを作ることです。エンジンにモデルはなく、今後も持ちません。推論はストレージエンジンの仕事ではありませんし、そうしてしまえば、ベクトルの形式が私たちのリリース周期に縛られます。ベクトルはあなたが持ち込み、kevy がそれを保存し、索引を張り、検索します。

キーを、意味で検索する

すでに書いているキーのフィールドに対する KNN。一度宣言すれば、あとは書き込みパスが最新に保ちます。同期するものはありません。

インデックスを一度だけ宣言する
IDX.CREATE idx:sem ON PREFIX doc: FIELD vec TYPE vector KIND ann  DIM 768 DISTANCE cosine M 16 EF 200
-> OK

エンジンが既存のキーを埋め戻します。その間の問い合わせには INDEXBUILDING を返します。

文書は、いままでどおり書く
HSET doc:4410 title "Ada on pipelining" vec "<768 f32, little-endian>"
近い順に 10 件
IDX.QUERY idx:sem KNN "<query vector>" LIMIT 10
-> 1) doc:4410
   2) doc:9982

コストと制約 インデックスは HNSW で、近似です。再現率は保証ではなく、調整のためのパラメータ(EF)です。最初の構築は、合致するキーに対して O(N) です——行き当たるのではなく、計画してください。そして埋め込みモデルはありません。ベクトルは、あなたが持ち込みます。調整のつまみはベクトルのガイドにあります。

全文検索、そして両方のランキングを融合する

同じキーに対する BM25。そしてテキストのランキングとベクトルのランキングを、1 つのコマンドで融合するハイブリッドクエリ。

同じキーに、テキストのインデックスを張る
IDX.CREATE idx:ft ON PREFIX doc: FIELD title TYPE str KIND text
-> OK
マッチを、BM25 の順位つきで
IDX.QUERY idx:ft MATCH "pipelining"
-> 1) 1) "doc:1"
      2) "0.2877"          # the BM25 score
ハイブリッド——両方のランキングを融合する(RRF)
IDX.QUERY HYBRID idx:ft MATCH "pipelining" idx:sem KNN "<vector>"  LIMIT 20 RRFK 60

コストと制約 インデックスの代金は、合致するキーへの書き込みのたびに支払います——読み取り主体の検索には正しい取引で、毎秒何千回も書き直すキーには間違った取引です。トークン化(CJK を含みます)と、BM25 がどこで止まるのかは、テキストのガイドにあります。

エージェントの記憶を、遅れさせない

別のプロセスから、すべての書き込みを追いかけます——スケジュールではなく変更のたびに埋め込み、止めたところから再開します。

フィードを有効にする
# kevy.toml
[feed]
enabled = true
自分のカーソルを確かめる
FEED.SHARDS                 -> (integer) 16
FEED.TAIL 0                 -> 1) (integer) 1     # generation
                               2) (integer) 1     # offset
読み、処理し、再開する
FEED.READ 0 1 0 COUNT 2     -> the writes themselves, replayable

コストと制約 フィードはシャード単位です。FEED.SHARDS が、あなたの持つカーソルの数を教え、コンシューマはシャードごとにオフセットを 1 つ追跡します。既定ではオフになっており、[feed] をオンにすることが、書き込みパスの帳簿づけの代金です。再起動をまたぐ再開は、変更フィードのガイドが扱っています。

これを読んでいるのがエージェントなら

llms-full.txt は、1 回の取得で済みます。全コマンドと、その本当のコストと Redis との本当の差異、そしてすべてのガイドの全文が入っています。エンジン自身のコマンド表から生成しているので、サーバーの実際の挙動とずれることはありません。

次に

ガイド

ベクトル検索

HNSW、調整のつまみ、そしてここでの「近似」が実際に意味するもの。

読む →

ガイド

全文検索

BM25、CJK を含むトークン化、そして、どこまでで止まるのか。

読む →

ガイド

変更フィード

別のプロセスから、すべての書き込みを追いかける。再開可能なオフセットつき。

読む →