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


Начало работы. Чат с помощью собственных данных (пример Python)

В этой статье показано, как развернуть и запустить чат с собственным примером данныхс помощью примера кода для Python. Этот пример приложения чата создается с помощью Python, Службы OpenAI Azure и получения дополненного поколения (RAG) с помощью поиска ИИ Azure.

Приложение предоставляет ответы на вопросы пользователей о преимуществах сотрудников в вымышленной компании. Он использует генерацию Retrieval-Augmented (RAG) для извлечения ссылок на содержимое из предоставленных PDF-файлов, в которые могут входить:

  • Руководство сотрудника
  • Обзорный документ о преимуществах
  • Список ролей и ожиданий компании

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

Вы также узнаете, как настроить параметры приложения для изменения его поведения ответа.

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

Примечание.

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

Пример архитектуры приложения

На следующей схеме показана простая архитектура приложения чата.

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

Ключевые компоненты архитектуры:

  • Веб-приложение, которое размещает интерактивный интерфейс чата (обычно построено с помощью Python Flask или JavaScript/React) и отправляет пользователям вопросы на серверную часть для обработки.
  • Ресурс поиска ИИ Azure, который выполняет интеллектуальный поиск по индексированных документам (PDF-файлам, файлам Word и т. д.) и возвращает соответствующие фрагменты документов (блоки) для использования в ответах.
  • Экземпляр службы Azure OpenAI, который:
    • Преобразует документы и вопросы пользователя в векторные представления для поиска семантической сходства.
    • Извлекает важные ключевые слова для уточнения запросов поиска ИИ Azure.
    • Синтезирует окончательные ответы с помощью полученных данных и запроса пользователя.

Типичный поток приложения чата выглядит следующим образом:

  • Пользователь отправляет вопрос: пользователь вводит вопрос естественного языка через интерфейс веб-приложения.
  • Azure OpenAI обрабатывает вопрос: серверная часть использует Azure OpenAI для:
    • Создайте векторное представление вопроса с помощью модели "text-embedding-ada-002."
    • При необходимости извлекает ключевые слова для уточнения релевантности поиска
  • Поиск ИИ Azure извлекает соответствующие данные: внедрение или ключевые слова используются для выполнения семантического поиска по индексированному содержимому (например, PDF-файлам) в службе "Поиск ИИ Azure".
  • Объедините результаты с вопросом: наиболее релевантные фрагменты документов (блоки) объединяются с исходным вопросом пользователя.
  • Azure OpenAI создает ответ: объединенные входные данные передаются в модель GPT (например, gpt-35-turbo или gpt-4), которая создает ответ с учетом контекста.
  • Ответ возвращается пользователю: созданный ответ отображается в интерфейсе чата.

Предварительные условия

Среда контейнера для разработки доступна со всеми зависимостями, необходимыми для завершения работы над этой статьей. Контейнер разработки можно запустить в GitHub Codespaces (в браузере) или локально с помощью Visual Studio Code.

Чтобы использовать эту статью, вам потребуются следующие предварительные требования:

  • Подписка Azure. Перед началом работы создайте бесплатную учетную запись.

  • Разрешения учетной записи Azure. Ваша учетная запись Azure должна иметь разрешения на выполнение операций Microsoft.Authorization/roleAssignments/write. Роли, такие как администратор доступа пользователей или владелец , удовлетворяют этому требованию.

  • Ваша подписка Azure предоставляет доступ к Azure OpenAI. В большинстве случаев можно создавать пользовательские фильтры содержимого и управлять уровнями серьезности с общим доступом к моделям Azure OpenAI. Регистрация для доступа на основе утверждения не требуется для общего доступа. Дополнительные сведения см. в разделе "Ограниченный доступ" для служб ИИ Azure.

  • Фильтрация содержимого или изменения для предотвращения злоупотреблений (необязательно). Чтобы создавать пользовательские фильтры содержимого, изменять уровни серьезности или поддерживать мониторинг злоупотреблений, требуется официальное утверждение доступа. Вы можете подать заявку на доступ, выполнив необходимые формы регистрации. Дополнительные сведения см. в разделе "Регистрация измененных фильтров содержимого" и (или) мониторинга злоупотреблений.

  • Поддержка и устранение неполадок с доступом. Чтобы получить доступ к устранению неполадок, откройте проблему поддержки в репозитории GitHub.

  • Учетная запись GitHub. Необходимо сделать форк репозитория и использовать GitHub Codespaces или клонировать локально.

