Erfahren Sie, wie Sie eine Streamlit-Webanwendung auf AWS mit Authentifizierung mithilfe von AWS Cognito bereitstellen, und folgen Sie einem ausführbaren Beispiel auf GitHub!
Hallo an alle! Ich bin ein freiberuflicher Machine-Studying-Ingenieur und möchte Ihnen heute einen Leitfaden zur Bereitstellung einer Streamlit-Internet-App auf AWS, einschließlich der Authentifizierung mit AWS Cognito, vorstellen. Ich musste eine solche Lösung selbst implementieren und stellte fest, dass es on-line nicht genügend Dokumentation und Beispiele gab, die alle meine Fragen beantworteten und ausführbare Beispiele enthielten. Aus diesem Grund habe ich ein einziges GitHub-Repository erstellt, in dem Sie ein umfassendes Beispiel und die erforderliche Terraform Infrastructure as Code (IAC) für eine einfache Bereitstellung finden: https://github.com/EikeKohl/paperqa-web-app/
In diesem Blogbeitrag begleite ich Sie durch den Prozess der Bereitstellung einer Streamlit-Webanwendung auf AWS, einschließlich der Einrichtung der Authentifizierung mit AWS Cognito, und gebe Ihnen eine detaillierte Schritt-für-Schritt-Anleitung.
Das Beispielprojekt PaperQA demonstriert a Streamlit Internet-App, die a ausführt Haystack-Frage-Antwort-Pipeline für Arxiv-Artikel mit OpenAI. Der Zweck dieser App besteht darin, zu zeigen, wie der Informationsabruf auf der Grundlage einer definierten Dokumentendatenbank erfolgen kann.
Sie können Fragen stellen wie:
Was ist ein dynamisch gewichtetes bedingtes Zufallsfeld?
und basiert z. B. auf dem Inhalt der Arbeit https://arxiv.org/pdf/1603.03627.pdfwird Ihre Frage wie folgt beantwortet:
Ein dynamisch gewichtetes bedingtes Zufallsfeld (dWCRF) ist eine kostenempfindliche Lernmethode für die Klassifizierung unausgeglichener Mehrklassendaten in Echtzeit, basierend auf gewichteten bedingten Zufallsfeldern (WCRF), wobei der Optimierungsprozess auf der Maximierung des erwarteten Gesamt-F-Scores basiert. Bei dieser Methode werden die Kostenparameter während des Trainings dynamisch berechnet.
Sie können auch die Kontextabschnitte des Papiers sehen, auf die sich der Chatbot bezieht. So nutzen Sie die App:
- Dokumente zur Datenbank hinzufügen: Fügen Sie eine durch Kommas getrennte Zeichenfolge von PDF-URLs in den oberen Textbereich ein und klicken Sie auf „Artikel zur Datenbank hinzufügen“, um eine zu erstellen FAISS-Vektordatenbank unter Verwendung des angegebenen Einbettungsmodells.
- Datenbank zurücksetzen: Klicken Sie auf „Datenbank zurücksetzen“, um alle heruntergeladenen Dokumente und die FAISS-Datenbank zu entfernen.
- Anfragepapier: Geben Sie Ihre Frage in das Textfeld über der Schaltfläche „Abfragepapier“ ein. Klicken Sie auf die Schaltfläche, um passenden Kontext aus Ihrer Vektordatenbank abzurufen und Ihre Frage basierend auf dem abgerufenen Kontext zu beantworten.
- Passen Sie die Einstellungen an: In der linken Seitenleiste können Sie Einstellungen wie Temperatur, Max. Token-Antwort und Anzahl der Kontextübereinstimmungen anpassen. Sie können den Kontext auch überspringen, um zu sehen, worauf sich die Antwort des Modells bezieht.
Um die Anwendung zu testen, empfehle ich, sie zunächst lokal mit Docker auszuführen.
Lokal
Führen Sie den folgenden Befehl aus, um das Docker-Picture zu erstellen:
docker construct -t paperqa .
Um den Container lokal auszuführen, müssen Sie „OPENAI_API_KEY“ als Umgebungsvariable festlegen.
Linux / MacOS
docker run -p 8501:8501 -it
-e OPENAI_API_KEY=$OPENAI_API_KEY
paperqa
Home windows
docker run -p 8501:8501 -it `
-e OPENAI_API_KEY=$env:OPENAI_API_KEY `
paperqa
Die App wird unter verfügbar sein http://localhost:8501/.
Bereitstellung auf AWS
Um Ihnen den Bereitstellungsprozess zu erleichtern, habe ich Terraform Infrastructure as Code (IAC) in das GitHub-Repository aufgenommen. Diese IAC deckt alle Aspekte der Bereitstellung der App auf AWS ab, wie z Vernetzung, Anwendungslastausgleich, AWS Cognito-Authentifizierung, Route53-Domänenverwaltung, Cloudwatch-ProtokollierungUnd Containerisierte ECS-Bereitstellung. Hier ein kurzer Überblick über die Architektur:
Schritt für Schritt Anleitung
- Registrieren Sie Ihre Area: Registrieren Sie Ihre Area in Route53 offizielle Dokumentation.
- Fordern Sie ein SSL-Zertifikat an und validieren Sie es: Fordern Sie im AWS Certificates Supervisor ein SSL-Zertifikat für die Domäne Ihrer Anwendung an offizielle Dokumentation. Validieren Sie Ihre SSL-Zertifikatsanforderung.
- Erstellen Sie ein Geheimnis für den OpenAI-API-Schlüssel: Erstellen Sie ein Geheimnis namens
paperqa_openai_api_key
mit dem OpenAI-API-Schlüssel zur Verwendung in der Anwendung im AWS Secret Supervisor im Anschluss an offizielle Dokumentation. - Konfigurieren Sie Terraform: Im
terraform/vars.tf
Legen Sie in der Datei alle Variablen fest, z. B. AWS-Area, Domänenname und SSL-Zertifikat-ARN. - Terraform initialisieren und anwenden: Laufen
terraform init
Undterraform apply
imterraform
Verzeichnis. Bestätigen Sie mit „Ja“, um die erforderlichen AWS-Ressourcen zu erstellen. - Erstellen und pushen Sie das Docker-Picture: Führen Sie die aus
push_to_ecr.sh
Skript, um Ihren Container zu erstellen und ihn an Amazon Elastic Container Registry (ECR) zu übertragen. Vergessen Sie nicht, die anzupassenDOCKER_REGISTRY
UndIMAGE_VERSION
Variablen im Skript. - Aktualisieren Sie den ECS-Dienst: Führen Sie die aus
update_ecs.sh
Skript zum Aktualisieren Ihres Amazon Elastic Container Service (ECS) mit der neuen Picture-Model. - Fügen Sie einen Benutzer zu Ihrem Cognito-Benutzerpool hinzu: Folge dem offizielle Dokumentation um einen Benutzer zu Ihrem Cognito-Benutzerpool hinzuzufügen. Denken Sie daran, das Kontrollkästchen „E-Mail-Einladung senden“ zu aktivieren.
- Greifen Sie auf die bereitgestellte Anwendung zu: Sobald alle Schritte abgeschlossen sind, sollten Sie über die benutzerdefinierte Domäne, die Sie in Route53 eingerichtet haben, auf Ihre Streamlit-Internet-App zugreifen können.
Ich hoffe, Sie finden diesen Blogbeitrag und das GitHub-Repository hilfreich bei der Bereitstellung Ihrer Streamlit-Webanwendung auf AWS mit Authentifizierung mithilfe von AWS Cognito. Erkunden Sie gerne das Beispielprojekt und nutzen Sie das bereitgestellte Terraform IAC, um Ihre App reibungslos bereitzustellen. Wenn Sie Fragen, Anregungen oder geschäftliche Anfragen haben, zögern Sie bitte nicht, mich unter zu kontaktieren ekohlmeyer21@gmail.com.
Viel Spaß beim Codieren!