Tag

#postgres

3 articles

Search & Retrieval13 min read

pgvectorで実装するバイナリ量子化 — 768次元を96バイトに圧縮する2段階検索

fp32の768次元埋め込みは1本3KB。コーパスが伸びるとメモリにもインデックスにも載らなくなります。Marianは符号1bit量子化(768次元→96バイト、32分の1)とHamming距離のHNSWインデックスで粗探索し、fp32コサインでリランクする2段階検索をpgvectorだけで実装しました。量子化の式、POPCOUNTテーブル、PostgreSQLのRPC、既存埋め込みからのゼロコストバックフィルまで、実装をそのまま解説します。

Search & Retrieval12 min read

RAPTOR要約ツリーの実装 — バイナリ重心クラスタリングとcollapsed-tree検索

チャンク単位のRAGは「このドキュメント群は全体として何を言っているか」という広い質問に弱い。MarianはRAPTOR(Recursive Abstractive Processing for Tree-Organized Retrieval)方式の要約ツリーを実装し、リーフ(チャンク)から要約ノードを再帰的に積み上げます。本記事では、葉数加重のバイナリ重心、貪欲最近傍クラスタリング(branching=4)、全階層を一括スコアリングするcollapsed-tree検索、そしてmarian_file_tree_nodesテーブルへの永続化を解説します。

Engineering12 min read

Postgresだけで作るジョブキュー — リース、冪等キー、指数バックオフの実装

埋め込み生成や音声転写のような長時間ジョブをWebリクエストの中で実行はできません。MarianはRedisもSQSも足さず、Postgresのテーブル1枚でジョブキューを実装しました。状態機械(queued→running→retrying→succeeded/dead)、30秒リースによるクラッシュ回復、部分ユニークインデックスによる冪等性、1s→5分capの指数バックオフまで、スキーマと実装をそのまま解説します。