共用方式為


使用 LlamaIndex 和 Azure AI Foundry 開發應用程式

在本文中,您將瞭解如何使用 LlamaIndex 搭配 Azure AI 模型目錄在 Azure AI Foundry 入口網站中部署的模型。

部署至 Azure AI Foundry 的模型可以搭配 LlamaIndex 使用兩種方式:

  • 使用 Azure AI 模型推斷 API: 部署至 Azure AI Foundry 的所有模型都支援 Azure AI 模型推斷 API,其提供一組常見的功能,可用於目錄中大部分的模型。 此 API 的優點是,由於對所有模型來說都相同,因此從一個模型變更為另一個模型,就像變更正在使用的模型部署一樣簡單。 程式碼中不需要進一步的變更。 使用 LlamaIndex 時,請安裝 llama-index-llms-azure-inferencellama-index-embeddings-azure-inference 延伸模組。

  • 使用模型的提供者特定 API:部分模型 (例如 OpenAI、Cohere 或 Mistral) 提供一組自己的 API 和 LlamaIndex 延伸模組。 這些延伸模組可能包含模型支援的特定功能,因此您可以視需要加以利用。 使用 llama-index 時,請安裝您想要使用之模型的特定延伸模組,例如 llama-index-llms-openaillama-index-llms-cohere

在此範例中,我們會使用 Azure AI 模型推斷 API

必要條件

若要執行此教學課程,您需要:

  • Azure 訂用帳戶

  • Azure AI 專案,如在 Azure AI Foundry 入口網站中建立專案中所述。

  • 支援已部署之 Azure AI 模型推斷 API (英文) 的模型。 在此範例中,我們使用 Mistral-Large 部署,但使用您偏好的任何模型。 若要在 LlamaIndex 中使用內嵌功能,您需要內嵌模型,例如 cohere-embed-v3-multilingual

  • 已安裝 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-embeddings-azure-inference的版本0.2.4llama-index-llms-azure-inference

設定環境

若要使用部署在 Azure AI Foundry 入口網站中的 LLM,您需要端點和認證才能連線到它。 請遵循下列步驟,從您想要使用的模型取得所需的資訊:

  1. 移至 Azure AI Foundry

  2. 如果尚未開啟模型,請開啟部署模型的專案。

  3. 移至 [模型 + 端點 ],然後選取您部署的模型,如必要條件中所述。

  4. 複製端點 URL 和金鑰。

    從端點複製端點 URI 和金鑰選項的螢幕擷取畫面。

    提示

    如果您的模型已使用 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 服務或 Azure AI 服務資源中,請將用戶端設定為 Azure OpenAI 模型和 Azure AI 模型推斷服務中所述

如果您的端點提供多個模型,例如使用 Azure AI 模型推斷服務GitHub 模型,您必須指出 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(),
)

注意

使用 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 服務或 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 服務:

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 引數。 在下列範例中,正在傳遞參數 safe_prompt (僅適用於 Mistral 模型)。

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)

設定您的程式碼所使用的模型

您可以在使用 LlamaIndex 開發的程式碼中個別使用 LLM 或內嵌模型用戶端,或使用 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)

一般而言,您會使用這兩種策略的組合。