Разработка приложений с помощью 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 AI Foundry.
Модель, поддерживающая развернутый API вывода модели ИИ Azure. В этом примере мы используем
Mistral-Large
развертывание, но используйте любую модель вашего предпочтения. Для использования возможностей внедрения в LlamaIndex требуется модель внедрения, напримерcohere-embed-v3-multilingual
.- Инструкции по развертыванию моделей можно выполнить в качестве бессерверных API.
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, вам потребуется конечная точка и учетные данные для подключения к нему. Выполните следующие действия, чтобы получить необходимые сведения из модели, которую вы хотите использовать:
Перейдите в Azure AI Foundry.
Откройте проект, в котором развернута модель, если она еще не открыта.
Перейдите к моделям и конечным точкам и выберите развернутую модель, как указано в предварительных требованиях.
Скопируйте 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 или ресурсе Служб ИИ 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)
Как правило, вы используете сочетание обоих стратегий.