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


Создание пользовательского приложения чата на Python с помощью пакета SDK потока запросов

Внимание

Некоторые функции, описанные в этой статье, могут быть доступны только в предварительной версии. Эта предварительная версия предоставляется без соглашения об уровне обслуживания, и мы не рекомендуем ее для рабочих нагрузок. Некоторые функции могут не поддерживаться или их возможности могут быть ограничены. Дополнительные сведения см. в статье Дополнительные условия использования Предварительных версий Microsoft Azure.

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

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

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

  • Центр AI Studio для подключения к внешним ресурсам.
  • Проект для организации артефактов проекта и совместного использования трассировок и вычислений.
  • Развернутая модель чата Azure OpenAI (gpt-35-turbo или gpt-4)

Выполните краткое руководство по созданию этих ресурсов, если вы еще не сделали этого. Вы также можете создать эти ресурсы, следуя руководству по пакету SDK, чтобы создать концентратор и статью проекта .

Кроме того, необходимо иметь необходимые разрешения для добавления назначений ролей для учетных записей хранения в подписке Azure. Предоставление разрешений (добавление назначения ролей) разрешено только владельцем определенных ресурсов Azure. Возможно, вам потребуется обратиться к ИТ-администратору за помощью, чтобы предоставить доступ к вызову Службы Azure OpenAI с помощью удостоверения.

Предоставление доступа к вызову Службы Azure OpenAI с помощью удостоверения

Чтобы использовать рекомендации по обеспечению безопасности, вместо ключей API мы используем идентификатор Microsoft Entra для проверки подлинности с помощью Azure OpenAI с помощью удостоверения пользователя.

Вам или администратору необходимо предоставить удостоверению пользователя роль пользователя OpenAI Cognitive Services в ресурсе Служб искусственного интеллекта Azure, который вы используете. Эта роль предоставляет возможность вызывать службу Azure OpenAI с помощью удостоверения пользователя.

Чтобы предоставить себе доступ к ресурсу Служб искусственного интеллекта Azure, который вы используете:

  1. В AI Studio перейдите к проекту и выберите Параметры в левой области.

  2. В разделе Подключение ресурсов выберите имя подключения с типом AIServices.

    Снимок экрана: страница параметров проекта, в котором показано, как выбрать ресурс подключенных служб ИИ, чтобы открыть его.

    Примечание.

    Если вы не видите подключение AIServices, используйте вместо этого подключение Azure OpenAI.

  3. На странице сведений о ресурсе выберите ссылку в заголовке ресурса, чтобы открыть ресурс служб ИИ в портал Azure.

    Снимок экрана: сведения о подключении служб ИИ, показывающие, как открыть ресурс в портал Azure.

  4. На левой странице в портал Azure выберите элемент управления доступом (IAM)>+ Добавить>назначение роли.

  5. Найдите роль пользователя OpenAI Cognitive Services и выберите ее. Затем выберите Далее.

    Снимок экрана: страница для выбора роли пользователя OpenAI в Cognitive Services.

  6. Выберите "Пользователь", "Группа" или "Субъект-служба". Затем выберите " Выбрать участников".

  7. В открывающейся области "Выбор членов" найдите имя пользователя, для которого нужно добавить назначение роли. Выберите пользователя и нажмите кнопку "Выбрать".

    Снимок экрана: страница с пользователем, которому назначена новая роль.

  8. Перейдите к мастеру и выберите "Проверить и назначить" , чтобы добавить назначение роли.

Установка Azure CLI и входа

Теперь мы устанавливаем Azure CLI и войдите из локальной среды разработки, чтобы использовать учетные данные пользователя для вызова службы Azure OpenAI.

В большинстве случаев azure CLI можно установить из терминала с помощью следующей команды:

winget install -e --id Microsoft.AzureCLI

Инструкции по установке Azure CLI можно выполнить, если эти команды не работают для конкретной операционной системы или установки.

После установки Azure CLI войдите с помощью az login команды и входа с помощью браузера:

az login

Теперь мы создадим приложение и вызовем Службу Azure OpenAI из кода.

Создание новой среды Python.

Сначала необходимо создать новую среду Python, с помощью которой можно установить пакеты ПАКЕТА SDK для потока запросов. Не устанавливайте пакеты в глобальную установку Python. При установке пакетов Python всегда следует использовать виртуальную или конда-среду, в противном случае можно разорвать глобальную установку Python.

При необходимости установите Python

Рекомендуется использовать Python 3.10 или более поздней версии, но требуется по крайней мере Python 3.8. Если у вас нет подходящей версии Python, вы можете следовать инструкциям в руководстве по Python VS Code для простого способа установки Python в операционной системе.

