Dieses Beispiel zeigt einige Ansätze zum Erstellen von ChatGPT-ähnlichen Erlebnissen über Ihre eigenen Daten mithilfe des Musters für Augmented-Ergänzung. Es verwendet den Azure OpenAI-Service, um auf das ChatGPT-Modell (GPT-35-Turbo) und die Azure-AI-Suche nach Datenindexierung und -abruf zuzugreifen.

Das Repo enthält Beispieldaten, damit es bereit ist, das Ende zu Ende zu beenden. In dieser Beispielanwendung verwenden wir ein fiktives Unternehmen namens Contoso Real Estate, und die Erfahrung ermöglicht es seinen Kunden, Supportfragen zur Nutzung seiner Produkte zu stellen. Die Beispieldaten enthalten eine Reihe von Dokumenten, die ihre Nutzungsbedingungen, Datenschutzrichtlinien und einen Unterstützungshandbuch beschreiben.
Die Anwendung erfolgt aus mehreren Komponenten, einschließlich:


Sehen Sie sich einen Videoüberblick über die App an
Wichtig: Um dieses Beispiel bereitzustellen und auszuführen, benötigen Sie:
Microsoft.Authorization/roleAssignments/write -Berechtigungen, wie z. Wenn Sie keine Berechtigungen auf Abonnementebene haben, müssen Sie Ihnen mit RBAC für eine vorhandene Ressourcengruppe und für diese vorhandene Gruppe eingesetzt werden.Microsoft.Resources/deployments/write -Berechtigungen auf Abonnementebene. Die Preisgestaltung kann je nach Region und Nutzung variieren. Genaue Kosten können nicht geschätzt werden. Sie können den Azure -Preisrechner für die folgenden Ressourcen ausprobieren.
azd down --purge .
Es gibt mehrere Möglichkeiten, dieses Projekt erfolgreich einzurichten.
Der einfachste Weg, um loszulegen, ist mit Github -Codenspaces, die Vorkonfigurationen zur Einrichtung aller Tools für Sie bietet. Lesen Sie weiter unten. Alternativ können Sie Ihre lokale Umgebung einrichten, die die folgenden Anweisungen verfolgen.
Sie können dieses Repo virtuell mit GitHub-Codespazis ausführen, mit denen ein webbasiertes VS-Code in Ihrem Browser geöffnet wird:
Eine ähnliche Option wie CodeSPaces sind VS -Code -Remote -Container, die das Projekt in Ihrer lokalen VS -Code -Instanz mithilfe der Dev -Container -Erweiterung öffnen:
pwsh.exe aus einem PowerShell -Befehl ausführen können. Wenn dies fehlschlägt, müssen Sie wahrscheinlich PowerShell verbessern.Holen Sie sich dann den Projektcode:
azd auth loginazd init -t azure-search-openai-javascript ausFühren Sie den folgenden Befehl aus, wenn Sie keine bereits bestehenden Azure-Dienste haben und von einer neuen Bereitstellung beginnen möchten.
azd up - Dies wird Azure -Ressourcen bereitstellen und dieses Beispiel für diese Ressourcen bereitstellen, einschließlich des Erstellens des Suchindex basierend auf den in dem ./data gefundenen Dateien.eastus2 eingesetzt. Sie können einen anderen Speicherort mit azd env set AZURE_OPENAI_RESOURCE_GROUP_LOCATION {location} festlegen. Derzeit wird nur eine kurze Liste von Standorten akzeptiert. Diese Standortliste basiert auf der OpenAI -Modellverfügbarkeitstabelle und kann bei Änderungen der Verfügbarkeit veraltet sein.eastus2 bereitgestellt. Sie können einen anderen Speicherort mit azd env set AZURE_WEBAPP_LOCATION {location} festlegen. Derzeit wird nur eine kurze Liste von Standorten akzeptiert. Beachten Sie, dass die statische Web -App ein globaler Dienst ist und der von Ihnen gewählte Ort nur die App verwaltete Funktionen beeinflusst, die in diesem Beispiel nicht verwendet wird.Es wird wie Folgendes aussehen:

Hinweis: Es kann mehr als 15 Minuten dauern, bis die Anwendung vollständig bereitgestellt wird.
Wenn Sie bereits vorhandene Azure-Ressourcen haben, können Sie diese wiederverwenden, indem Sie azd Umgebungswerte festlegen.
azd env set AZURE_RESOURCE_GROUP {Name of existing resource group}azd env set AZURE_LOCATION {Location of existing resource group} ausführen azd env set AZURE_OPENAI_SERVICE {Name of existing OpenAI service} ausazd 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} aus. Nur benötigt, wenn Ihre Chatgpt -Bereitstellung nicht der Standard -Chat ist.azd env set AZURE_OPENAI_EMBEDDING_DEPLOYMENT {Name of existing GPT embedding deployment} . Nur erforderlich, wenn Ihre Einbettungseinsatz nicht die Standardeinbettung ist. azd env set AZURE_SEARCH_SERVICE {Name of existing Azure AI Search service} ausazd env set AZURE_SEARCH_SERVICE_RESOURCE_GROUP {Name of existing resource group with ACS service} aus.azd up -Schritt auswählen, führen Sie azd env set AZURE_SEARCH_SERVICE_LOCATION {Location of existing service} aus.}azd env set AZURE_SEARCH_SERVICE_SKU {Name of SKU} aus. Die kostenlose Stufe funktioniert nicht, da sie die verwaltete Identität nicht unterstützt. (Siehe andere mögliche Werte) Sie können auch ein vorhandenes Speicherkonto verwenden. azd env set ./infra/main.parameters.json
Jetzt können Sie azd up ausführen und den Schritten im Bereitstellen von Grund auf neu ausführen. Dadurch werden Ressourcen bereitgestellt und den Code bereitgestellt.
Wenn Sie den Backend-/Frontend-Code im app Ordner nur geändert haben, müssen Sie die Azure-Ressourcen nicht neu aufstellen. Sie können einfach rennen:
azd deploy
Wenn Sie die Infrastrukturdateien ( infra Ordner oder azure.yaml ) geändert haben, müssen Sie die Azure-Ressourcen neu aufstellen. Sie können das tun, indem Sie laufen:
azd up
Um jemand anderem Zugriff auf eine vollständig eingesetzte und vorhandene Umgebung zu gewähren, entweder Sie oder sie können folgende Schritte befolgen:
azd init -t azure-search-openai-javascript oder klonen Sie dieses Repository.azd env refresh -e {environment name} Sie benötigen den AZD -Umgebungsnamen, die Abonnement -ID und den Ort, um diesen Befehl auszuführen. Sie können diese Werte in Ihrer Datei .azure/{env name}/.env finden. Dadurch wird die .env -Datei der AZD -Umgebung mit allen Einstellungen ausgefüllt, die für die lokale Ausführung der App erforderlich sind.AZURE_PRINCIPAL_ID entweder in dieser .env Datei oder in der aktiven Shell auf ihre Azure-ID ein, die sie mit az ad signed-in-user show ../scripts/roles.ps1 oder ./scripts/roles.sh , um dem Benutzer alle erforderlichen Rollen zuzuweisen. Wenn sie nicht über die erforderliche Erlaubnis verfügen, Rollen im Abonnement zu erstellen, müssen Sie dieses Skript möglicherweise für sie ausführen. Sobald das Skript ausgeführt wird, sollten sie in der Lage sein, die App lokal auszuführen. So säubern Sie alle Ressourcen, die durch dieses Beispiel erstellt wurden:
azd down --purgey einy einDie Ressourcengruppe und alle Ressourcen werden gelöscht.
Standardmäßig ist die bereitgestellte Azure -Web -App keine Authentifizierungs- oder Zugriffsbeschränkungen aktiviert, was bedeutet, dass jeder, der einen routbaren Netzwerkzugriff auf die Web -App hat, mit Ihren indizierten Daten chatten kann. Sie können eine Authentifizierung in Ihrer Azure Enra -ID benötigen, indem Sie das Tutorial für add App -Authentifizierung folgen und mit der bereitgestellten Web -App einrichten.
Um den Zugriff auf eine bestimmte Reihe von Benutzern oder Gruppen zu beschränken, können Sie die Schritte von der Einschränkung Ihrer Azure Enra -App auf eine Reihe von Benutzern befolgen, indem Sie "Zuweisungen erforderlich" ändern? Option unter der Enterprise -Anwendung und dann zu Zugriff Benutzer/Gruppen zugewiesen. Benutzer haben keinen expliziten Zugriff gewährt, erhält die Fehlermeldung -aAdSts50105: Ihr Administrator hat die Anwendung <APP_NAME> für die Blockierung von Benutzern konfiguriert, es sei denn
Wir empfehlen, zusätzliche Sicherheitsmechanismen bereitzustellen. Wenn zutreffend, sollten Sie ein Vnet einrichten oder eine Proxy -Richtlinie einrichten.
Standardmäßig erlaubt die bereitgestellte Such -API nur Anforderungen aus demselben Ursprung wie die bereitgestellte Web -App -Herkunft. Um CORs für einen Frontend zu aktivieren, der auf einem anderen Ursprung gehostet wird, rennen Sie:
azd env set ALLOWED_ORIGIN https://<your-domain.com>azd up Sie können erst lokal ausführen, nachdem Sie den Befehl azd up erfolgreich ausgeführt haben.
azd auth loginazd env get-values > .env aus, um die Umgebungsvariablen für die App zu erhaltenaz login ausnpm start oder führen Sie die "VS -Code -Aufgabe: Start App" aus oder starten Sie das Projekt lokal. Einmal in der Web -App:
Der Such -API -Dienst implementiert das HTTP -Protokoll für AI -Chat -Apps. Es kann mit jedem Dienst ausgetauscht werden, der dasselbe Protokoll wie der Python -Backend -Client in diesem Repository anstelle der in diesem Repo vorgestellten Node.js -Implementierung implementiert.
Befolgen Sie dazu die folgenden Schritte:
azd env get-values | grep WEBAPP_URI um die URL zu erhalten.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> aus. Wenn Sie die bereitgestellte Web -App verwenden möchten, führen Sie azd up .
Wenn Sie die lokale Web -App auf Ihrem Computer oder in Codenspaces verwenden möchten, führen Sie aus:
# 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=webappDiese Probe besteht aus zwei Anwendungen: einem Backend -Dienst und einer API, die in Azure Container -Apps bereitgestellt wird, und eine Frontend -Anwendung, die für Azure statische Web -Apps bereitgestellt wird. Standardmäßig verfügt die bereitgestellte Azure -Container -App über keine Authentifizierungs- oder Zugriffsbeschränkungen. Dies bedeutet, dass jeder, der einen routbaren Netzwerkzugriff auf die Container -App hat, mit Ihren indizierten Daten chatten kann. Sie können eine Authentifizierung in Ihrer Azure Enra -ID benötigen, indem Sie das Tutorial für Container -App -Authentifizierung hinzufügen und gegen die bereitgestellte Azure -Container -App einrichten.
Um den Zugriff auf eine bestimmte Reihe von Benutzern oder Gruppen einzuschränken, können Sie die Schritte von der Einschränkung Ihrer Azure Enra -App auf eine Reihe von Benutzern befolgen, indem Sie "Erforderliche Zuweisungen" ändern? Option unter der Enterprise -Anwendung und dann zu Zugriff Benutzer/Gruppen zugewiesen. Benutzer haben keinen expliziten Zugriff gewährt, erhält die Fehlermeldung -aAdSts50105: Ihr Administrator hat die Anwendung <APP_NAME> für die Blockierung von Benutzern konfiguriert, es sei denn
Dieses Beispiel ist ein Ausgangspunkt für Ihre eigene Produktionsanwendung. Sie sollten jedoch eine gründliche Überprüfung der Sicherheit und Leistung durchführen, bevor Sie für die Produktion bereitgestellt werden. Hier sind einige Dinge zu beachten:
chatGptDeploymentCapacity und die Einbindung von Parametern embeddingDeploymentCapacity in infra/main.bicep in die maximale Kapazität Ihres Kontos ändern. Sie können auch die Registerkarte Quotas in Azure Openai Studio anzeigen, um zu verstehen, wie viel Kapazität Sie haben.Standard_LRS -SKU. Um Ihre Resilienz zu verbessern, empfehlen wir die Verwendung Standard_ZRS für Produktionsbereitstellungen, die Sie mithilfe der sku -Eigenschaft unter dem storage in infra/main.bicep angeben können.Standard -SKU mit der kostenlosen semantischen Suchoption, mit der Sie 1000 kostenlose Anfragen pro Monat erhalten. Angenommen, Ihre App hat mehr als 1000 Fragen, sollten Sie entweder semanticSearch in "Standard" ändern oder die semantische Suche vollständig in den Anforderungsoptionen deaktivieren. Wenn Sie feststellen, dass Fehler über die Überschreitung von Suchdienstleistungen überschritten werden, ist es möglicherweise hilfreich, die Anzahl der Repliken zu erhöhen, indem sie replicaCount in infra/core/search/search-services.bicep ändern.Durch das Chunking können wir die Anzahl der Informationen einschränken, die wir aufgrund von Token -Grenzen an OpenAI senden. Durch das Aufbrechen des Inhalts können wir leicht potenzielle Textbrocken finden, die wir in OpenAI injizieren können. Die Methode des Chunking Wir verwenden ein Schiebeberfen des Textes, so dass Sätze, die einen Chunk beenden, den nächsten starten. Dies ermöglicht es uns, die Wahrscheinlichkeit zu verringern, den Kontext des Textes zu verlieren.
Um weitere Dokumente hochzuladen, legen Sie sie in den Daten/den Ordner und führen Sie ./scripts/index-data.sh oder ./scripts/index-data.ps1 aus.
Ein weiteres beliebtes Repository für diesen Anwendungsfall ist hier: https://github.com/microsoft/sample-app-aai-chatgpt/
Dieses Repository wurde für die Verwendung von Kunden entwickelt, die Azure OpenAI Studio und Azure Portal zum Setup verwenden. Es beinhaltet auch azd -Unterstützung für Leute, die sie vollständig von Grund auf neu einsetzen möchten.
Die Hauptunterschiede:
Feature -Vergleich:
| Besonderheit | Azure-Search-Openai-JavaScript | Sample-App-Aoai-Chatgpt |
|---|---|---|
| Lag -Ansatz | Mehrere Ansätze | Nur über ChatCompletion API data_Sources |
| Vektorunterstützung | ✅ Ja | ✅ Ja |
| Datenaufnahme | ✅ Ja (MD) | ✅ Ja (PDF, TXT, MD, HTML) |
| Anhaltende Chat -Geschichte | Nein (nur Browser -Registerkarte) | ✅ Ja, in CosmosDB |
Technologievergleich:
| Technik | Azure-Search-Openai-JavaScript | Sample-App-Aoai-Chatgpt |
|---|---|---|
| Frontend | Reagieren/beleuchtet | Reagieren |
| Backend | Node.js (Fastify) | Python (Flasche) |
| Vektor db | Azure AI -Suche | Azure AI -Suche |
| Einsatz | Azure Developer CLI (AZD) | Azure Portal, AZ, AZD |
Führen Sie diese Befehle aus:
azd env set AZURE_OPENAI_CHATGPT_MODEL gpt-4 Möglicherweise müssen Sie auch die Kapazität in infra/main.bicep -Datei anpassen, je nachdem, wie viel TPM Ihr Konto zulässig ist.
Auf der Registerkarte Chat wird der Ansatz verwendet, der in Chat-Read-Retieve-read.ts programmiert ist. Auf der Registerkarte Ask verwendet den Ansatz, der in Ask-Retrieve-Then-Read.TS programmiert ist. Es gibt auch einen weiteren Ansatz, [mit einem Agenten] (https://github.com/azure-amples/azure-search-openai-javascript/blob/main/packages/search/src/lib/lib/approaaches/ask-read-read.ts.
Der Befehl azd up stammt aus dem Azure -Entwickler CLI und kümmert sich sowohl um die Bereitstellung der Azure -Ressourcen als auch für die Bereitstellung von Code für die ausgewählten Azure -Hosts.
Der Befehl azd up verwendet die Datei azure.yaml in Kombination mit den Infrastruktur-As-Code .bicep Dateien im infra/ Ordner. Die azure.yaml -Datei für dieses Projekt deklariert mehrere "Hooks" für die Schritte für die Prepackage -Schritt- und Postprovisions -Schritte. Der up -Befehl führt zuerst den prepackage Hook aus, der Knotenabhängigkeiten installiert und die auf React.JS-basierten JavaScript-Dateien erstellt. Anschließend wird der gesamte Code (sowohl Frontend- als auch Backend -Dienste) in eine ZIP -Datei eingebunden, die sie später bereitstellen wird.
Als nächstes fördert es die Ressourcen basierend auf main.bicep und main.parameters.json . Da es für den OpenAI -Ressourcenstandort keinen Standardwert gibt, fordert es Sie auf, einen Ort aus einer kurzen Liste der verfügbaren Regionen auszuwählen. Anschließend werden Anfragen an Azure gesendet, um alle erforderlichen Ressourcen bereitzustellen. Mit allem, was bereitgestellt wurde, wird der postprovision -Hook ausgeführt, um die lokalen Daten zu verarbeiten und einen Azure AI -Suchindex hinzuzufügen.
Schließlich befasst sich azure.yaml , um den Azure -Host (Container -Apps und statische Web -Apps, in diesem Fall) zu bestimmen, und lädt den Reißverschluss in den Azure -App -Dienst hoch. Der Befehl azd up ist jetzt abgeschlossen, kann jedoch einige Minuten dauern, bis die App vollständig verfügbar ist und nach der ersten Bereitstellung funktioniert.
Verwandte Befehle sind azd provision für die gerechte Bereitstellung (falls sich die Infra -Dateien ändern) und azd deploy für nur aktualisierte App -Code.
Hier sind die häufigsten Szenarien und Lösungen für Fehler:
Das Abonnement ( AZURE_SUBSCRIPTION_ID ) hat keinen Zugriff auf den Azure OpenAI -Dienst. Bitte stellen Sie sicher, dass AZURE_SUBSCRIPTION_ID mit der im OpenAI -Zugriffsanforderung angegebenen ID übereinstimmt.
Sie versuchen, Ressourcen in Regionen zu erstellen, die für Azure OpenAI (z. B. US 2 anstelle von Ost USA) nicht aktiviert sind, oder wo das von Ihnen versuchte Modell nicht aktiviert ist. Siehe diese Matrix der Modellverfügbarkeit.
Sie haben eine Quote überschritten, meistens die Anzahl der Ressourcen pro Region. Siehe diesen Artikel über Quoten und Grenzen.
Sie erhalten Konflikte "gleicher Ressourcenname, die nicht zulässig sind". Das liegt wahrscheinlich daran, dass Sie die Probe mehrmals ausgeführt und die Ressourcen gelöscht haben, die Sie jedes Mal erstellt haben, aber vergessen, sie zu reinigen. Azure hält Ressourcen für 48 Stunden lang, es sei denn, Sie löschen von Soft Löschen. Siehe diesen Artikel über Reinigungsressourcen.
Nachdem Sie azd up und die Website besucht haben, sehen Sie im Browser einen "404 nicht gefunden". Warten Sie 10 Minuten und versuchen Sie es erneut, da es möglicherweise noch anfängt. Versuchen Sie dann, azd deploy auszuführen, und warten Sie erneut. Wenn Sie weiterhin Fehler mit der bereitgestellten App treffen, wenden Sie sich an diese Tipps zum Debuggen von App -Service -App -Bereitstellungen und stellen Sie ein Problem ein, wenn die Fehlerprotokolle Ihnen das Problem nicht beheben können.
Sie erhalten einen Fehler 401 Principal does not have access to API/Operation Dies liegt wahrscheinlich daran, dass Ihre Umgebungsvariablen AZURE_TENANT_ID , AZURE_CLIENT_ID und AZURE_CLIENT_SECRET enthalten. Sie sollten entweder dem zugehörigen Service -Schulleiter Berechtigungen erteilen oder diese Variablen aus Ihrer Umgebung entfernen, um einen normalen Zugang zu gewährleisten. Weitere Informationen finden Sie unter Azure Identity SDK.
Hinweis: Die in dieser Demo verwendeten Dokumente enthalten Informationen, die mit einem Sprachmodell (Azure OpenAI -Dienst) generiert wurden. Die in diesen Dokumenten enthaltenen Informationen dienen nur zu Demonstrationszwecken und spiegeln nicht die Meinungen oder Überzeugungen von Microsoft wider. Microsoft gibt keine Zusicherungen oder Garantien jeglicher Art ausdrücklich oder stillschweigend über die Vollständigkeit, Genauigkeit, Zuverlässigkeit, Eignung oder Verfügbarkeit in Bezug auf die in diesem Dokument enthaltenen Informationen aus. Alle Rechte vorbehalten Microsoft.