LlamaIndex と Azure AI Studio を使用してアプリケーションを開発する
この記事では、LlamaIndex を、Azure AI studio で Azure AI モデルカタログからデプロイされたモデルと一緒に使用する方法について説明します。
Azure AI Studio にデプロイされたモデルは、次の 2 つの方法で LlamaIndex と共に使用できます。
Azure AI モデル推論 API の使用: Azure AI Studio にデプロイされたすべてのモデルは、Azure AI モデル推論 API をサポートします。この API は、カタログ内のほとんどのモデルで使用できる共通の機能セットを提供します。 この API の利点は、すべてのモデルに対して同じであるために、あるモデルから別のモデルへの変更は、使用中のモデル デプロイを変更するのと同じく簡単であるということです。 コードにそれ以上変更を加える必要はありません。 LlamaIndex を使用するときは、拡張機能の
llama-index-llms-azure-inference
とllama-index-embeddings-azure-inference
をインストールします。モデルのプロバイダー固有の API を使用する: OpenAI、Cohere、Mistral などの一部のモデルでは、LlamaIndex 用に独自の API と拡張機能のセットを提供します。 これらの拡張機能には、そのモデルがサポートする特定の機能が含まれている可能性があるため、それらを利用する場合には拡張機能が適しています。
llama-index
を使用するときは、llama-index-llms-openai
やllama-index-llms-cohere
など、使用するモデルに固有の拡張機能をインストールします。
この例では、Azure AI モデル推論 API を使用しています。
前提条件
このチュートリアルを実行するには、次のものが必要です。
「Azure AI Studio でプロジェクトを作成する」で説明されている Azure AI プロジェクト。
Azure AI モデル推論 API をサポートするモデルがデプロイされていること。 この例では、
Mistral-Large
デプロイを使用しますが、お好みの任意のモデルを使用します。 LlamaIndex で埋め込み機能を使用するためには、cohere-embed-v3-multilingual
などの埋め込みモデルが必要です。- 「モデルをサーバーレス API としてデプロイする」の手順に従うことができます。
Python 3.8 以降 (PIP を含む) がインストールされている
LlamaIndex がインストールされていること。 これは、次を使用して行います。
pip install llama-index
この例では、Azure AI モデル推論 API を使用しているため、次のパッケージをインストールします。
pip install -U llama-index-llms-azure-inference pip install -U llama-index-embeddings-azure-inference
重要
Azure AI モデル推論サービスを使用するには、
llama-index-llms-azure-inference
またはllama-index-embeddings-azure-inference
のバージョン0.2.4
が必要です。
環境を構成する
Azure AI Studio にデプロイされた LLM を使用するには、エンドポイントと資格情報を使用してこれに接続する必要があります。 使用するモデルから必要な情報を取得するには、次の手順に従います。
Azure AI Studio に移動します。
モデルがデプロイされているプロジェクトをまだ開いていない場合は開きます。
[モデル + エンドポイント] に移動し、前提条件に示されているように、デプロイしたモデルを選択します。
エンドポイントの URL とキーをコピーします。
ヒント
モデルが Microsoft Entra ID サポートを使用してデプロイされた場合は、キーは必要ありません。
このシナリオでは、エンドポイント URL とキーの両方を次の環境変数に配置しました。
export AZURE_INFERENCE_ENDPOINT="<your-model-endpoint-goes-here>"
export AZURE_INFERENCE_CREDENTIAL="<your-key-goes-here>"
構成したら、エンドポイントに接続するクライアントを作成します。
import os
from llama_index.llms.azure_inference import AzureAICompletionsModel
llm = AzureAICompletionsModel(
endpoint=os.environ["AZURE_INFERENCE_ENDPOINT"],
credential=os.environ["AZURE_INFERENCE_CREDENTIAL"],
)
ヒント
モデル デプロイが Azure OpenAI Service または Azure AI サービスのリソースにホストされている場合は、「Azure OpenAI モデルと Azure AI モデル推論サービス」に示されているようにクライアントを構成します。
Azure AI モデル推論サービスや GitHub モデルのように、エンドポイントが 1 つ以上のモデルにサービスを提供している場合は、次のように model_name
パラメーターを指定する必要があります。
import os
from llama_index.llms.azure_inference import AzureAICompletionsModel
llm = AzureAICompletionsModel(
endpoint=os.environ["AZURE_INFERENCE_ENDPOINT"],
credential=os.environ["AZURE_INFERENCE_CREDENTIAL"],
model_name="mistral-large-2407",
)
または、エンドポイントが Microsoft Entra ID をサポートしている場合は、次のコードを使用してクライアントを作成できます。
import os
from azure.identity import DefaultAzureCredential
from llama_index.llms.azure_inference import AzureAICompletionsModel
llm = AzureAICompletionsModel(
endpoint=os.environ["AZURE_INFERENCE_ENDPOINT"],
credential=DefaultAzureCredential(),
)
Note
Microsoft Entra ID を使用する場合は、その認証方法でエンドポイントがデプロイされており、エンドポイントを呼び出すために必要なアクセス許可があることを確認してください。
非同期呼び出しを使用する予定の場合は、ベスト プラクティスとして、資格情報に対して非同期バージョンを使用することをお勧めします。
from azure.identity.aio import (
DefaultAzureCredential as DefaultAzureCredentialAsync,
)
from llama_index.llms.azure_inference import AzureAICompletionsModel
llm = AzureAICompletionsModel(
endpoint=os.environ["AZURE_INFERENCE_ENDPOINT"],
credential=DefaultAzureCredentialAsync(),
)
Azure OpenAI モデルと Azure AI モデル推論サービス
Azure OpenAI Service や Azure AI モデル推論サービスを使用している場合は、LlamaIndex 統合のバージョン 0.2.4
以上が必要です。 特定の api_version
を選択する必要がある場合に備えて、api_version
パラメーターを使用します。
Azure AI モデル推論サービスの場合は、model_name
パラメーターを渡す必要があります。
from llama_index.llms.azure_inference import AzureAICompletionsModel
llm = AzureAICompletionsModel(
endpoint="https://<resource>.services.ai.azure.com/models",
credential=os.environ["AZURE_INFERENCE_CREDENTIAL"],
model_name="mistral-large-2407",
)
Azure OpenAI Service の場合:
from llama_index.llms.azure_inference import AzureAICompletionsModel
llm = AzureAICompletionsModel(
endpoint="https://<resource>.openai.azure.com/openai/deployments/<deployment-name>",
credential=os.environ["AZURE_INFERENCE_CREDENTIAL"],
api_version="2024-05-01-preview",
)
ヒント
デプロイで使用している API のバージョンを確認します。 間違った api_version
やモデルでサポートされていないものを使用すると、ResourceNotFound
例外が発生します。
推論パラメーター
追加のパラメーターを設定することで、このクライアントを使用しているすべての操作に対して推論を実行する方法を構成できます。 そうすることで、モデルに対して行う呼び出しで毎回これらを指定しなくて済みます。
llm = AzureAICompletionsModel(
endpoint=os.environ["AZURE_INFERENCE_ENDPOINT"],
credential=os.environ["AZURE_INFERENCE_CREDENTIAL"],
temperature=0.0,
model_kwargs={"top_p": 1.0},
)
Azure AI モデル推論 API (リファレンス) でサポートされておらず、基になるモデルでは使用できるパラメーターは、model_extras
引数を使用できます。 次の例では、Mistral モデルでのみ使用できる safe_prompt
パラメーターが渡されています。
llm = AzureAICompletionsModel(
endpoint=os.environ["AZURE_INFERENCE_ENDPOINT"],
credential=os.environ["AZURE_INFERENCE_CREDENTIAL"],
temperature=0.0,
model_kwargs={"model_extras": {"safe_prompt": True}},
)
LLM モデルを使用する
クライアントを直接使用することも、LlamaIndex でコードで使用するモデルを構成することもできます。 モデルを直接使用するには、チャット命令モデルに chat
メソッドを使用します。
from llama_index.core.llms import ChatMessage
messages = [
ChatMessage(
role="system", content="You are a pirate with colorful personality."
),
ChatMessage(role="user", content="Hello"),
]
response = llm.chat(messages)
print(response)
この出力をストリーミングすることもできます。
response = llm.stream_chat(messages)
for r in response:
print(r.delta, end="")
complete
メソッドは、chat-completions
型のモデルで引き続き使用できます。 このような場合、入力テキストは role="user"
を含むメッセージに変換されます。
埋め込みモデルを使用する
LLM クライアントを作成するのと同じ方法で、埋め込みモデルに接続できます。 次の例では、埋め込みモデルを指すように環境変数を設定しています。
export AZURE_INFERENCE_ENDPOINT="<your-model-endpoint-goes-here>"
export AZURE_INFERENCE_CREDENTIAL="<your-key-goes-here>"
次に、以下のようにクライアントを作成します。
from llama_index.embeddings.azure_inference import AzureAIEmbeddingsModel
embed_model = AzureAIEmbeddingsModel(
endpoint=os.environ["AZURE_INFERENCE_ENDPOINT"],
credential=os.environ['AZURE_INFERENCE_CREDENTIAL'],
)
次の例は、動作することを確認するための簡単なテストを示しています。
from llama_index.core.schema import TextNode
nodes = [
TextNode(
text="Before college the two main things I worked on, "
"outside of school, were writing and programming."
)
]
response = embed_model(nodes=nodes)
print(response[0].embedding)
コードで使用されるモデルを構成する
LLM または埋め込みモデル クライアントは、LlamaIndex で開発したコードで個別に使用するか、Settings
オプションを使用してセッション全体を構成できます。 セッションを構成すると、すべての操作に対して同じモデルを使用するすべてのコードに役立ちます。
from llama_index.core import Settings
Settings.llm = llm
Settings.embed_model = embed_model
ただし、ほとんどの操作に一般的なモデルを使用するものの、特定のタスクに対しては特定のモデルを使用するシナリオがあります。 このような場合は、LlamaIndex コンストラクトごとに使用している LLM または埋め込みモデルを設定すると便利です。 次の例では、特定のモデルを設定します。
from llama_index.core.evaluation import RelevancyEvaluator
relevancy_evaluator = RelevancyEvaluator(llm=llm)
一般に、両方の戦略を組み合わせて使用します。