Начало работы с примером корпоративного чата .NET с помощью RAG

В этой статье показано, как развернуть и запустить пример приложения корпоративного чата для .NET. В этом примере реализовано приложение чата с помощью C#, Службы Azure OpenAI и получения дополненного поколения (RAG) в службе "Поиск ИИ Azure" , чтобы получить ответы о преимуществах сотрудников в вымышленной компании. Приложение чата для сотрудников заполняется PDF-файлами, включая руководство сотрудника, документ о преимуществах и список ролей и ожиданий компании.

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

  • Разверните приложение чата в Azure.
  • Получите ответы о преимуществах сотрудников.
  • Измените параметры, чтобы изменить поведение ответов.

После выполнения этой процедуры можно начать изменение нового проекта с помощью пользовательского кода.

Эта статья является частью коллекции статей, показывающих, как создать приложение чата с помощью Azure Open AI Service и поиска ИИ Azure.

Другие статьи в коллекции включают:

Обзор архитектуры

В этом примере приложения вымышленная компания contoso Electronics предоставляет сотрудникам чата возможность задавать вопросы о преимуществах, внутренних политиках, а также описаниях заданий и ролях.

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

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

  • Пользовательский интерфейс — интерфейс чата приложения — это приложение Blazor WebAssembly . Этот интерфейс принимает пользовательские запросы, маршрутизирует запросы к серверной части приложения и отображает созданные ответы.
  • Серверная часть — серверная часть приложения — это ASP.NET базовый минимальный API. Серверная часть размещает статическое веб-приложение Blazor и управляет взаимодействием между различными службами. Службы, используемые в этом приложении, включают:
    • Когнитивный поиск Azure — индексирует документы из данных, хранящихся в учетной записи служба хранилища Azure. Это делает документы доступными для поиска с помощью возможностей векторного поиска .
    • Служба Azure OpenAI — предоставляет большие языковые модели (LLM) для создания ответов. Семантический ядро используется вместе со службой Azure OpenAI для оркестрации более сложных рабочих процессов ИИ.

Себестоимость

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

Дополнительные сведения см. в примерах Azure Samples: Cost in the sample repo.

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

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

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

  1. подписка Azure — создайте бесплатную учетную запись.
  2. Разрешения учетной записи Azure. Учетная запись Azure должна иметь разрешения Microsoft.Authorization/roleAssignments/write, такие как доступ пользователей Администратор istrator или владелец.
  3. Доступ, предоставленный Azure OpenAI в требуемой подписке Azure. В настоящее время доступ к этой службе предоставляется только приложением. Вы можете подать заявку на доступ к Azure OpenAI, выполнив форму по адресу https://aka.ms/oai/access. Если у вас возникли проблемы, создайте соответствующий запрос в этом репозитории, чтобы связаться с нами.
  4. учетная запись GitHub;

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

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

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

Внимание

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

  1. Запустите процесс создания нового пространства кода GitHub в main ветви Azure-Samples/azure-search-openai-demo-csharp репозитория GitHub.

  2. Щелкните правой кнопкой мыши следующую кнопку и выберите "Открыть ссылку" в новых окнах , чтобы одновременно иметь среду разработки и документацию.

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

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

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

  5. В терминале в нижней части экрана войдите в Azure с помощью Интерфейса командной строки разработчика Azure.

    azd auth login
    
  6. Скопируйте код из терминала и вставьте его в браузер. Следуйте инструкциям по проверке подлинности с помощью учетной записи Azure.

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

Развертывание и запуск

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

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

Внимание