Создание виртуальной среды

Если у вас уже установлен Python 3.10 или более поздней версии, можно создать виртуальную среду с помощью следующих команд:

py -3 -m venv .venv
.venv\scripts\activate

Активация среды Python означает, что при запуске python или pip из командной строки вы будете использовать интерпретатор Python, содержащийся в .venv папке приложения.

Примечание.

Вы можете использовать deactivate команду для выхода из виртуальной среды Python, а затем повторно активировать ее при необходимости.

Установка пакета SDK потока запроса

В этом разделе мы используем поток запросов для создания приложения. Поток запросов — это набор средств разработки, предназначенных для упрощения комплексного цикла разработки приложений ИИ на основе LLM, от идеи, прототипирования, тестирования, оценки до развертывания и мониторинга рабочей среды.

Используйте pip для установки пакета SDK потока запроса в виртуальную среду, созданную вами.

pip install promptflow
pip install azure-identity

Пакет SDK потока запросов принимает зависимость от нескольких пакетов, которые можно выбрать отдельно установить, если они не нужны:

  • promptflow-core: содержит базовую среду выполнения потока запроса, используемую для выполнения кода LLM
  • promptflow-tracing: упрощенная библиотека, используемая для создания трассировок OpenTelemetry в стандартах
  • promptflow-devkit: содержит средство проверки потока запроса и средства просмотра трассировки для локальных сред разработки
  • openai: клиентские библиотеки для использования службы Azure OpenAI
  • python-dotenv: используется для задания переменных среды, считывая их из .env файлов

Настройка переменных среды

Для вызова службы Azure OpenAI из кода требуется имя конечной точки и развертывания служб ИИ. В этом кратком руководстве вы сохраните эти значения в .env файле, который содержит переменные среды, считываемые приложением. Эти значения можно найти на игровой площадке чата AI Studio.

  1. .env Создайте файл и вставьте следующий код:

    AZURE_OPENAI_ENDPOINT=endpoint_value
    AZURE_OPENAI_DEPLOYMENT_NAME=deployment_name
    AZURE_OPENAI_API_VERSION=2024-02-15-preview
    
  2. Перейдите на площадку чата в проекте AI Studio. Сначала проверьте, работает ли чат с моделью, отправив сообщение в LLM.

  3. Найдите имя развертывания Azure OpenAI на игровой площадке чата. Выберите развертывание в раскрывающемся списке и наведите указатель мыши на имя развертывания, чтобы просмотреть его. В этом примере имя развертывания — gpt-35-turbo-16k.

    Снимок экрана: открытая игровая площадка чата AI Studio, выделенная имя развертывания и кнопка просмотра кода.

  4. .env В файле замените deployment_name имя развертывания на предыдущем шаге. В этом примере мы используем имя gpt-35-turbo-16kразвертывания.

  5. Нажмите кнопку <> "Просмотреть код" и скопируйте значение конечной точки.

    Снимок экрана: всплывающее окно кода представления, указывающее кнопку для копирования значения конечной точки.

  6. В файле замените .envendpoint_value значение конечной точки, скопированное из диалогового окна на предыдущем шаге.

Предупреждение

Проверка подлинности на основе ключей поддерживается, но не рекомендуется корпорацией Майкрософт. Если вы хотите использовать ключи, вы можете добавить ключ .envв .gitignore файл, но убедитесь, что ваш .env файл находится в вашем файле, чтобы вы не случайно проверка в репозиторий Git.

Создание простого запроса чата и приложения

Сначала создайте файл шаблона запроса, для этого мы будем использовать запрос , который является форматом шаблона запроса, поддерживаемым потоком запроса.

chat.prompty Создайте файл и скопируйте в него следующий код:

---
name: Chat Prompt
description: A basic prompt that uses the chat API to answer questions
model:
    api: chat
    configuration:
        type: azure_openai
    parameters:
        max_tokens: 256
        temperature: 0.2
inputs:
    chat_input:
        type: string
    chat_history:
        type: list
        is_chat_history: true
        default: []
outputs:   
  response:
    type: string
sample:
    chat_input: What is the meaning of life?
---
system:
You are an AI assistant who helps people find information.

{% for item in history %}
{{item.role}}:
{{item.content}}
{% endfor %}

user:
{{chat_input}}

Теперь создадим файл Python, использующий этот шаблон запроса. chat.py Создайте файл и вставьте в него следующий код:

import os
from dotenv import load_dotenv
load_dotenv()

from promptflow.core import Prompty, AzureOpenAIModelConfiguration

