3.7. Llama Stack の取得用に Docling でドキュメントを準備する
Docling 対応のデータサイエンスパイプラインを使用してソースドキュメントを変換し、Llama Stack SDK を使用して出力を Llama Stack ベクトルストアに取り込むことができます。このようなモジュール方式により、ドキュメントの準備と取り込みを分離しながらも、エンドツーエンドの検索拡張生成 (RAG) ワークフローを実現できます。
このパイプラインでは、Milvus ベクトルデータベースを登録し、ソース PDF をダウンロードして、並列処理のために分割し、各バッチを Docling を使用して Markdown に変換します。Markdown から sentence-transformer エンベディングを生成し、それをベクトルストアに保存することで、ドキュメントを Llama Stack で即座に検索できるようになります。
前提条件
- OpenShift AI で GPU サポートを有効にした。これには、Node Feature Discovery Operator と NVIDIA GPU Operator のインストールが含まれます。詳細は、Node Feature Discovery Operator のインストール と NVIDIA GPU の有効化 を参照してください。
- OpenShift Web コンソールにログインしている。
- OpenShift AI ダッシュボードでデータサイエンスプロジェクトとパイプラインにアクセスできる。
- ワークベンチを含むデータサイエンスプロジェクト内にパイプラインサーバーを作成して設定した。
- OpenShift AI で Llama Stack Operator をアクティブ化した。
- llama-3.2-3b-instruct モデルなどの推論モデルをデプロイした。
-
LlamaStackDistributionインスタンスを作成して RAG 機能を有効にし、Llama Stack のデプロイメントを設定した。 - データサイエンスプロジェクト内にプロジェクトワークベンチを作成した。
- Jupyter ノートブックが開いており、ワークベンチ環境で実行中である。
-
ワークベンチ環境に
llama_stack_clientバージョン 0.2.14 以降がインストールされている。 - データサイエンスプロジェクトへの接続の追加 の説明に従って、ローカルオブジェクトストレージバケットをインストールし、接続を作成した。
- Docling 変換 (RAG デモサンプルのいずれか、または独自のカスタムパイプライン) を含むデータサイエンスパイプラインを YAML にコンパイルした。
- データサイエンスプロジェクトのクォータで、パイプライン実行に対して 500 ミリコア (0.5 CPU) から 4 CPU コアまでの間のコア数が許可されている。
- データサイエンスプロジェクトのクォータで、パイプライン実行に対して 2 GiB から 6 GiB までの間の RAM が許可されている。
- GPU アクセラレーションを使用している場合は、少なくとも 1 つの NVIDIA GPU が使用可能である。
手順
新しいノートブックセルで、
llama_stackクライアントパッケージをインストールします。%pip install llama_stack_client
%pip install llama_stack_clientCopy to Clipboard Copied! Toggle word wrap Toggle overflow 新しいノートブックセルで、Agent、AgentEventLogger、LlamaStackClient をインポートします。
from llama_stack_client import Agent, AgentEventLogger, LlamaStackClient
from llama_stack_client import Agent, AgentEventLogger, LlamaStackClientCopy to Clipboard Copied! Toggle word wrap Toggle overflow 新しいノートブックセルで、デプロイメントエンドポイントを
base_urlパラメーターに割り当てて、LlamaStackClient インスタンスを作成します。client = LlamaStackClient(base_url="<your deployment endpoint>")
client = LlamaStackClient(base_url="<your deployment endpoint>")Copy to Clipboard Copied! Toggle word wrap Toggle overflow 利用可能なモデルをリスト表示します。
models = client.models.list()
models = client.models.list()Copy to Clipboard Copied! Toggle word wrap Toggle overflow 最初の LLM と最初のエンベディングモデルを選択します。
model_id = next(m.identifier for m in models if m.model_type == "llm") embedding_model = next(m for m in models if m.model_type == "embedding") embedding_model_id = embedding_model.identifier embedding_dimension = embedding_model.metadata["embedding_dimension"]
model_id = next(m.identifier for m in models if m.model_type == "llm") embedding_model = next(m for m in models if m.model_type == "embedding") embedding_model_id = embedding_model.identifier embedding_dimension = embedding_model.metadata["embedding_dimension"]Copy to Clipboard Copied! Toggle word wrap Toggle overflow 新しいノートブックセルで、次のパラメーターを定義します。
-
vector_db_id: ベクトルデータベースを識別する一意の名前 (例:my_milvus_db)。 provider_id: Llama Stack ゲートウェイによって有効化されたコネクターキー。Milvus ベクトルデータベースの場合、このコネクターキーは"milvus"です。利用可能なコネクターをリスト表示することもできます。print(client.vector_dbs.list_providers()) # lists available connectors vector_db_id = "<your vector database ID>" provider_id = "<your provider ID>"
print(client.vector_dbs.list_providers()) # lists available connectors vector_db_id = "<your vector database ID>" provider_id = "<your provider ID>"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要RAG デモリポジトリーのサンプル Docling パイプラインを使用している場合は、パイプラインによってデータベースが自動的に登録されるため、このステップをスキップできます。一方、独自のパイプラインを使用している場合は、データベースを自分で登録する必要があります。
-
新しいノートブックセルで、エンベディングを保存するためのベクトルデータベースを登録または確認します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - OpenShift Web コンソールで、データサイエンスパイプラインのインポート の説明に従って、ドキュメントパイプラインを含む YAML ファイルをデータサイエンスプロジェクトにインポートします。
パイプライン実行のタスク実行 の説明に従って、Docling パイプラインを実行するためのパイプライン実行を作成します。このパイプライン実行により、PDF ドキュメントがベクトルデータベースに挿入されます。RAG デモサンプルリポジトリー の Docling パイプラインを実行する場合は、パイプライン実行を開始する前に、オプションで次のパラメーターをカスタマイズできます。
-
base_url: PDF ファイルを取得するベース URL。 -
pdf_filenames: ダウンロードして変換する PDF ファイル名のコンマ区切りリスト。 -
num_workers: 並列ワーカーの数。 -
vector_db_id: Milvus ベクトルデータベースの ID。 -
service_url: Milvus サービスの URL。 -
embed_model_id: 使用するエンベディングモデル。 -
max_tokens: 各チャンクの最大トークン数。 -
use_gpu: GPU アクセラレーションを有効または無効にします。
-
検証
Jupyter ノートブックで、取り込んだコンテンツに関連する質問を LLM に問い合わせます。以下に例を示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ベクトルデータベースからチャンクを照会します。
query_result = client.vector_io.query( vector_db_id=vector_db_id, query="what do you know about?", ) print(query_result)query_result = client.vector_io.query( vector_db_id=vector_db_id, query="what do you know about?", ) print(query_result)Copy to Clipboard Copied! Toggle word wrap Toggle overflow