私は最近、任意のLLM APIの上に軽量でモジュール化されたラッパーとして機能するPythonライブラリCRISP(Compressed Retrieval and Intelligent Semantic Processing)を構築しました。これにより、会議の議事録のような巨大な会話履歴や複雑なデータセットを処理できますが、APIプロバイダーに送信するのは最もセマンティック密度の高い文脈だけで済みます。
目標はシンプルです。LLMパイプラインにおける、トークンあたりの情報量(情報/トークン比)を最大化する。
問題
プロンプトには、文脈の肥大化(冗長で、繰り返され、情報量の少ない情報の重複)が起こりがちです。数万〜数十万トークン規模の大規模な利用では、これによりコスト、レイテンシ、ノイズが増大します。
最適化には通常、次のような高度で時間のかかる解決策が必要になります:
- 複雑なRAGパイプライン
- カスタム埋め込み + ベクトルデータベースのセットアップ
- マルチステージの前処理システム
しかし、これらにはトレードオフがあります:
- 重いセットアップとインフラ面のオーバーヘッド
- 既存のワークフローへの統合が難しい
- 多くの開発者にとって「本当に」プラグアンドプレイではない
その結果、開発者はどちらかを選びがちです:
- スタックを過剰に作り込む
- あるいは非効率なプロンプト詰め込みに妥協する
そして明確なギャップがあります。それは:
- 素朴なプロンプト投入よりも大幅に効率的
- それでもシンプルで、軽量で、プラグアンドプレイ
CRISPはこのギャップを埋めるために設計されています。
CRISPの主な機能
- 手動セットアップ不要:依存関係の管理を自動化—ローカルのLLM実行環境は不要
- 決定的な処理:意味抽出にTextRankを使用し、結果の一貫性を保証
- 大幅な圧縮:通常、元の履歴から最終プロンプトまでで95〜99%の削減を達成
- プライバシー重視の設計:プレーンテキストの保存と分離されたベクトルデータベースによるローカルファースト構成
- APIに非依存:任意のプロバイダー(Groq、OpenAI、Anthropic、Geminiなど)向けに最適化された高密度RAGプロンプトを生成
アーキテクチャ概要
CRISPは、決定的なコンポーネントからなるモジュール式のパイプラインとして構築されています:
-
セマンティックメモリ:各ターンを、ログ用の
.txtファイルに書き込む前に<10%まで要約 - 埋め込み(Embedder):高速な384次元のセマンティックマッチングのためにall-MiniLM-L6-v2を使用
- リトリーバ(Retriever):ラッパーインスタンスごとに永続的なChromaDBコレクションを管理
- コンプレッサ(Compressor):TextRankによる抽出、冗長性フィルタリング、フィラーワード削除、ルールベースのストリッピングを行うマルチステージエンジン
実世界のユースケース
主なテストケースは、20人の話者を含む、散らかった反復のある30,000文字以上の会議議事録を処理することでした。結果は以下の通りです:
- 入力履歴:~30,672文字(「uh」「um」「so basically」などで埋め尽くされている)
- CRISP処理:価格に関する事実のセマンティック検索、重複排除、ストリッピング
- 出力コンテキスト:422文字
- ネット削減:98.6%
- 最終LLM応答:幻覚なしで、3つの価格ティアと割引判断を正確に抽出
このユースケースの完全なデモはCRISPリポジトリで利用できます:
https://github.com/Antiproton2023/crisp
インストール
CRISPは現在ローカルリポジトリとして提供されているため、クローンして依存関係をインストールできます:
# リポジトリをクローン
git clone https://github.com/Antiproton2023/crisp.git
cd crisp
# 必要な依存関係をインストール
pip install -r requirements.txt
あるいは、CRISPは初回のimport時にchromadbやsummaのような中核依存関係を自動でインストールします。
パイプラインの各パーツはモジュール式なので、必要に合わせてカスタマイズできます。有用なものを作った場合は、GitHubでプロジェクトへの貢献を検討してください。




