Поделиться через


Разработка приложений с помощью LlamaIndex и Azure AI Foundry

В этой статье вы узнаете, как использовать LlamaIndex с моделями, развернутыми из каталога моделей ИИ Azure на портале Azure AI Foundry.

Модели, развернутые в Azure AI Foundry, можно использовать с LlamaIndex двумя способами:

  • Использование API вывода модели Azure. Все модели, развернутые в Azure AI Foundry, поддерживают API вывода модели ИИ Azure, который предлагает общий набор функциональных возможностей, которые можно использовать для большинства моделей в каталоге. Преимуществом этого API является то, что, так как это одинаково для всех моделей, переход от одного к другому так же просто, как изменение используемого развертывания модели. Дальнейшие изменения в коде не требуются. При работе с LlamaIndex установите расширения llama-index-llms-azure-inference и llama-index-embeddings-azure-inference.

  • Использование конкретного API поставщика модели: некоторые модели, такие как OpenAI, Cohere или Mistral, предлагают собственный набор API и расширений для LlamaIndex. Эти расширения могут включать определенные функциональные возможности, которые поддерживают модель и поэтому подходят, если вы хотите использовать их. При работе llama-indexс ней установите расширение, конкретное для модели, которую вы хотите использовать, например llama-index-llms-openai или llama-index-llms-cohere.

В этом примере мы работаем с API вывода модели ИИ Azure.

Необходимые компоненты

Для работы с этим руководством необходимы указанные ниже компоненты.

  • Подписка Azure

  • Проект ИИ Azure, как описано на портале Azure AI Foundry.

  • Модель, поддерживающая развернутый API вывода модели ИИ Azure. В этом примере мы используем Mistral-Large развертывание, но используйте любую модель вашего предпочтения. Для использования возможностей внедрения в LlamaIndex требуется модель внедрения, например cohere-embed-v3-multilingual.

  • Python 3.8 или более поздней версии, включая pip.

  • Установлен llamaIndex. Это можно сделать с помощью:

    pip install llama-index
    
  • В этом примере мы работаем с API вывода модели ИИ Azure, поэтому мы устанавливаем следующие пакеты:

    pip install -U llama-index-llms-azure-inference
    pip install -U llama-index-embeddings-azure-inference
    

    Внимание

    Для использования службы вывода модели ИИ Azure требуется версия 0.2.4 llama-index-llms-azure-inference или llama-index-embeddings-azure-inference.

Настройка среды

Чтобы использовать LLM, развернутые на портале Azure AI Foundry, вам потребуется конечная точка и учетные данные для подключения к нему. Выполните следующие действия, чтобы получить необходимые сведения из модели, которую вы хотите использовать:

  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, настройте клиент, как указано в моделях Azure OpenAI и службе вывода моделей ИИ Azure.

Если конечная точка обслуживает несколько моделей, например с помощью службы вывода модели ИИ Azure или модели 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, можно использовать следующий код для создания клиента:

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 убедитесь, что конечная точка была развернута с помощью этого метода проверки подлинности и у вас есть необходимые разрешения для вызова.

Если вы планируете использовать асинхронный вызов, рекомендуется использовать асинхронную версию для учетных данных:

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

Если вы используете службу Azure OpenAI или службу вывода модели ИИ Azure, убедитесь, что у вас есть по крайней мере версия 0.2.4 интеграции LlamaIndex. Используйте api_version параметр в случае, если необходимо выбрать конкретный api_versionпараметр.

Для службы вывода модели ИИ Azure необходимо передать 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},
)

Параметры не поддерживаются в API вывода модели ИИ Azure (справочник), но доступные в базовой модели, можно использовать 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)

Настройка моделей, используемых кодом

Вы можете использовать клиент модели LLM или внедрения отдельно в коде, который вы разрабатываете с помощью LlamaIndex, или настроить весь сеанс с помощью Settings параметров. Настройка сеанса имеет преимущество всего кода с использованием одинаковых моделей для всех операций.

from llama_index.core import Settings

Settings.llm = llm
Settings.embed_model = embed_model

Однако существуют сценарии, в которых требуется использовать общую модель для большинства операций, но конкретную для конкретной задачи. В этих случаях полезно задать модель LLM или внедрить для каждой конструкции LlamaIndex. В следующем примере мы задали определенную модель:

from llama_index.core.evaluation import RelevancyEvaluator

relevancy_evaluator = RelevancyEvaluator(llm=llm)

Как правило, вы используете сочетание обоих стратегий.