Затраты на использование образцов ресурсов

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

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

Подробные сведения о ожидаемых затратах см. в описании оценки затрат в репозитории GitHub для примера.

Открытие среды разработки

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

  • Подписка Azure. Создайте ее бесплатно.
  • Разрешения учетной записи Azure. Ваша учетная запись Azure должна иметь разрешения на выполнение операций Microsoft.Authorization/roleAssignments/write. Роли, такие как администратор доступа пользователей или владелец , удовлетворяют этому требованию.
  • Учетная запись GitHub. Необходимо сделать форк репозитория и использовать GitHub Codespaces или клонировать локально.

Открытие среды разработки

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

Для самых простых и наиболее упрощенных настроек используйте GitHub Codespaces. GitHub Codespaces запускает контейнер разработки, управляемый GitHub, и предоставляет Visual Studio Code для Интернета в качестве пользовательского интерфейса. Эта среда включает все необходимые средства, пакеты SDK, расширения и предустановленные зависимости, поэтому вы можете начать разработку немедленно без настройки вручную.

Использование codespaces гарантирует:

  • Уже установлены правильные инструменты разработчика и версии.
  • Не нужно устанавливать Docker, VS Code или расширения локально.
  • Быстрая адаптация и воспроизводимая настройка среды.

Внимание

Все учетные записи GitHub могут использовать GitHub Codespaces до 60 часов бесплатно в месяц с 2 ядрами. Если вы превышаете бесплатную квоту или используете более крупные параметры вычислений, применяются стандартные тарифы выставления счетов GitHub Codespaces. Дополнительные сведения см. в разделе GitHub Codespaces — ежемесячно включаемое хранилище и основные часы.

  1. Чтобы начать работу с примером проекта, создайте новое пространство кода GitHub в main ветви Azure-Samples/azure-search-openai-demo репозитория GitHub.

    Щелкните правой кнопкой мыши на опции GitHub Codespaces - Open в верхней части страницы репозитория и выберите Открыть ссылку в новом окне. Это гарантирует, что контейнер разработки запускается на полноэкранной вкладке выделенного браузера, предоставляя доступ как к исходному коду, так и к встроенной документации.

    Изображение параметра

  2. На странице "Создание нового пространства кода " просмотрите параметры конфигурации пространства кода и выберите "Создать пространство кода".

    Снимок экрана подтверждения для создания нового пространства кода GitHub для примера.

    Дождитесь запуска пространства кода GitHub. Процесс запуска может занять несколько минут.

  3. После открытия пространства кода GitHub войдите в Azure с помощью интерфейса командной строки разработчика Azure, введя следующую команду в области терминала пространства кода:

    azd auth login
    

    GitHub отображает код безопасности на панели терминала.

    1. Скопируйте код безопасности в области терминала и нажмите Enter. Откроется окно браузера.

    2. В командной строке вставьте код безопасности в поле браузера.

    3. Следуйте инструкциям по проверке подлинности с помощью учетной записи Azure.

Остальные задачи GitHub Codespaces в этой статье выполняются в контексте этого контейнера разработки.

Развертывание приложения чата в Azure

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

  • Исходный код приложения (Python)
  • Файлы инфраструктуры как кода (Bicep)
  • Настройка интеграции GitHub и CI/CD (необязательно)

Используйте следующие шаги для развертывания приложения с помощью Azure Developer CLI (azd).

Внимание

Ресурсы Azure, созданные в этом разделе, особенно Azure AI Search, могут начать начисление затрат сразу после подготовки, даже если развертывание прерывается до завершения. Чтобы избежать непредвиденных расходов, отслеживайте использование Azure и удалите неиспользуемые ресурсы сразу после тестирования.

  1. На панели терминала Visual Studio Code создайте ресурсы Azure и разверните исходный код, выполнив следующую azd команду:

    azd up
    
  2. Процесс запрашивает один или несколько следующих параметров на основе конфигурации:

    • Имя среды: это значение используется в качестве части имени группы ресурсов. Введите короткое имя с строчными буквами и дефисами (-), например myenv. Прописные буквы, цифры и специальные символы не поддерживаются.

    • Подписка: выберите подписку для создания ресурсов. Если вы не видите нужную подписку, используйте клавиши со стрелками для прокрутки полного списка доступных подписок.

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

    • Расположение для модели OpenAI или ресурса Аналитики документов: выберите ближайшее к вам географическое расположение. Если регион, выбранный для вашего расположения , доступен для этого параметра, выберите тот же регион.

    Развертывание приложения может занять некоторое время. Дождитесь завершения развертывания, прежде чем продолжить.

  3. После успешного развертывания приложения на панели терминала отображается URL-адрес конечной точки:

    Снимок экрана, на котором показан URL-адрес конечной точки для развернутого приложения, как сообщается после завершения процесса

  4. Выберите URL-адрес конечной точки, чтобы открыть приложение чата в браузере:

    Снимок экрана: приложение чата с несколькими предложениями для ввода чата и текстового поля чата для ввода вопроса.

