distilabel を使用した Argilla SDK チャットボット – エンドツーエンドチュートリアル

TL;DR

私たちは、distilabel を使用して合成 Q&A トリプルを生成し、Matryoshka ロスで BGE‑base 埋め込みモデルをファインチューニングし、軽量 lancedb ベクトルストアに埋め込みを保存し、Gradio を介して Hugging Face Spaces にチャットインターフェースをデプロイすることで、Argilla 2.0 用のドメイン固有 RAG チャットボットを構築しました。


distilabel を使用した合成トレーニングデータの生成

Key outcome: Argilla ドキュメントに対する現実的なクエリとハードネガティブを捉えるトリプルデータセット(anchor, positive, negative)。

  • パイプラインは、Hub データセット plaguss/argilla_sdk_docs_raw_unstructured から生のドキュメントチャンクをロードし、列 chunks の名前を anchor に変更することから始まります。
  • GenerateSentencePair(トリプレットモード)は、LLM meta-llama/Meta-Llama-3-70B-Instruct を使用して各チャンクに対し positive クエリを作成し、無関係だが文字列的に類似した negative クエリを生成します。
  • カスタム MultipleQueries タスクは、各 positive クエリを 3 つの追加バリエーションに展開し、データセットサイズを 4 倍にします。
  • MergeColumnsExpandColumns は、元のクエリと生成されたクエリを単一の positive 列に統合し、クエリ‑anchor‑negative のトリプルごとに 1 行を生成します。

完全なパイプラインは pipeline_docs_queries.py で定義され、最終データセットは plaguss/argilla_sdk_docs_queries にプッシュされます。


Argilla におけるデータセットの探索とキュレーション

Key outcome: (1) 生のドキュメントチャンク、(2) 埋め込みファインチューニング用トリプル、(3) チャットボットインタラクションログの 3 つの Argilla データセット。

  • Documentation chunks – フィールド filenamechunk、人間による検証用の二値ラベル good_chunk を含みます。
  • Embedding triples – フィールド anchor, positive, negative と、二値の関連性ラベル is_positive_relevantis_negative_irrelevant を持ちます。
  • Chatbot logs – フィールド instructionresponse、メタデータ conv_idturn を含み、ラベルは正確性とガードレール違反を評価し、自由形式の feedback フィールドでユーザーコメントを取得します。

すべてのデータセットは Argilla Python クライアント(rg.Argilla)を通じて作成され、Argilla UI で直接確認できます。


埋め込みモデルのファインチューニング

Key outcome: Argilla 固有の検索でベースライン BGE‑base を上回るカスタムモデル plaguss/bge-base-argilla-sdk-matryoshka

  1. Dataset preparation – トリプルデータセットをロードし、列 anchor, positive, negative を保持し、ユニークな id を追加し、訓練/テストを 90 %/10 % に分割します。
  2. Baseline modelBAAI/bge-base-en-v1.5 をベースにし、モデルカードのメタデータを設定します。
  3. Loss functionTripletLossMatryoshkaLoss(次元 [768, 512, 256, 128, 64])を組み合わせます。
  4. Training arguments – Apple M2 Pro 用にバッチサイズを調整し、コサインスケジューラを使用し、メトリックとして eval_dim_512_cosine_ndcg@10 を選択します。
  5. TrainingSentenceTransformerTrainer を実行します。最良のチェックポイントは自動的に Hub にプッシュされます。

得られたモデルは SentenceTransformer でロードするか、sentence-transformers レジストリ経由で使用できます。


lancedb を使用したベクトルデータベースの構築

Key outcome: 各合成クエリを対応するドキュメントチャンクに結びつける、ポータブルでサーバーレスなベクトルストア。

  • lancedb.connect("./lancedb") はローカルの SQLite ライクなデータベースを作成します。
  • LanceModel を使用して Docs スキーマ(query, text, vector)を定義します。
  • クエリデータセットの各バッチに対し、ファインチューニング済みモデルで埋め込みを生成し、テーブルに挿入します。
  • 検索例 – "How can I get the current user?" に対するコサイン類似度検索は、最も関連性の高いドキュメントチャンクを返します。
  • データベース全体のディレクトリをアーカイブ(lancedb.tar.gz)し、データセットと共に Hub にアップロードすることで、再現可能なダウンロードが可能になります。

Gradio チャットインターフェースとデプロイ

Key outcome: Argilla SDK の質問に RAG を用いて回答するインタラクティブなウェブ UI(https://huggingface.co/spaces/plaguss/argilla-sdk-chatbot-space)。

  • Database class – lancedb アーカイブの遅延ダウンロードを処理し、テーブルを開き、指定クエリに対して最大 4 つの重複除去されたチャンクを返す retrieve_doc_chunks を提供します。
  • Prompt engineering – システムプロンプトにより、LLM が提供されたコンテキストからのみ回答するよう強制します。ユーザープロンプトテンプレート(ARGILLA_BOT_TEMPLATE)は取得したチャンクを挿入します。
  • LLM inferenceInferenceClient を介して Hugging Face 推論エンドポイント(デフォルト: meta-llama/Meta-Llama-3-70B-Instruct)を呼び出します。レスポンスストリームは Gradio に返されます。
  • Conversation logging – 各ターンの後、インタラクションは Argilla の chatbot‑log データセットに記録され、継続的な評価と将来のファインチューニングを可能にします。
  • Deploymentrequirements.txt と Hugging Face API トークンをシークレットとして追加することで、Spaces 上でアプリが自動的にビルドされます。

今後の展望と次のステップ

Takeaway: このエンドツーエンドのワークフローは、コード中心のドキュメントリポジトリを最小限の手動ラベリングで高品質なドメイン固有 RAG チャットボットに変換できることを示しています。

  • Scalability – 同じパイプラインを GitHub リポジトリのパスを変更するだけで、他のライブラリや社内 SDK に適用できます。
  • Data quality – チャンクサイズの改善、重複除去の追加、合成クエリ生成の強化(例: 構造化プロンプトの使用)により、検索の関連性を向上させることができます。
  • Explainability – 返されたチャンクにソース URL や行番号を付与すれば、ユーザーにトレース可能性を提供できます。
  • Feedback loop – Argilla のインタラクションデータセットは、反復的なモデル改善のためのすぐに使えるフィードバックループを提供します。

distilabel の合成データ生成、Matryoshka 強化埋め込みのファインチューニング、軽量ベクトルストアを組み合わせることで、開発者はあらゆる技術製品向けの信頼性の高いサポートボットを迅速にプロトタイプできます。

Sources