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 が使用可能である。

手順

  1. 新しいノートブックセルで、llama_stack クライアントパッケージをインストールします。

    %pip install llama_stack_client
    Copy to Clipboard Toggle word wrap
  2. 新しいノートブックセルで、Agent、AgentEventLogger、LlamaStackClient をインポートします。

    from llama_stack_client import Agent, AgentEventLogger, LlamaStackClient
    Copy to Clipboard Toggle word wrap
  3. 新しいノートブックセルで、デプロイメントエンドポイントを base_url パラメーターに割り当てて、LlamaStackClient インスタンスを作成します。

    client = LlamaStackClient(base_url="<your deployment endpoint>")
    Copy to Clipboard Toggle word wrap
  4. 利用可能なモデルをリスト表示します。

    models = client.models.list()
    Copy to Clipboard Toggle word wrap
  5. 最初の 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"]
    Copy to Clipboard Toggle word wrap
  6. 新しいノートブックセルで、次のパラメーターを定義します。

    • 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>"
      Copy to Clipboard Toggle word wrap
      重要

      RAG デモリポジトリーのサンプル Docling パイプラインを使用している場合は、パイプラインによってデータベースが自動的に登録されるため、このステップをスキップできます。一方、独自のパイプラインを使用している場合は、データベースを自分で登録する必要があります。

  7. 新しいノートブックセルで、エンベディングを保存するためのベクトルデータベースを登録または確認します。

    _ = client.vector_dbs.register(
    vector_db_id=vector_db_id,
    embedding_model=embedding_model_id,
    embedding_dimension=embedding_dimension,
    provider_id=provider_id,
    )
    print(f"Registered vector DB: {vector_db_id}")
    Copy to Clipboard Toggle word wrap
  8. OpenShift Web コンソールで、データサイエンスパイプラインのインポート の説明に従って、ドキュメントパイプラインを含む YAML ファイルをデータサイエンスプロジェクトにインポートします。
  9. パイプライン実行のタスク実行 の説明に従って、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 アクセラレーションを有効または無効にします。

検証

  1. Jupyter ノートブックで、取り込んだコンテンツに関連する質問を LLM に問い合わせます。以下に例を示します。

    from llama_stack_client import Agent, AgentEventLogger
    import uuid
    
    rag_agent = Agent(
        client,
        model=model_id,
        instructions="You are a helpful assistant",
        tools=[
            {
                "name": "builtin::rag/knowledge_search",
                "args": {"vector_db_ids": [vector_db_id]},
            }
        ],
    )
    
    prompt = "What can you tell me about the birth of word processing?"
    print("prompt>", prompt)
    
    session_id = rag_agent.create_session(session_name=f"s{uuid.uuid4().hex}")
    
    response = rag_agent.create_turn(
        messages=[{"role": "user", "content": prompt}],
        session_id=session_id,
        stream=True,
    )
    
    for log in AgentEventLogger().log(response):
        log.print()
    Copy to Clipboard Toggle word wrap
  2. ベクトルデータベースからチャンクを照会します。

    query_result = client.vector_io.query(
        vector_db_id=vector_db_id,
        query="what do you know about?",
    )
    print(query_result)
    Copy to Clipboard Toggle word wrap
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2026 Red Hat
トップに戻る