Этот образец демонстрирует несколько подходов к созданию CATGPT-подобного опыта по сравнению с вашими собственными данными, используя шаблон получения дополнительной генерации поиска. Он использует Azure Openai Service для доступа к модели CHATGPT (GPT-35-Turbo) и Azure AI Search для индексации и поиска данных.
Репо включает примеры данных, поэтому он готов попробовать закончить до конца. В этом примере приложения мы используем фиктивную компанию под названием Contoso Real Estate, и этот опыт позволяет его клиентам задавать вопросы поддержки об использовании своих продуктов. Пример данных включает в себя набор документов, которые описывают его условия обслуживания, политику конфиденциальности и руководство по поддержке.
Приложение сделано из нескольких компонентов, в том числе:
Посмотрите видео обзора приложения
ВАЖНО: Чтобы развернуть и запустить этот образец, вам понадобится:
Microsoft.Authorization/roleAssignments/write
разрешения, такие как администратор управления доступа на основе ролей, администратор доступа пользователя или владелец. Если у вас нет разрешений на уровне подписки, они должны быть предоставлены вам с RBAC для существующей группы ресурсов и развертываться в этой существующей группе.Microsoft.Resources/deployments/write
разрешения на уровень подписки. Цены могут варьироваться в зависимости от региона и использования. Точные затраты не могут быть оценены. Вы можете попробовать калькулятор ценообразования Azure для приведенных ниже ресурсов.
azd down --purge
.
Есть несколько способов успешной настройки этого проекта.
Самый простой способ начать с кодами GitHub, которые предоставляют предварительные фигурации для настройки всех инструментов для вас. Подробнее читайте ниже. В качестве альтернативы вы можете настроить локальную среду, разыгрывая инструкции ниже.
Вы можете запустить это репо практически, используя GitHub Codespaces, который откроет веб-код VS в вашем браузере:
Аналогичным вариантом на Codespaces является удаленные контейнеры с кодом, которые откроют проект в вашем экземпляре кода локального VS с использованием расширения контейнеров Dev:
pwsh.exe
от команды PowerShell. Если это не удается, вам, вероятно, нужно обновить PowerShell.Затем получите код проекта:
azd auth login
azd init -t azure-search-openai-javascript
Выполните следующую команду, если у вас нет ранее существовавших служб Azure и вы хотите начать с нового развертывания.
azd up
- это предоставит Azure Resources и развернете этот образец для этих ресурсов, включая создание индекса поиска на основе файлов, найденных в папке ./data
.eastus2
. Вы можете установить другое место с azd env set AZURE_OPENAI_RESOURCE_GROUP_LOCATION {location}
. В настоящее время принимается только короткий список мест. Этот список местоположения основан на таблице доступности модели OpenAI и может устареть в качестве изменения доступности.eastus2
. Вы можете установить другое место с azd env set AZURE_WEBAPP_LOCATION {location}
. В настоящее время принимается только короткий список мест. Обратите внимание, что статическое веб -приложение - это глобальный сервис, и выбранное вами местоположение повлияет только на приложение управляемых функций, которое не используется в этом образце.Это будет выглядеть следующим образом:
Примечание: для полного развертывания приложения может потребоваться более 15 минут.
Если у вас уже есть существующие ресурсы Azure, вы можете повторно использовать их, установив значения среды azd
.
azd env set AZURE_RESOURCE_GROUP {Name of existing resource group}
azd env set AZURE_LOCATION {Location of existing resource group}
azd env set AZURE_OPENAI_SERVICE {Name of existing OpenAI service}
azd env set AZURE_OPENAI_RESOURCE_GROUP {Name of existing resource group that OpenAI service is provisioned to}
azd env set AZURE_OPENAI_CHATGPT_DEPLOYMENT {Name of existing ChatGPT deployment}
. Требуется только в том случае, если ваше развертывание CHATGPT не является чатом по умолчанию.azd env set AZURE_OPENAI_EMBEDDING_DEPLOYMENT {Name of existing GPT embedding deployment}
. Требуется только в том случае, если ваши внедрения не являются «внедрением» по умолчанию. azd env set AZURE_SEARCH_SERVICE {Name of existing Azure AI Search service}
azd env set AZURE_SEARCH_SERVICE_RESOURCE_GROUP {Name of existing resource group with ACS service}
azd up
, то запустите azd env set AZURE_SEARCH_SERVICE_LOCATION {Location of existing service}
azd env set AZURE_SEARCH_SERVICE_SKU {Name of SKU}
. Бесплатный уровень не будет работать, поскольку он не поддерживает управляемую личность. (См. Другие возможные значения) Вы также можете использовать существующую учетную запись хранения. azd env set
./infra/main.parameters.json
Теперь вы можете запустить azd up
, следуя шагам развертывания с нуля выше. Это будет обеспечить ресурсы и развернуть код.
Если вы только изменили код Backend/Frontend в папке app
, вам не нужно повторно предоставлять ресурсы Azure. Вы можете просто бежать:
azd deploy
Если вы изменили файлы инфраструктуры ( infra
Polder или azure.yaml
), вам нужно будет повторно предоставить ресурсы Azure. Вы можете сделать это, работая:
azd up
Чтобы дать кому -то еще доступ к полностью развернутой и существующей среде, либо вы, либо они можете выполнить эти шаги:
azd init -t azure-search-openai-javascript
или клонировать этот репозиторий.azd env refresh -e {environment name}
им понадобится имя среды AZD, идентификатор подписки и местоположение для запуска этой команды. Вы можете найти эти значения в вашем файле .azure/{env name}/.env
. Это заполнит их файл .env
Environment Environment со всеми настройками, необходимыми для запуска приложения локально.AZURE_PRINCIPAL_ID
либо в этом файле .env
, либо в активной оболочке на их идентификатор Azure, который они могут получить с az ad signed-in-user show
../scripts/roles.ps1
или ./scripts/roles.sh
, чтобы назначить все необходимые роли пользователю. Если у них нет необходимого разрешения для создания ролей в подписке, вам может потребоваться запустить этот скрипт для них. Как только сценарий запускается, они должны быть в состоянии запустить приложение локально. Чтобы очистить все ресурсы, созданные этим образцом:
azd down --purge
y
y
Ресурсная группа и все ресурсы будут удалены.
По умолчанию в развернутом веб -приложении Azure не будет включено ограничения на аутентификацию или доступ, то есть любой, у кого есть маршрутный сетевой доступ к веб -приложению, может общаться с вашими индексированными данными. Вы можете потребовать аутентификации на свой идентификатор Azure Entra, следуя учебному пособию Add App Authentication и настроив его на развернутое веб -приложение.
Чтобы затем ограничить доступ к конкретному набору пользователей или групп, вы можете выполнить шаги от ограничения приложения Azure Entra на набор пользователей путем изменения «требуемого назначения?» Опция в приложении Enterprise, а затем назначает доступ пользователям/группам. Пользователи, не предоставленные явным доступом, получат сообщение об ошибке -AADSTS50105: Ваш администратор настроил приложение <pplic_name> блокировать пользователей, если они не будут предоставлены («назначены») доступа к приложению .--
Мы рекомендуем развернуть дополнительные механизмы безопасности. Когда это применимо, рассмотрите возможность настройки VNET или настройку политики прокси.
По умолчанию развернутый поисковый API разрешит запросы только из того же происхождения, что и развернутое происхождение веб -приложения. Чтобы позволить Cors для фронта, размещенного на другом происхождении, запустите:
azd env set ALLOWED_ORIGIN https://<your-domain.com>
azd up
Вы можете запустить локально только после успешного запуска команды azd up
.
azd auth login
azd env get-values > .env
чтобы получить переменные среды для приложенияaz login
npm start
или запустите задачу «VS -код: запустить приложение», чтобы запустить проект локально. Однажды в веб -приложении:
Служба поиска API реализует протокол HTTP для приложений для AIT. Его можно поменять на любую службу, которая реализует тот же протокол, как и бэтэнд Python в этом хранилище, а не в реализации Node.js, представленной в этом репо.
Для этого следуйте этим шагам:
azd env get-values | grep WEBAPP_URI
, чтобы получить URL.http://localhost:5173
.https://<your_codespace_base_url>-5173.app.github.dev
.azd env set ALLOWED_ORIGIN <your_frontend_url>
azd env get-values | grep BACKEND_URI
.azd env set BACKEND_URI <your_backend_url>
. Если вы хотите использовать развернутое веб -приложение, запустите azd up
до RedPloy.
Если вы хотите использовать локальное веб -приложение на своей машине или в CodeSpaces, запустите:
# Export the environment variable.
# The syntax may be different depending on your shell or if you're using Windows.
export BACKEND_URI= < your_backend_url >
# Start the app
npm start --workspace=webapp
Этот образец состоит из двух приложений: бэкэнд -сервис и API, развернутые в приложениях Azure Container, и приложением Frontend, развернутое в Azure Static Web Apps. По умолчанию приложение для развернутого контейнера Azure не будет включено ограничения аутентификации или доступа, что означает, что любой, у кого есть маршрутизируемый сетевой доступ к приложению контейнера, может общаться с вашими индексированными данными. Вы можете потребовать аутентификации для вашего идентификатора Azure Entra, следуя учебному пособию по аутентификации приложения Add Container и настроив его на развернутое приложение Azure Container.
Чтобы ограничить доступ к конкретному набору пользователей или групп, вы можете выполнить шаги от ограничения вашего приложения Azure Entra до набора пользователей, изменяя «требуемое назначение?» Опция в приложении Enterprise, а затем назначает доступ пользователям/группам. Пользователи, не предоставленные явным доступом, получат сообщение об ошибке -AADSTS50105: Ваш администратор настроил приложение <pplic_name> блокировать пользователей, если они не будут предоставлены («назначены») доступа к приложению .--
Этот образец предназначен для того, чтобы стать отправной точкой для вашего собственного производственного приложения, но вы должны провести тщательный обзор безопасности и производительности перед тем, как развернуть до производства. Вот некоторые вещи, которые следует учитывать:
chatGptDeploymentCapacity
и параметры embeddingDeploymentCapacity
в infra/main.bicep
до максимальной емкости вашей учетной записи. Вы также можете просмотреть вкладку квотов в Azure Openai Studio, чтобы понять, сколько у вас есть возможностей.Standard_LRS
. Чтобы повысить вашу устойчивость, мы рекомендуем использовать Standard_ZRS
для развертывания производства, которые вы можете указать, используя свойство sku
в модуле storage
в infra/main.bicep
.Standard
SKU с бесплатным параметром семантического поиска, который дает вам 1000 бесплатных запросов в месяц. Предполагая, что ваше приложение будет испытывать более 1000 вопросов, вы должны либо изменить semanticSearch
на «стандартный», либо отключить семантический поиск полностью в вариантах запроса. Если вы видите ошибки по поводу превышения потенциала поиска, вам может быть полезным увеличить количество реплик, изменяя replicaCount
в infra/core/search/search-services.bicep
Chunking позволяет нам ограничить объем информации, которую мы отправляем в OpenAI из -за пределов токенов. Разбивая контент, он позволяет нам легко найти потенциальные куски текста, которые мы можем ввести в OpenAI. Метод подсчета мы используем раздвижное окно текста, такое, что предложения, которые заканчивают один кусок, начнут следующее. Это позволяет нам уменьшить вероятность потерять контекст текста.
Чтобы загрузить больше документов, поместите их в папку данных и запустите ./scripts/index-data.sh
или ./scripts/index-data.ps1
.
Еще один популярный репозиторий для этого варианта использования здесь: https://github.com/microsoft/sample-app-aoai-chatgpt/
Этот репозиторий предназначен для использования клиентами, использующими Azure Openai Studio и портал Azure для настройки. Это также включает в себя поддержку azd
для людей, которые хотят полностью развернуть его с нуля.
Основные различия:
Сравнение функций:
Особенность | Azure-Search-Openai-Javascript | Образец-ап-аай-чатгпт |
---|---|---|
Тряпичный подход | Несколько подходов | Только через api chatcomplotion data_sources |
Векторная поддержка | ✅ Да | ✅ Да |
Проглатывание данных | ✅ Да (MD) | ✅ Да (PDF, TXT, MD, HTML) |
Постоянная история чата | Нет (только вкладка браузера) | ✅ Да, в Cosmosdb |
Сравнение технологий:
Технический | Azure-Search-Openai-Javascript | Образец-ап-аай-чатгпт |
---|---|---|
Внешний интерфейс | Реагировать/горит | Реагировать |
Бэкэнд | Node.js (Фордификация) | Питон (колба) |
Вектор дБ | Azure AI Search | Azure AI Search |
Развертывание | Разработчик Azure CLI (AZD) | Azure Portal, AZ, AZD |
Запустите эти команды:
azd env set AZURE_OPENAI_CHATGPT_MODEL gpt-4
Вам также может потребоваться скорректировать емкость в файле infra/main.bicep
, в зависимости от того, сколько TPM разрешена ваша учетная запись.
Вкладка «Чат» использует подход, запрограммированный в чате-чтение-retreie-read.ts. Вкладка Ask использует подход, запрограммированный в Ask-retreief-then-read.ts. Существует также еще один подход к одному/ASK, [используя агента] (https://github.com/azure-samples/azure-search-openai-javascript/blob/main/packages/search/src/lib/appoachs/ask-retive-read-read.ts.
Команда azd up
поступает от CLI Dazure Developer CLI и заботится как о предоставлении ресурсов Azure, так и для развертывания кода для выбранных хостов Azure.
Команда azd up
использует файл azure.yaml
в сочетании с файлами инфраструктуры как кода .bicep
в infra/
папке. Файл azure.yaml
для этого проекта объявляет несколько «крючков» для шага расфасования и шагов постпровидцы. Команда up
сначала запускает крюк prepackage
, который устанавливает зависимости узлов и создает файлы JavaScript на основе React.js. Затем он упаковывает весь код (как Frontend, так и на бэкэнд -службах) в zip -файл, который он будет развернуть позже.
Далее это предоставляет ресурсы, основанные на main.bicep
и main.parameters.json
. На этом этапе, поскольку для места для ресурса Openai нет значения по умолчанию, он просит вас выбрать место в коротком списке доступных регионов. Затем он отправит запросы в Azure, чтобы предоставить все необходимые ресурсы. Со всем, что подготовлено, он запускает крюк postprovision
для обработки локальных данных и добавления его в индекс поиска Azure AI.
Наконец, он смотрит на azure.yaml
, чтобы определить хост Azure (в данном случае приложения для контейнеров и статические веб -приложения) и загружает службу приложений Zip в Azure. Команда azd up
теперь завершена, но для приложения может потребоваться несколько минут, чтобы приложение было полностью доступно и работало после первоначального развертывания.
Связанные команды являются azd provision
для просто предоставления (если изменяются в инфра -файлах) и azd deploy
для простого развертывания обновленного кода приложения.
Вот наиболее распространенные сценарии и решения неудачи:
Подписка ( AZURE_SUBSCRIPTION_ID
) не имеет доступа к службе Azure OpenAI. Пожалуйста, убедитесь, что AZURE_SUBSCRIPTION_ID
соответствует идентификатору, указанному в процессе запроса на доступ к Openai.
Вы пытаетесь создать ресурсы в регионах, не включенных для Azure OpenAI (например, Eg East US 2 вместо восточного США), или где модель, которую вы пытаетесь использовать, не включена. Смотрите эту матрицу доступности модели.
Вы превысили квоту, чаще всего количество ресурсов на регион. Смотрите эту статью о квотах и ограничениях.
Вы получаете «то же имя ресурса, не разрешенное» конфликты. Это, вероятно, потому, что вы запускаете образец несколько раз и удаляли ресурсы, которые вы создавали каждый раз, но забываете их очистить. Azure сохраняет ресурсы в течение 48 часов, если вы не очистите от мягкого удаления. Смотрите эту статью о чистке ресурсов.
После запуска azd up
и посещения веб -сайта вы видите «404 не найден» в браузере. Подождите 10 минут и попробуйте еще раз, так как это может быть все еще запускаться. Затем попробуйте запустить azd deploy
и подождать снова. Если вы все еще сталкиваетесь с ошибками в приложении развернутого приложения, обратитесь к этим советам по отладке приложений приложения развертывания и подать проблему, если журналы ошибок не помогут вам решить проблему.
Вы получаете ошибку 401 Principal does not have access to API/Operation
при запуске проекта локально или пытается развернуть. Вероятно, это потому, что переменные вашей среды включают AZURE_TENANT_ID
, AZURE_CLIENT_ID
и AZURE_CLIENT_SECRET
. Вы должны либо предоставить разрешения соответствующему принципалу услуги , либо удалить эти переменные из вашей среды, чтобы обеспечить нормальный доступ. Для получения более подробной информации, пожалуйста, обратитесь к Azure Identity SDK.
ПРИМЕЧАНИЕ. Документы, используемые в этой демонстрации, содержат информацию, сформированную с использованием языковой модели (Azure Open Service). Информация, содержащаяся в этих документах, предназначена только для демонстрационных целей и не отражает мнения или убеждения Microsoft. Microsoft не делает никаких представлений или гарантий любого рода, явного или подразумеваемого, о полноте, точности, надежности, пригодности или доступности в отношении информации, содержащейся в этом документе. Все права защищены на Microsoft.