3.6. Llama モデルに取り込んだコンテンツの照会
Jupyter ノートブックの LlamaStack SDK を使用すると、ベクトルデータベースに保存されている生のテキストまたは HTML ソースに対して検索拡張生成 (RAG) クエリーを実行することで、取り込んだコンテンツを照会できます。取り込んだコンテンツを照会する場合、別の取得サービスを設定しなくても、1 回限りの検索を実行したり、複数ターンの会話フローを開始したりできます。
前提条件
- OpenShift AI で GPU サポートを有効にした。これには、Node Feature Discovery Operator と NVIDIA GPU Operator のインストールが含まれます。詳細は、Node Feature Discovery Operator のインストール と NVIDIA GPU の有効化 を参照してください。
- GPU アクセラレーションを使用している場合は、少なくとも 1 つの NVIDIA GPU が使用可能である。
- OpenShift Web コンソールにログインしている。
- OpenShift AI で Llama Stack Operator をアクティブ化した。
- llama-3.2-3b-instruct モデルなどの推論モデルをデプロイした。
-
LlamaStackDistributionインスタンスを作成して RAG 機能を有効にし、Llama Stack のデプロイメントを設定した。 - データサイエンスプロジェクト内にプロジェクトワークベンチを作成した。
- Jupyter ノートブックが開いており、ワークベンチ環境で実行中である。
-
ワークベンチ環境に
llama_stack_clientバージョン 0.2.14 以降がインストールされている。 - モデルにコンテンツを取り込んだ。
この手順では、特定の種類のコンテンツは必要ありません。必要なのは、テキスト、HTML、またはドキュメントデータがベクトルデータベースにすでに取り込まれており、そのコンテンツが取得可能であることだけです。以前にコンテンツを取り込んでいることがある場合は、そのコンテンツを照会できます。まだコンテンツを取り込んでいない場合、この手順のクエリーは空の結果またはエラーを返します。
手順
新しいノートブックセルで、
llama_stackクライアントパッケージをインストールします。%pip install llama_stack_client新しいノートブックセルで、
Agent、AgentEventLogger、LlamaStackClientをインポートします。from llama_stack_client import Agent, AgentEventLogger, LlamaStackClient新しいノートブックセルで、デプロイメントエンドポイントを
base_urlパラメーターに割り当てて、LlamaStackClientインスタンスを作成します。以下に例を示します。client = LlamaStackClient(base_url="http://lsd-llama-milvus-service:8321/")新しいノートブックセルで、利用可能なモデルをリスト表示します。
models = client.models.list()登録済みモデルのリストに Llama モデルとエンベディングモデルが含まれていることを確認します。登録済みモデルのリストの例を次に示します。
[Model(identifier='llama-32-3b-instruct', metadata={}, api_model_type='llm', provider_id='vllm-inference', provider_resource_id='llama-32-3b-instruct', type='model', model_type='llm'), Model(identifier='ibm-granite/granite-embedding-125m-english', metadata={'embedding_dimension': 768.0}, api_model_type='embedding', provider_id='sentence-transformers', provider_resource_id='ibm-granite/granite-embedding-125m-english', type='model', model_type='embedding')]新しいノートブックセルで、登録済みモデルのリストにある最初の LLM を選択します。
model_id = next(m.identifier for m in models if m.model_type == "llm")新しいノートブックセルで、ベクトルデータベースを識別する一意の名前である
vector_db_idを定義します (例:my_milvus_db)。ベクトルデータベース ID がわからない場合は、管理者に問い合わせてください。vector_db_id = "<your vector database ID>"新しいノートブックセルで、低レベルの RAG ツールを使用して取り込んだコンテンツを照会します。
# Example RAG query for one-off lookups query = "What benefits do the ingested passages provide for retrieval?" result = client.tool_runtime.rag_tool.query( vector_db_ids=[vector_db_id], content=query, ) print("Low-level query result:", result)新しいノートブックセルで、高レベルのエージェント API を使用して取り込んだコンテンツを照会します。
# Create an Agent for conversational RAG queries 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 = "How do you do great work?" print("Prompt>", prompt) # Create a session and run a streaming turn session_id = agent.create_session("rag_session") response = agent.create_turn( messages=[{"role": "user", "content": prompt}], session_id=session_id, stream=True, ) # Log and print the agent's response for log in AgentEventLogger().log(response): log.print()
検証
- ノートブックは、低レベルの RAG ツールと高レベルのエージェント API の両方のクエリー結果を出力します。
- 出力にエラーが表示されなければ、モデルが取り込んだコンテンツを取得して応答できています。