你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用 LlamaIndex 和 Azure AI Studio 开发应用程序

在本文中,你将了解如何将 LlamaIndex 与从 Azure AI Studio 中的 Azure AI 模型目录部署的模型配合使用。

部署到 Azure AI Studio 的模型可以通过以下两种方式与 LlamaIndex 配合使用:

  • 使用 Azure AI 模型推理 API:部署到 Azure AI Studio 的所有模型都支持 Azure AI 模型推理 API,该 API 提供了一组通用功能,可用于目录中的大多数模型。 该 API 的好处是,由于它对于所有模型都是相同的,因此从一个模型更改到另一个模型就像更改正在使用的模型部署一样简单。 不需要在代码中进行其他更改。 使用 LlamaIndex 时,请安装扩展 llama-index-llms-azure-inferencellama-index-embeddings-azure-inference

  • 使用特定于模型提供商的 API:某些模型(例如 OpenAI、Cohere 或 Mistral)为 LlamaIndex 提供了其自己的一组 API 和扩展。 这些扩展可能包括模型支持的特定功能,因此如果你想要利用它们,则它们是合适的。 使用 llama-index 时,请安装特定于要使用的模型的扩展,例如 llama-index-llms-openaillama-index-llms-cohere

在此示例中,我们使用 Azure AI 模型推理 API

先决条件

若要运行本教程,需要:

  1. Azure 订阅

  2. 一个 Azure AI 中心资源,如如何创建和管理 Azure AI Studio 中心所述。

  3. 已部署一个支持 Azure AI 模型推理 API 的模型。 在此示例中,我们使用 Mistral-Large 部署,但你可以使用自己偏好的任何模型。 若要使用 LlamaIndex 中的嵌入功能,你需要一个像 cohere-embed-v3-multilingual 这样的嵌入模型。

  4. 已安装 Python 3.8 或更高版本,包括 pip。

  5. 已安装 LlamaIndex。 可以使用以下方法执行此操作:

    pip install llama-index
    
  6. 在此示例中,我们使用 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-inferencellama-index-embeddings-azure-inference 的版本 0.2.4

配置环境

若要使用部署在 Azure AI Studio 中的 LLM,你需要终结点和凭据来连接到它。 请按照以下步骤从想要使用的模型中获取所需的信息:

  1. 转到 Azure AI Studio

  2. 转到部署并根据先决条件选择已部署的模型。

  3. 复制终结点 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 自变量。 在以下示例中,将传递仅适用于 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)

配置代码使用的模型

可以在使用 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)

一般情况下,可以组合使用两种策略。