serviette は、指定したフォルダ内の文書をPathwayのライブデータフレームワークで監視し、常に内容と同期した状態でRAGサーバーを構築するノーコードツールです。chroma・qdrant・pgvectorなど8種類のベクトルDBに対応し、設定はYAMLファイル1つで済みます。文書を編集・追加・削除すると、再インデックスの手間なく数秒で回答に反映されます。
内部は2つのプロセスに分かれます。インデクサー(serviette.indexer)はPathwayのライブ入力コネクタで文書フォルダを監視します。変更があった文書だけを再解析・再埋め込みし、ベクトルDBに書き込みます。ワーカー数(indexer.workers)を増やすと、serviette/indexer/main.pyがpathway spawnで子プロセスを複製します。SIGTERMなどの信号は子プロセス全体へ転送され、孤立プロセスを防ぎます。サーバー(serviette.server)はFastAPIで/api/v1/ragと/api/v1/retrieveを公開します。serviette/server/accessors/以下には8種類のバックエンド向けアクセサがあり、chroma・duckdb・milvusなど複数のベクトルDBに対応します。検索で得た抜粋はLLMに渡され、出典付きの回答が生成されます。フロントエンドはserviette/frontend/static/index.html内の単一ページで、APIへ処理を委ねるだけの薄い構成です。
- STEP 01
pip install "serviette[local]" を実行すると、PyTorch CPU版(約0.8GB)がダウンロードされ、pip 23.1未満だと依存解決に時間がかかります。
- STEP 02
PATHWAY_LICENSE_KEYとOPENAI_API_KEYを設定して serviette demo --embedder openai を実行すると、同梱のダミー文書がインデックスされログが流れます。
- STEP 03
http://localhost:8989 を開くとチャットUIが表示され、質問すると出典付きの回答が返ってきます。
- STEP 04
別ターミナルでserviette-demo/docs内の文書を編集すると、数秒後に同じ質問への回答が新しい内容に変わります。
- STEP 05
自分の文書を使う場合は serviette wizard でYAML設定を対話的に作成し、serviette up --config で起動します。
- STEP 06
benchmarks/realtime-data-indexing で docker compose up すると、Qdrant・インデクサー・サーバーが起動し、results配下に100MBから50GBまでの計測結果が残ります。
ローカルで動くチャットUIとREST API(/api/v1/rag、/api/v1/retrieve)が手に入り、文書の出典付きで回答します。文書を編集・追加・削除すると、再インデックスの手間なく数秒で回答が更新されます。
現時点では一問一答のみで、会話履歴・ユーザー管理・ホスティング機能はまだ実装されていないとREADMEに明記されています。
ローカル埋め込みでも回答文の生成には外部LLM API(例えばOpenAI)の利用が前提で、質問ごとに課金されます。
pip 23.1未満だと依存解決に時間がかかるとREADMEが警告しており、環境構築前にpipのアップグレードが必須です。
pyproject.tomlにはprotobufやgoogle-api-coreなど多数のバージョン上限固定があり、依存関係はやや複雑です。
社内ドキュメントに対して常時最新のRAGを低コストで試したい技術者やチームに向いています。8種類のベクトルDB向け統合テスト、50GBまでのインデックス性能計測、FRAMESベンチマークによる検索精度評価がリポジトリ内に揃っているため、実際に動かさなくても挙動の判断材料は十分にあります。ただし会話履歴などの機能はまだ無く、一問一答のQAツールとして使う前提が必要です。