model_config = AzureOpenAIModelConfiguration(
    azure_deployment=os.getenv("AZURE_OPENAI_DEPLOYMENT_NAME"),
    api_version=os.getenv("AZURE_OPENAI_API_VERSION"),
    azure_endpoint=os.getenv("AZURE_OPENAI_ENDPOINT")
)

prompty = Prompty.load("chat.prompty", model={'configuration': model_config})
result = prompty(
    chat_history=[
        {"role": "user", "content": "Does Azure OpenAI support customer managed keys?"},
        {"role": "assistant", "content": "Yes, customer managed keys are supported by Azure OpenAI."}
    ],
    chat_input="Do other Azure AI services support this too?")

print(result)

Теперь из консоли запустите код Python:

python chat.py

Теперь вы увидите выходные данные, полученные при выполнении запроса:

Yes, other Azure AI services also support various capabilities and features. Some of the Azure AI services include Azure Cognitive Services, Azure Machine Learning, Azure Bot Service, and Azure Databricks. Each of these services offers different AI capabilities and can be used for various use cases. If you have a specific service or capability in mind, feel free to ask for more details.

Трассировка выполнения кода чата

Теперь мы рассмотрим, как трассировка потока запросов может предоставлять аналитические сведения о различных вызовах LLM, происходящих в скриптах Python.

В начале chat.py файла добавьте следующий код, чтобы включить трассировку потока запроса:

from promptflow.tracing import start_trace
start_trace()

Повторно выполните chat.py команду:

python chat.py

На этот раз вы увидите ссылку в выходных данных для просмотра трассировки потока запроса выполнения:

Starting prompt flow service...
Start prompt flow service on port 23333, version: 1.10.1.
You can stop the prompt flow service with the following command:'pf service stop'.
Alternatively, if no requests are made within 1 hours, it will automatically stop.
You can view the trace detail from the following URL:
http://localhost:23333/v1.0/ui/traces/?#collection=aistudio-python-quickstart&uiTraceId=0x59e8b9a3a23e4e8893ec2e53d6e1e521

Если выбрать эту ссылку, вы увидите трассировку, показывающую шаги выполнения программы, то, что было передано LLM и выходным данным ответа.

Снимок экрана трассировки, показывающий шаги выполнения программы.

Трассировка потока запросов также позволяет отслеживать определенные вызовы функций и трассировки журналов в AI Studio, чтобы получить дополнительные сведения, чтобы проверка как использовать трассировку в пакете SDK потока запросов.

Оценка запроса

Теперь давайте покажем, как использовать средство оценки потока запросов для создания метрик, которые могут оценить качество беседы в масштабе от 0 до 5. Мы снова запустите запрос, но на этот раз мы сохраняем результаты в массив, содержащий полный диалог, а затем передайте его в ChatEvaluator оценку.

Сначала установите следующую версию promptflow-evals package:

pip install promptflow-evals

Теперь скопируйте следующий код в evaluate.py файл:

import os
from dotenv import load_dotenv
load_dotenv()

from promptflow.core import Prompty, AzureOpenAIModelConfiguration
from promptflow.evals.evaluators import ChatEvaluator

model_config = AzureOpenAIModelConfiguration(
    azure_deployment=os.getenv("AZURE_OPENAI_DEPLOYMENT_NAME"),
    api_version=os.getenv("AZURE_OPENAI_API_VERSION"),
    azure_endpoint=os.getenv("AZURE_OPENAI_ENDPOINT")
)

chat_history=[
    {"role": "user", "content": "Does Azure OpenAI support customer managed keys?"},
    {"role": "assistant", "content": "Yes, customer managed keys are supported by Azure OpenAI."}
]
chat_input="Do other Azure AI services support this too?"

prompty = Prompty.load("chat.prompty", model={'configuration': model_config})
response = prompty(chat_history=chat_history, chat_input=chat_input)

conversation = chat_history
conversation += [
    {"role": "user", "content": chat_input},
    {"role": "assistant", "content": response}
]

chat_eval = ChatEvaluator(model_config=model_config)
score = chat_eval(conversation=conversation)

print(score)

evaluate.py Запустите скрипт:

python evaluate.py

Вы увидите выходные данные, которые выглядят следующим образом:

{'gpt_coherence': 5.0, 'gpt_fluency': 5.0, 'evaluation_per_turn': {'gpt_coherence': {'score': [5.0, 5.0]}, 'gpt_fluency': {'score': [5.0, 5.0]}}}

Похоже, мы набрали 5 за согласованность и беглость ответов LLM на этот разговор!

Дополнительные сведения об использовании оценщиков потока запроса, включая способ создания собственных пользовательских вычислителей и результатов оценки журналов в AI Studio, обязательно проверка вычислить приложение с помощью пакета SDK потока запросов.