Использование приложения чата для получения ответов из PDF-файлов

Приложение чата предварительно загружено с информацией о преимуществах сотрудников из PDF-файлов. Вы можете использовать приложение чата, чтобы задать вопросы о преимуществах. В следующих шагах описан процесс использования приложения чата. Ответы могут отличаться по мере обновления базовых моделей.

  1. В приложении чата выберите параметр "Что происходит в проверке производительности" или введите тот же текст в текстовом поле чата. Приложение возвращает начальный ответ:

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

  2. В поле ответа выберите ссылку:

    Снимок экрана: ссылка, выделенная в поле ответа для приложения чата.

  3. GitHub Codespaces открывает правую панель "Ссылка" с тремя вкладками, и фокус находится на вкладке "Ссылка".

    Снимок экрана правой панели, открытой в GitHub Codespaces, с отображением информации для вкладки

    GitHub Codespaces предоставляет три вкладки сведений, которые помогут вам понять, как приложение чата создало ответ:

    Вкладка Описание
    Процесс мысли Отображает сценарий вопрос-ответ в чате. Вы можете просмотреть содержимое, предоставленное приложением systemчата, вопросы, введенные userсистемой, и уточнения, сделанные системой assistant.
    Вспомогательное содержимое Выводит сведения, используемые для ответа на ваш вопрос и исходный материал. Количество ссылок на исходные материалы указывается параметрами разработчика. Число ссылок по умолчанию равно 3.
    Цитата Показывает исходный источник для выбранной ссылки.
  4. По завершении выберите выбранную в данный момент вкладку в правой области. Правая панель закрывается.

Изменение поведения ответа с помощью параметров

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

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

Настройка Описание
Переопределение шаблона запроса Переопределяет запрос, используемый для создания ответа на основе результатов вопроса и поиска.
Температура Задает температуру запроса на большую языковую модель (LLM), которая создает ответ. Более высокие температуры приводят к более творческим откликам, но они могут быть менее заземленными.
Семя Задает начальное значение для повышения воспроизводимости ответов модели. Начальное значение может быть любым целым числом.
Минимальная оценка поиска Задает минимальную оценку результатов поиска, возвращаемых из поиска Azure AI. Диапазон показателей зависит от того, используете ли вы гибридные (по умолчанию), только векторы или текст только для параметра режима извлечения .
Минимальная оценка повторного ранга Задает минимальную оценку для результатов поиска, возвращаемых семантическим реранкером. Оценка всегда варьируется от 0 до 4. Чем выше оценка, тем более семантически релевантен результат к вопросу.
Получение этого большого количества результатов поиска Задает количество результатов поиска, получаемых из поиска ИИ Azure. Больше результатов может увеличить вероятность поиска правильного ответа, но может привести к тому, что модель становится "потерянной в середине". Вы можете просмотреть возвращенные источники на вкладках "Процесс мысли " и "Поддержка содержимого " области "Ссылка ".
Включить категорию Указывает категории, которые необходимо включить при создании результатов поиска. Используйте раскрывающийся список для выбора. Действие по умолчанию — включить все категории.
Исключить категорию Указывает все категории, которые следует исключить из результатов поиска. В наборе данных по умолчанию нет категорий.
Используйте семантический ранкер для извлечения Включает семантический рангировщик поиска ИИ Azure, модель, которая повторно упорядочивает результаты поиска на основе семантического сходства с запросом пользователя.
Использование семантических подписей Отправляет семантические заголовки в LLM вместо полного результата поиска. Семантическая подпись извлекается из результата поиска во время процесса семантического ранжирования.
Советы по дальнейшим вопросам Просит LLM предложить последующие вопросы на основе запроса пользователя.
Режим извлечения Задает режим извлечения для запроса поиска ИИ Azure. Действие по умолчанию — Vectors + Text (Hybrid), которое использует сочетание векторного поиска и полнотекстового поиска. Параметр Vectors использует только векторный поиск. В параметре "Текст" используется только полнотекстовый поиск. Гибридный подход является оптимальным.
Ответы на завершение чата потоковой передачи Непрерывно передает ответ пользовательскому интерфейсу чата по мере создания содержимого.