Ресурсы Azure, созданные в этом разделе, несут немедленные затраты, в первую очередь из ресурса поиска ИИ Azure. Эти ресурсы могут начислять затраты, даже если вы прерываете команду до его полного выполнения.

  1. Выполните следующую команду Командной строки разработчика Azure, чтобы подготовить ресурсы Azure и развернуть исходный код:

    azd up
    
  2. Когда вам будет предложено ввести имя среды, сохраните его коротким и строчным регистром. Например, myenv. Используется в качестве части имени группы ресурсов.

  3. При появлении запроса выберите подписку, чтобы создать ресурсы.

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

  5. Если вам будет предложено указать расположение для модели OpenAI, выберите расположение, которое находится рядом с вами. Если то же расположение доступно в качестве первого расположения, выберите это.

  6. Дождитесь развертывания приложения. Для завершения развертывания может потребоваться до 20 минут.

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

  8. Выберите этот URL-адрес, чтобы Deploying service web открыть приложение чата в браузере.

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

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

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

  1. В браузере перейдите на страницу чата с помощью левой навигации.

  2. Выберите или введите "Что входит в план Northwind Health Plus, который не является стандартным?" в текстовом поле чата.

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

  3. В ответе выберите ссылку. Всплывающее окно откроется, отображающее источник информации.

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

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

    Вкладка Описание
    Процесс мысли Это сценарий взаимодействия в чате. Вы можете просмотреть системный запрос (content) и вопрос пользователя (content).
    Вспомогательное содержимое Сюда входят сведения для ответа на ваш вопрос и исходный материал. Количество ссылок на исходные материалы отмечается в параметрах разработчика. Значение по умолчанию — 3.
    Источник Откроется исходная страница, содержащая ссылку.
  5. Когда вы закончите, вернитесь на вкладку ответов.

Использование параметров приложения чата для изменения поведения ответов

Аналитика чата определяется моделью OpenAI и параметрами, которые используются для взаимодействия с моделью.

Снимок экрана: параметры разработчика чата.

Параметр Description
Переопределение шаблона запроса Это запрос, используемый для создания ответа.
Получение этого большого количества результатов поиска Это количество результатов поиска, используемых для создания ответа. Эти источники отображаются в процессе мысли и вкладках содержимого поддержки ссылки.
Исключить категорию Это категория документов, исключенных из результатов поиска.
Использование семантического ранга для извлечения Это функция службы "Поиск ИИ Azure", использующая машинное обучение для повышения релевантности результатов поиска.
Режим извлечения Vectors + Text означает, что результаты поиска основаны на тексте документов и внедрении документов. Векторы означает, что результаты поиска основаны на внедрениях документов. Текст означает, что результаты поиска основаны на тексте документов.
Использование сводок в контекстном запросе вместо целых документов Use semantic ranker Если оба и Use query-contextual summaries проверка, LLM использует подпись, извлеченные из ключевых проходов, а не все проходы, в документах с наивысшим рейтингом.
Советы по дальнейшим вопросам Предложите в приложении чата дальнейшие вопросы на основе ответа.

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

  1. В браузере щелкните значок шестеренки в правом верхнем углу страницы.

  2. Проверьте следующие вопросы, проверка box и задайте один и тот же вопрос еще раз.

    What is my deductible?
    

    В чате возвращаются предложения по следующим вопросам:

    • "Что такое общий доступ к затратам для сетевых служб?"
    • "Являются ли медицинские услуги по профилактике подвержены вычитаемой?"
    • "Как работает вычитаемое по рецепту препараты?"
  3. На вкладке Параметры отмените выбор семантического ранджера для извлечения.

  4. Задайте тот же вопрос еще раз.

    What is my deductible?
    
  5. Что такое разница в ответах?

    Ответ, который использовал семантический рангер, предоставил один ответ: The deductible for the Northwind Health Plus plan is $2,000 per year

    Ответ без семантического ранжирования вернул менее прямой ответ: Based on the information provided, it is unclear what your specific deductible is. The Northwind Health Plus plan has different deductible amounts for in-network and out-of-network services, and there is also a separate prescription drug deductible. I would recommend checking with your provider or referring to the specific benefits details for your plan to determine your deductible amount

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

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

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

Выполните следующую команду Командной строки разработчика Azure, чтобы удалить ресурсы Azure и удалить исходный код:

azd down --purge

Очистка GitHub Codespaces

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

Внимание

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

  1. Войдите на панель мониторинга GitHub Codespaces (https://github.com/codespaces).

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

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

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

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

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

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

Если проблема не устранена, зайдите в журнал проблемы репозитория.

Следующие шаги