Ниже описан процесс изменения параметров.

  1. В браузере выберите параметр "Параметры разработчика ".

  2. Установите флажок "Предложить дальнейшие вопросы ", чтобы включить этот параметр, и нажмите кнопку "Закрыть ", чтобы применить изменение параметра.

  3. В приложении чата повторно введите этот вопрос, введя текст в поле вопроса:

    What happens in a performance review?
    

    Ответ приложения чата теперь включает предлагаемые ответы на следующие вопросы:

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

  4. Снова выберите опцию Настройки разработчика и отмените выбор Использовать семантический ранжировщик для поиска. Закройте параметры.

  5. Задайте тот же вопрос еще раз и обратите внимание на разницу в ответе от приложения чата.

    С помощью семантического рангера: "Во время проверки производительности в Contoso Electronics ваш руководитель обсудит производительность за прошлый год и предоставит отзыв о областях для улучшения. Вы также сможете обсудить свои цели и цели в предстоящем году. Обзор является двусторонним диалогом между руководителями и сотрудниками, и сотрудников призывают быть честными и открытыми во время процесса (1). Отзывы, предоставляемые во время проверки, должны быть положительными и конструктивными, направленными на то, чтобы помочь сотрудникам развиваться и расти в своих ролях. Сотрудники получат письменное сводку по их оценке производительности, которая будет включать оценку их производительности, отзывов и целей в предстоящий год (1)."

    Без семантического рангера: "Во время проверки производительности в Contoso Electronics ваш руководитель обсудит производительность за прошлый год и предоставит отзыв о областях для улучшения. Это двусторонний диалог, где вы поощряете быть честным и открытым (1). Отзывы, предоставляемые во время обзора, должны быть положительными и конструктивными, направленными на то, чтобы помочь вам развивать и расти в вашей роли. Вы получите письменное резюме обзора, включая рейтинг вашей производительности, отзывов и целей в предстоящий год (1)."

Очистка ресурсов

После завершения упражнения рекомендуется удалить все ресурсы, которые больше не требуются.

Очистка ресурсов Azure

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

Удалите ресурсы Azure и удалите исходный код, выполнив следующую azd команду:

azd down --purge --force

Ниже перечислены переключатели команд:

  • purge: Удаленные ресурсы удаляются немедленно. Этот параметр позволяет повторно использовать метрику токенов Azure OpenAI в минуту (TPM).
  • force: удаление происходит без уведомления, не требуя согласия пользователя.

Работы по очистке GitHub Codespaces

Удаление среды GitHub Codespaces гарантирует, что вы можете максимально использовать объем бесплатных часовых квот на ядро, предоставляемых для учетной записи.

Внимание

Для получения дополнительной информации о правах на использование учетной записи GitHub см. раздел GitHub Codespaces — ежемесячное включенное хранилище и основные часы.

  1. Войдите в панель мониторинга GitHub Codespaces.

  2. На панели мониторинга найдите присутствующие на данный момент кодовые пространства, взятые из Azure-Samples/azure-search-openai-demo репозитория GitHub.

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

  3. Откройте контекстное меню для пространства кода и нажмите кнопку "Удалить":

    Снимок экрана: контекстное меню для одного пространства кода с выделенным параметром удаления.

Получить помощь

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

Если проблема не устранена, добавьте проблему на веб-страницу "Проблемы репозитория".

  • Получите исходный код для примера, используемого в этой статье.
  • Лучшие практики проектирования архитектуры решения для создания приложения чата с Azure OpenAI
  • Управление доступом в генеративных приложениях ИИ с помощью Azure AI Search
  • Создайте готовое для предприятия решение OpenAI с помощью Azure API Management.
  • Превосходящий векторный поиск с гибридными возможностями извлечения и ранжирования