Konversations-KI hat in den letzten Jahren dank der rasanten Entwicklungen in der generativen KI große Fortschritte gemacht, insbesondere der Leistungsverbesserungen großer Sprachmodelle (LLMs), die durch Trainingstechniken wie die Feinabstimmung von Anweisungen und das verstärkende Lernen aus menschlichem Feedback eingeführt wurden. Bei korrekter Aufforderung können diese Modelle kohärente Gespräche führen, ohne dass aufgabenspezifische Trainingsdaten erforderlich sind. Allerdings lassen sie sich nicht gut auf unternehmensspezifische Fragen verallgemeinern, da sie sich zur Generierung einer Antwort auf die öffentlichen Daten stützen, mit denen sie während der Vorschulung konfrontiert wurden. Solchen Daten fehlt oft das Fachwissen, das in internen Dokumenten enthalten ist, die in modernen Unternehmen verfügbar sind und die typischerweise benötigt werden, um genaue Antworten in Bereichen wie pharmazeutischer Forschung, Finanzermittlungen und Kundensupport zu erhalten.
Um KI-Assistenten zu schaffen, die in der Lage sind, Diskussionen zu führen, die auf speziellem Unternehmenswissen basieren, müssen wir diese leistungsstarken, aber generischen LLMs mit internen Wissensdatenbanken von Dokumenten verbinden. Diese Methode zur Anreicherung des LLM-Generierungskontexts mit aus Ihren internen Datenquellen abgerufenen Informationen wird Retrieval Augmented Generation (RAG) genannt und erzeugt Assistenten, die domänenspezifisch und vertrauenswürdiger sind, wie gezeigt Retrieval-Augmented Generation für wissensintensive NLP-Aufgaben. Ein weiterer Grund für die Beliebtheit von RAG ist die einfache Implementierung und die Existenz ausgereifter Vektorsuchlösungen, wie sie beispielsweise von angeboten werden Amazon Kendra (sehen Amazon Kendra führt die Retrieval-API ein) und Amazon OpenSearch-Dienst (sehen k-Nearest Neighbor (k-NN)-Suche im Amazon OpenSearch Service), unter anderen.
Das beliebte RAG-Entwurfsmuster mit semantischer Suche kann jedoch nicht alle Arten von Fragen beantworten, die für Dokumente möglich sind. Dies gilt insbesondere für Fragen, die eine analytische Argumentation über mehrere Dokumente hinweg erfordern. Stellen Sie sich zum Beispiel vor, Sie planen die Strategie einer Investmentgesellschaft für das nächste Jahr. Ein wesentlicher Schritt wäre die Analyse und der Vergleich der Finanzergebnisse und potenziellen Risiken der Kandidatenunternehmen. Diese Aufgabe beinhaltet die Beantwortung von Fragen zum analytischen Denken. Beispielsweise erfordert die Abfrage „Nennen Sie mir die fünf Unternehmen mit dem höchsten Umsatz in den letzten zwei Jahren und identifizieren Sie ihre Hauptrisiken“ mehrere Argumentationsschritte, von denen einige eine semantische Suche nutzen können, während andere analytische Fähigkeiten erfordern.
In diesem Beitrag zeigen wir, wie Sie einen intelligenten Dokumentenassistenten entwerfen, der in drei Teilen analytische und mehrstufige Argumentationsfragen beantworten kann. In Teil 1 untersuchen wir das RAG-Entwurfsmuster und seine Einschränkungen bei analytischen Fragen. Anschließend stellen wir Ihnen eine vielseitigere Architektur vor, die diese Einschränkungen überwindet. Teil 2 hilft Ihnen, tiefer in die Entitätsextraktionspipeline einzutauchen, die zur Vorbereitung strukturierter Daten verwendet wird, die eine Schlüsselkomponente für die Beantwortung analytischer Fragen darstellt. Teil 3 führt Sie durch die Verwendung Amazonas Grundgestein LLMs zum Abfragen dieser Daten und zum Erstellen eines LLM-Agenten, der RAG um Analysefunktionen erweitert und es Ihnen so ermöglicht, intelligente Dokumentassistenten zu erstellen, die komplexe domänenspezifische Fragen über mehrere Dokumente hinweg beantworten können.
Teil 1: RAG-Einschränkungen und Lösungsübersicht
In diesem Abschnitt überprüfen wir das RAG-Entwurfsmuster und diskutieren seine Einschränkungen bei analytischen Fragen. Wir stellen außerdem eine vielseitigere Architektur vor, die diese Einschränkungen überwindet.
Übersicht über RAG
RAG-Lösungen sind inspiriert von Repräsentationslernen und semantische Suche Ideen, die seit 2010 schrittweise in Ranking-Probleme (z. B. Empfehlung und Suche) und Aufgaben der Verarbeitung natürlicher Sprache (NLP) übernommen wurden.
Der heute gängige Ansatz besteht aus drei Schritten:
- Ein Offline-Stapelverarbeitungsauftrag erfasst Dokumente aus einer Eingabewissensdatenbank, teilt sie in Blöcke auf und erstellt eine Einbettung für jeden Block, um seine Semantik mithilfe eines vorab trainierten Einbettungsmodells darzustellen, z Amazonas-Titan Einbettungsmodelle und verwendet diese Einbettungen dann als Eingabe, um einen semantischen Suchindex zu erstellen.
- Bei der Beantwortung einer neuen Frage in Echtzeit wird die Eingabefrage in eine Einbettung umgewandelt, die zum Suchen und Extrahieren der ähnlichsten Dokumentblöcke mithilfe einer Ähnlichkeitsmetrik, wie z. B. Kosinusähnlichkeit, und eines Algorithmus für ungefähre nächste Nachbarn verwendet wird. Die Suchgenauigkeit kann auch durch Metadatenfilterung verbessert werden.
- Eine Eingabeaufforderung wird aus der Verkettung einer Systemnachricht mit einem Kontext erstellt, der aus den relevanten Dokumentenblöcken besteht, die in Schritt 2 extrahiert wurden, und der Eingabefrage selbst. Diese Eingabeaufforderung wird dann einem LLM-Modell vorgelegt, um aus dem Kontext die endgültige Antwort auf die Frage zu generieren.
Mit dem richtigen zugrunde liegenden Einbettungsmodell, das in der Lage ist, genaue semantische Darstellungen der Eingabedokumentblöcke und der Eingabefragen zu erstellen, und einem effizienten semantischen Suchmodul ist diese Lösung in der Lage, Fragen zu beantworten, die den Abruf vorhandener Informationen in einer Dokumentendatenbank erfordern. Wenn Sie beispielsweise über eine Dienstleistung oder ein Produkt verfügen, können Sie zunächst den FAQ-Bereich oder die Dokumentation indizieren und eine erste Konversations-KI erstellen, die auf Ihr spezifisches Angebot zugeschnitten ist.
Einschränkungen von RAG basierend auf der semantischen Suche
Obwohl RAG eine wesentliche Komponente moderner domänenspezifischer KI-Assistenten und ein sinnvoller Ausgangspunkt für den Aufbau einer Konversations-KI auf der Grundlage einer speziellen Wissensdatenbank ist, kann es keine Fragen beantworten, die das Scannen, Vergleichen und Begründen aller Dokumente in Ihrer Wissensdatenbank erfordern gleichzeitig, insbesondere wenn die Erweiterung ausschließlich auf semantischer Suche basiert.
Um diese Einschränkungen zu verstehen, betrachten wir noch einmal das Beispiel der Investitionsentscheidung auf der Grundlage von Finanzberichten. Wenn wir RAG verwenden würden, um mit diesen Berichten zu kommunizieren, könnten wir Fragen stellen wie „Welche Risiken waren Unternehmen X im Jahr 2022 ausgesetzt“ oder „Wie hoch ist der Nettoumsatz von Unternehmen Y im Jahr 2022?“ Für jede dieser Fragen wird der entsprechende Einbettungsvektor, der die semantische Bedeutung der Frage kodiert, verwendet, um die Top-K semantisch ähnlichen Dokumentenblöcke abzurufen, die im Suchindex verfügbar sind. Dies wird typischerweise durch die Verwendung einer Lösung für die ungefähren nächsten Nachbarn erreicht, z FAISS, NMSLIB, pgvector oder andere, die darauf abzielen, ein Gleichgewicht zwischen Abrufgeschwindigkeit und Rückruf zu finden, um Echtzeitleistung bei gleichzeitig zufriedenstellender Genauigkeit zu erzielen.
Der vorstehende Ansatz kann jedoch nicht alle dokumentenübergreifenden analytischen Fragen genau beantworten, wie zum Beispiel „Welche sind die fünf Unternehmen mit den höchsten Nettoumsätzen im Jahr 5?“
Dies liegt daran, dass beim semantischen Suchabruf versucht wird, die K Dokumentenblöcke zu finden, die der Eingabefrage am ähnlichsten sind. Da jedoch keines der Dokumente umfassende Umsatzzusammenfassungen enthält, werden Teile der Dokumente zurückgegeben, die lediglich Erwähnungen von „Nettoumsatz“ und möglicherweise „2022“ enthalten, ohne die wesentliche Bedingung zu erfüllen, sich auf Unternehmen mit dem höchsten Umsatz zu konzentrieren. Wenn wir diese Abrufergebnisse einem LLM als Kontext zur Beantwortung der Eingabefrage präsentieren, kann dieser eine irreführende Antwort formulieren oder die Antwort verweigern, weil die erforderlichen korrekten Informationen fehlen.
Diese Einschränkungen sind konstruktionsbedingt, da bei der semantischen Suche kein gründlicher Scan aller Einbettungsvektoren durchgeführt wird, um relevante Dokumente zu finden. Stattdessen werden Methoden zur Annäherung an den nächsten Nachbarn verwendet, um eine angemessene Abrufgeschwindigkeit aufrechtzuerhalten. Eine Schlüsselstrategie für die Effizienz dieser Methoden ist die Segmentierung des Einbettungsraums in Gruppen während der Indizierung. Dies ermöglicht beim Abruf eine schnelle Identifizierung, welche Gruppen möglicherweise relevante Einbettungen enthalten, ohne dass paarweise Vergleiche erforderlich sind. Darüber hinaus berechnen selbst herkömmliche Next-Neighbor-Techniken wie KNN, die alle Dokumente scannen, nur grundlegende Distanzmetriken und sind nicht für die komplexen Vergleiche geeignet, die für analytische Überlegungen erforderlich sind. Daher ist RAG mit semantischer Suche nicht auf die Beantwortung von Fragen zugeschnitten, die eine analytische Argumentation in allen Dokumenten erfordern.
Um diese Einschränkungen zu überwinden, schlagen wir eine Lösung vor, die RAG mit Metadaten- und Entitätsextraktion, SQL-Abfragen und LLM-Agenten kombiniert, wie in den folgenden Abschnitten beschrieben.
Überwindung von RAG-Einschränkungen mit Metadaten, SQL und LLM-Agenten
Lassen Sie uns eine Frage, bei der RAG versagt, genauer untersuchen, damit wir die Argumentation nachvollziehen können, die für eine wirksame Beantwortung erforderlich ist. Diese Analyse sollte uns den richtigen Ansatz aufzeigen, der RAG in der Gesamtlösung ergänzen könnte.
Betrachten Sie die Frage: „Welche sind die Top 5 Unternehmen mit dem höchsten Umsatz im Jahr 2022?“
Um diese Frage beantworten zu können, müssten wir:
- Identifizieren Sie den Umsatz für jedes Unternehmen.
- Filtern Sie nach unten, um die Einnahmen von 2022 für jeden von ihnen beizubehalten.
- Sortieren Sie die Umsätze in absteigender Reihenfolge.
- Schneiden Sie neben den Firmennamen die fünf Umsatzerlöse heraus.
Typischerweise werden diese analytischen Vorgänge mit strukturierten Daten mithilfe von Tools wie Pandas oder SQL-Engines durchgeführt. Wenn wir Zugriff auf eine SQL-Tabelle hätten, die die Spalten enthält company
, revenue
und year
, könnten wir unsere Frage leicht beantworten, indem wir eine SQL-Abfrage ausführen, ähnlich dem folgenden Beispiel:
SELECT company, revenue FROM table_name WHERE year = 2022 ORDER BY revenue DESC LIMIT 5;
Durch das Speichern strukturierter Metadaten in einer SQL-Tabelle, die Informationen zu relevanten Entitäten enthält, können Sie viele Arten analytischer Fragen beantworten, indem Sie die richtige SQL-Abfrage schreiben. Aus diesem Grund ergänzen wir RAG in unserer Lösung durch ein Echtzeit-SQL-Abfragemodul für eine SQL-Tabelle, die mit in einem Offline-Prozess extrahierten Metadaten gefüllt wird.
Aber wie können wir diesen Ansatz in eine LLM-basierte Konversations-KI umsetzen und integrieren?
Es gibt drei Schritte, um analytische SQL-Begründung hinzufügen zu können:
- Extraktion von Metadaten – Extrahieren Sie Metadaten aus unstrukturierten Dokumenten in eine SQL-Tabelle
- Text zu SQL – Formulieren Sie SQL-Abfragen aus Eingabefragen präzise mithilfe eines LLM
- Werkzeugauswahl – Identifizieren Sie, ob eine Frage mithilfe von RAG oder einer SQL-Abfrage beantwortet werden muss
Um diese Schritte umzusetzen, erkennen wir zunächst, dass die Informationsextraktion aus unstrukturierten Dokumenten eine traditionelle NLP-Aufgabe ist, für die LLMs vielversprechend sind, indem sie durch Zero-Shot- oder Fence-Shot-Lernen eine hohe Genauigkeit erreichen. Zweitens hat sich die Fähigkeit dieser Modelle, SQL-Abfragen aus natürlicher Sprache zu generieren, seit Jahren bewährt, wie in der 2020 Release of Amazon QuickSightQ. Schließlich verbessert die automatische Auswahl des richtigen Tools für eine bestimmte Frage das Benutzererlebnis und ermöglicht die Beantwortung komplexer Fragen durch mehrstufige Argumentation. Um diese Funktion zu implementieren, befassen wir uns in einem späteren Abschnitt ausführlich mit LLM-Agenten.
Zusammenfassend besteht die von uns vorgeschlagene Lösung aus den folgenden Kernkomponenten:
- Semantischer Suchabruf zur Erweiterung des Generierungskontexts
- Strukturierte Metadatenextraktion und Abfrage mit SQL
- Ein Agent, der in der Lage ist, die richtigen Tools zur Beantwortung einer Frage einzusetzen
Lösungsüberblick
Das folgende Diagramm zeigt eine vereinfachte Architektur der Lösung. Es hilft Ihnen, die Rolle der Kernkomponenten zu identifizieren und zu verstehen und wie sie interagieren, um das vollständige LLM-Assistentenverhalten zu implementieren. Die Nummerierung richtet sich nach der Reihenfolge der Vorgänge bei der Implementierung dieser Lösung.
In der Praxis haben wir diese Lösung wie in der folgenden detaillierten Architektur beschrieben umgesetzt.
Für diese Architektur schlagen wir eine Implementierung vor GitHub, mit lose gekoppelten Komponenten, bei denen das Backend (5), die Datenpipelines (1, 2, 3) und das Frontend (4) separat entwickelt werden können. Dadurch soll die kompetenzübergreifende Zusammenarbeit bei der Anpassung und Verbesserung der Lösung für die Produktion vereinfacht werden.
Stellen Sie die Lösung bereit
Um diese Lösung in Ihrem AWS-Konto zu installieren, führen Sie die folgenden Schritte aus:
- Klonen Sie die Repository auf GitHub.
- Installieren Sie das Backend AWS Cloud-Entwicklungskit (AWS-CDK) App:
- Öffnen Sie den Microsoft Store auf Ihrem Windows-PC.
backend
-Ordner. - Führen Sie
npm install
um die Abhängigkeiten zu installieren. - Wenn Sie das AWS CDK noch nie im aktuellen Konto und in der aktuellen Region verwendet haben, führen Sie es aus Bootstrapping mit
npx cdk bootstrap
. - Führen Sie
npx cdk deploy
um den Stapel bereitzustellen.
- Öffnen Sie den Microsoft Store auf Ihrem Windows-PC.
- Führen Sie optional die aus
streamlit-ui
wie folgt:- Wir empfehlen, dieses Repository in ein zu klonen Amazon SageMaker-Studio Umfeld. Weitere Informationen finden Sie unter Onboarding zur Amazon SageMaker-Domäne mithilfe der Schnelleinrichtung.
- Im Inneren der
frontend/streamlit-ui
Ordner, ausführenbash run-streamlit-ui.sh
. - Wählen Sie den Link im folgenden Format, um die Demo zu öffnen:
https://{domain_id}.studio.{region}.sagemaker.aws/jupyter/default/proxy/{port_number}/
.
- Schließlich können Sie das ausführen Amazon Sage Maker Pipeline definiert in der
data-pipelines/04-sagemaker-pipeline-for-documents-processing.ipynb
Notebook, um die eingegebenen PDF-Dokumente zu verarbeiten und die SQL-Tabelle und den semantischen Suchindex vorzubereiten, die vom LLM-Assistenten verwendet werden.
Im Rest dieses Beitrags konzentrieren wir uns auf die Erläuterung der wichtigsten Komponenten und Designentscheidungen, um Sie hoffentlich bei der Entwicklung Ihres eigenen KI-Assistenten auf einer internen Wissensbasis zu inspirieren. Wir gehen davon aus, dass die Komponenten 1 und 4 leicht zu verstehen sind und konzentrieren uns auf die Kernkomponenten 2, 3 und 5.
Teil 2: Entitätsextraktionspipeline
In diesem Abschnitt tauchen wir tiefer in die Entitätsextraktionspipeline ein, die zur Vorbereitung strukturierter Daten verwendet wird, die eine Schlüsselkomponente für die Beantwortung analytischer Fragen darstellt.
Textextraktion
Dokumente werden normalerweise im PDF-Format oder als gescannte Bilder gespeichert. Sie können aus einfachen Absatzlayouts oder komplexen Tabellen bestehen und digitalen oder handschriftlichen Text enthalten. Um Informationen korrekt zu extrahieren, müssen wir diese Rohdokumente in Klartext umwandeln und dabei ihre ursprüngliche Struktur beibehalten. Dazu können Sie verwenden Amazontext, ein Dienst für maschinelles Lernen (ML), der ausgereifte APIs für die Text-, Tabellen- und Formularextraktion aus digitalen und handschriftlichen Eingaben bereitstellt.
In Komponente 2 extrahieren wir Text und Tabellen wie folgt:
- Für jedes Dokument rufen wir Amazon Textract auf, um den Text und die Tabellen zu extrahieren.
- Wir verwenden Folgendes Python-Skript um Tabellen als Pandas DataFrames neu zu erstellen.
- Wir konsolidieren die Ergebnisse in einem einzigen Dokument und fügen Tabellen als Markdown ein.
Dieser Prozess wird durch das folgende Flussdiagramm skizziert und konkret demonstriert notebooks/03-pdf-document-processing.ipynb
.
Entitätsextraktion und Abfrage mithilfe von LLMs
Um analytische Fragen effektiv zu beantworten, müssen Sie relevante Metadaten und Entitäten aus der Wissensdatenbank Ihres Dokuments in ein zugängliches strukturiertes Datenformat extrahieren. Aufgrund der Beliebtheit, Benutzerfreundlichkeit und Skalierbarkeit empfehlen wir die Verwendung von SQL zum Speichern dieser Informationen und zum Abrufen von Antworten. Diese Wahl profitiert auch von der Fähigkeit der bewährten Sprachmodelle, SQL-Abfragen aus natürlicher Sprache zu generieren.
In diesem Abschnitt gehen wir tiefer auf die folgenden Komponenten ein, die analytische Fragestellungen ermöglichen:
- Ein Batch-Prozess, der mithilfe von LLMs strukturierte Daten aus unstrukturierten Daten extrahiert
- Ein Echtzeitmodul, das Fragen in natürlicher Sprache in SQL-Abfragen umwandelt und Ergebnisse aus einer SQL-Datenbank abruft
Sie können die relevanten Metadaten zur Unterstützung analytischer Fragestellungen wie folgt extrahieren:
- Definieren Sie ein JSON-Schema für die zu extrahierenden Informationen, das eine Beschreibung jedes Felds und seines Datentyps sowie Beispiele für die erwarteten Werte enthält.
- Fordern Sie für jedes Dokument ein LLM mit dem JSON-Schema auf und bitten Sie es, die relevanten Daten genau zu extrahieren.
- Wenn die Dokumentlänge die Kontextlänge überschreitet und um die Extraktionskosten mit LLMs zu reduzieren, können Sie die semantische Suche verwenden, um die relevanten Dokumentblöcke abzurufen und dem LLM während der Extraktion anzuzeigen.
- Analysieren Sie die JSON-Ausgabe und validieren Sie die LLM-Extraktion.
- Optional können Sie die Ergebnisse als CSV-Dateien auf Amazon S3 sichern.
- Zur späteren Abfrage in die SQL-Datenbank laden.
Dieser Prozess wird durch die folgende Architektur verwaltet, bei der die Dokumente im Textformat mit einem Python-Skript geladen werden, das in einem ausgeführt wird Amazon SageMaker-Verarbeitung Job, um die Extraktion durchzuführen.
Für jede Gruppe von Entitäten erstellen wir dynamisch eine Eingabeaufforderung, die eine klare Beschreibung der Informationsextraktionsaufgabe sowie ein JSON-Schema enthält, das die erwartete Ausgabe definiert und die relevanten Dokumentabschnitte als Kontext enthält. Wir fügen auch einige Beispiele für die Eingabe und korrekte Ausgabe hinzu, um die Extraktionsleistung durch Lernen mit wenigen Schüssen zu verbessern. Dies wird in demonstriert notebooks/05-entities-extraction-to-structured-metadata.ipynb
.
Teil 3: Erstellen Sie einen Agenten-Dokumentenassistenten mit Amazon Bedrock
In diesem Abschnitt zeigen wir, wie Sie Amazon Bedrock LLMs zum Abfragen von Daten verwenden und einen LLM-Agenten erstellen, der RAG um Analysefunktionen erweitert und Ihnen so die Erstellung intelligenter Dokumentassistenten ermöglicht, die komplexe domänenspezifische Fragen über mehrere Dokumente hinweg beantworten können. Sie können sich auf die beziehen Lambda-Funktion auf GitHub für die konkrete Umsetzung der in diesem Teil beschriebenen Agenten und Tools.
Formulieren Sie SQL-Abfragen und beantworten Sie analytische Fragen
Da wir nun über einen strukturierten Metadatenspeicher verfügen, in dem die relevanten Entitäten extrahiert und in eine SQL-Datenbank geladen werden, die wir abfragen können, bleibt die Frage, wie aus den eingegebenen Fragen in natürlicher Sprache die richtige SQL-Abfrage generiert werden kann.
Moderne LLMs sind gut darin, SQL zu generieren. Zum Beispiel, wenn Sie bei Anthropic Claude LLM eine Anfrage stellen Amazonas Grundgestein Um eine SQL-Abfrage zu generieren, werden Ihnen plausible Antworten angezeigt. Allerdings müssen wir beim Schreiben der Eingabeaufforderung einige Regeln beachten, um genauere SQL-Abfragen zu erhalten. Diese Regeln sind besonders wichtig für komplexe Abfragen, um Halluzinationen und Syntaxfehler zu reduzieren:
- Beschreiben Sie die Aufgabe innerhalb der Eingabeaufforderung genau
- Fügen Sie das Schema der SQL-Tabellen in die Eingabeaufforderung ein, während Sie jede Spalte der Tabelle beschreiben und ihren Datentyp angeben
- Weisen Sie den LLM ausdrücklich an, nur vorhandene Spaltennamen und Datentypen zu verwenden
- Fügen Sie einige Zeilen der SQL-Tabellen hinzu
Sie können die generierte SQL-Abfrage auch mit a nachbearbeiten linter sowie sqlfluff um die Formatierung zu korrigieren, oder einen Parser wie z sqlglot um Syntaxfehler zu erkennen und die Abfrage zu optimieren. Wenn die Leistung außerdem nicht den Anforderungen entspricht, können Sie in der Eingabeaufforderung einige Beispiele angeben, um das Modell mit Fow-Shot-Learning so zu steuern, dass genauere SQL-Abfragen generiert werden.
Aus Implementierungssicht verwenden wir eine AWS Lambda Funktion zur Orchestrierung des folgenden Prozesses:
- Rufen Sie ein Anthropic Claude-Modell in Amazon Bedrock mit der Eingabefrage auf, um die entsprechende SQL-Abfrage zu erhalten. Hier verwenden wir die SQLDatenbank Klasse von LangChain, um Schemabeschreibungen relevanter SQL-Tabellen hinzuzufügen und eine benutzerdefinierte Eingabeaufforderung zu verwenden.
- Analysieren, validieren und führen Sie die SQL-Abfrage aus Amazon Aurora PostgreSQL-kompatible Edition Datenbank.
Die Architektur für diesen Teil der Lösung wird im folgenden Diagramm hervorgehoben.
Sicherheitsüberlegungen zur Verhinderung von SQL-Injection-Angriffen
Da wir dem KI-Assistenten ermöglichen, eine SQL-Datenbank abzufragen, müssen wir sicherstellen, dass dadurch keine Sicherheitslücken entstehen. Um dies zu erreichen, schlagen wir die folgenden Sicherheitsmaßnahmen vor, um SQL-Injection-Angriffe zu verhindern:
- Wenden Sie IAM-Berechtigungen mit den geringsten Rechten an – Beschränken Sie die Berechtigung der Lambda-Funktion, die die SQL-Abfragen ausführt, mithilfe einer AWS Identity and Access Management and (IAM)-Richtlinie und Rolle, die dem folgt Prinzip der geringsten Privilegien. In diesem Fall gewähren wir nur lesenden Zugriff.
- Beschränken Sie den Datenzugriff – Gewähren Sie nur Zugriff auf das Nötigste an Tabellen und Spalten, um Angriffe auf die Offenlegung von Informationen zu verhindern.
- Fügen Sie eine Moderationsebene hinzu – Führen Sie eine Moderationsschicht ein, die sofortige Injektionsversuche frühzeitig erkennt und verhindert, dass sie sich auf den Rest des Systems ausbreiten. Dies kann in Form von regelbasierten Filtern, einem Ähnlichkeitsabgleich mit einer Datenbank bekannter Prompt-Injection-Beispiele oder einem ML-Klassifikator erfolgen.
Semantischer Suchabruf zur Erweiterung des Generierungskontexts
Die von uns vorgeschlagene Lösung verwendet RAG mit semantischer Suche in Komponente 3. Sie können dieses Modul mit implementieren Wissensdatenbanken für Amazon Bedrock. Darüber hinaus gibt es eine Vielzahl weiterer Optionen zur Implementierung von RAG, wie z Amazon Kendra-Abruf-API, Amazon OpenSearch-Vektordatenbank und Amazon Aurora PostgreSQL mit pgvector, unter anderen. Das Open-Source-Paket aws-genai-llm-chatbot zeigt, wie viele dieser Vektorsuchoptionen verwendet werden, um einen LLM-basierten Chatbot zu implementieren.
Da wir in dieser Lösung sowohl SQL-Abfragen als auch Vektorsuche benötigen, haben wir uns für die Verwendung von Amazon Aurora PostgreSQL mit entschieden pgvector Erweiterung, die beide Funktionen unterstützt. Daher implementieren wir die RAG-Komponente für die semantische Suche mit der folgenden Architektur.
Der Prozess der Beantwortung von Fragen mithilfe der vorherigen Architektur erfolgt in zwei Hauptphasen.
Zunächst erstellt ein Offline-Batchprozess, der als SageMaker-Verarbeitungsauftrag ausgeführt wird, den semantischen Suchindex wie folgt:
- Entweder in regelmäßigen Abständen oder bei Erhalt neuer Dokumente wird ein SageMaker-Job ausgeführt.
- Es lädt die Textdokumente von Amazon S3 und teilt sie in überlappende Abschnitte auf.
- Für jeden Block wird ein Amazon Titan-Einbettungsmodell verwendet, um einen Einbettungsvektor zu generieren.
- Es nutzt die PGVector Klasse von LangChain, um die Einbettungen mit ihren Dokumentblöcken und Metadaten in Amazon Aurora PostgreSQL aufzunehmen und einen semantischen Suchindex für alle Einbettungsvektoren zu erstellen.
Zweitens konstruieren wir in Echtzeit und für jede neue Frage eine Antwort wie folgt:
- Die Frage wird vom Orchestrator empfangen, der auf einer Lambda-Funktion ausgeführt wird.
- Der Orchestrator bettet die Frage mit demselben Einbettungsmodell ein.
- Es ruft die Top-K-relevantesten Dokumentblöcke aus dem semantischen Suchindex von PostgreSQL ab. Optional wird Metadatenfilterung verwendet, um die Präzision zu verbessern.
- Diese Blöcke werden dynamisch in eine LLM-Eingabeaufforderung neben der Eingabefrage eingefügt.
- Die Eingabeaufforderung wird Anthropic Claude auf Amazon Bedrock präsentiert, um ihn anzuweisen, die Eingabefrage basierend auf dem verfügbaren Kontext zu beantworten.
- Abschließend wird die generierte Antwort an den Orchestrator zurückgesendet.
Ein Agent, der in der Lage ist, Werkzeuge zum Denken und Handeln einzusetzen
Bisher haben wir in diesem Beitrag die getrennte Behandlung von Fragen besprochen, die entweder RAG oder analytisches Denken erfordern. Allerdings erfordern viele reale Fragen beide Fähigkeiten, manchmal über mehrere Argumentationsschritte, um zu einer endgültigen Antwort zu gelangen. Um diese komplexeren Fragen zu unterstützen, müssen wir den Begriff eines Agenten einführen.
LLM-Agenten wie die Agenten für Amazon Bedrockhaben sich kürzlich als vielversprechende Lösung herausgestellt, die es ermöglicht, mithilfe von LLMs den aktuellen Kontext zu begründen und anzupassen sowie geeignete Maßnahmen aus einer Liste von Optionen auszuwählen, die einen allgemeinen Rahmen zur Problemlösung darstellen. Wie in besprochen LLM-basierte autonome Agentengibt es mehrere Aufforderungsstrategien und Entwurfsmuster für LLM-Agenten, die komplexes Denken unterstützen.
Ein solches Entwurfsmuster ist Reason and Act (ReAct), eingeführt in ReAct: Synergie zwischen Denken und Handeln in Sprachmodellen. In ReAct nimmt der Agent als Eingabe ein Ziel, bei dem es sich um eine Frage handeln kann, identifiziert die zur Beantwortung fehlenden Informationen und schlägt iterativ das richtige Tool zum Sammeln von Informationen basierend auf den Beschreibungen der verfügbaren Tools vor. Nachdem das LLM die Antwort von einem bestimmten Tool erhalten hat, prüft es erneut, ob es über alle Informationen verfügt, die es zur vollständigen Beantwortung der Frage benötigt. Wenn nicht, führt es einen weiteren Argumentationsschritt durch und verwendet dasselbe oder ein anderes Tool, um weitere Informationen zu sammeln, bis eine endgültige Antwort vorliegt oder ein Grenzwert erreicht ist.
Das folgende Sequenzdiagramm erklärt, wie ein ReAct-Agent bei der Beantwortung der Frage vorgeht: „Nennen Sie mir die Top-5-Unternehmen mit dem höchsten Umsatz in den letzten zwei Jahren und identifizieren Sie die mit dem Top-Unternehmen verbundenen Risiken.“
Die Details zur Implementierung dieses Ansatzes in Python werden in beschrieben Benutzerdefinierter LLM-Agent. In unserer Lösung werden der Agent und die Tools mit der nachfolgend hervorgehobenen Teilarchitektur implementiert.
Zur Beantwortung einer Eingabefrage nutzen wir AWS-Dienste wie folgt:
- Ein Benutzer gibt seine Frage über eine Benutzeroberfläche ein, die eine API aufruft Amazon API-Gateway.
- API Gateway sendet die Frage an eine Lambda-Funktion, die den Agent-Executor implementiert.
- Der Agent ruft das LLM mit einer Eingabeaufforderung auf, die eine Beschreibung der verfügbaren Tools, das ReAct-Anweisungsformat und die Eingabefrage enthält, und analysiert dann die nächste auszuführende Aktion.
- Die Aktion enthält, welches Tool aufgerufen werden soll und was die Aktionseingabe ist.
- Wenn das zu verwendende Tool SQL ist, ruft der Agent-Ausführer SQLQA auf, um die Frage in SQL zu konvertieren und auszuführen. Anschließend fügt es das Ergebnis zur Eingabeaufforderung hinzu und ruft das LLM erneut auf, um zu prüfen, ob es die ursprüngliche Frage beantworten kann oder ob weitere Maßnahmen erforderlich sind.
- Wenn es sich bei dem zu verwendenden Tool um eine semantische Suche handelt, wird die Aktionseingabe entsprechend analysiert und zum Abrufen aus dem semantischen Suchindex von PostgreSQL verwendet. Es fügt die Ergebnisse zur Eingabeaufforderung hinzu und prüft, ob der LLM antworten kann oder eine weitere Aktion benötigt.
- Nachdem alle Informationen zur Beantwortung einer Frage vorliegen, formuliert der LLM-Agent eine endgültige Antwort und sendet sie an den Benutzer zurück.
Sie können den Agenten um weitere Tools erweitern. In der Implementierung verfügbar auf GitHubzeigen wir, wie Sie eine Suchmaschine und einen Taschenrechner als zusätzliche Tools zu der oben genannten SQL-Engine und den semantischen Suchtools hinzufügen können. Um den laufenden Gesprächsverlauf zu speichern, verwenden wir eine Amazon DynamoDB Tabelle.
Aus unserer bisherigen Erfahrung haben wir gesehen, dass die folgenden Schlüsselfaktoren für einen erfolgreichen Makler sind:
- Ein zugrunde liegendes LLM, das mit dem ReAct-Format argumentieren kann
- Eine klare Beschreibung der verfügbaren Tools, wann sie verwendet werden sollen, und eine Beschreibung ihrer Eingabeargumente, möglicherweise mit einem Beispiel für die Eingabe und die erwartete Ausgabe
- Ein klarer Überblick über das ReAct-Format, dem der LLM folgen muss
- Dem LLM-Agenten werden die richtigen Tools zur Lösung der Geschäftsfrage zur Verfügung gestellt
- Korrektes Parsen der Ausgaben der Antworten des LLM-Agenten entsprechend der Begründung
Um die Kosten zu optimieren, empfehlen wir, die häufigsten Fragen mit ihren Antworten zwischenzuspeichern und diesen Cache regelmäßig zu aktualisieren, um Aufrufe an das zugrunde liegende LLM zu reduzieren. Sie können beispielsweise einen semantischen Suchindex mit den häufigsten Fragen erstellen, wie zuvor erläutert, und die neue Benutzerfrage zunächst mit dem Index abgleichen, bevor Sie das LLM aufrufen. Informationen zu weiteren Caching-Optionen finden Sie unter LLM-Caching-Integrationen.
Unterstützt andere Formate wie Video-, Bild-, Audio- und 3D-Dateien
Sie können dieselbe Lösung auf verschiedene Arten von Informationen anwenden, z. B. Bilder, Videos, Audio und 3D-Designdateien wie CAD- oder Netzdateien. Dabei werden etablierte ML-Techniken verwendet, um den Dateiinhalt in Textform zu beschreiben, der dann in die zuvor untersuchte Lösung integriert werden kann. Mit diesem Ansatz können Sie Qualitätssicherungsgespräche zu diesen verschiedenen Datentypen führen. Sie können beispielsweise Ihre Dokumentendatenbank erweitern, indem Sie Textbeschreibungen für Bilder, Videos oder Audioinhalte erstellen. Sie können die Metadatentabelle auch erweitern, indem Sie Eigenschaften durch Klassifizierung oder Objekterkennung für Elemente innerhalb dieser Formate identifizieren. Nachdem diese extrahierten Daten entweder im Metadatenspeicher oder im semantischen Suchindex für Dokumente indiziert wurden, bleibt die Gesamtarchitektur des vorgeschlagenen Systems weitgehend konsistent.
Zusammenfassung
In diesem Beitrag haben wir gezeigt, dass die Verwendung von LLMs mit dem RAG-Entwurfsmuster für den Aufbau eines domänenspezifischen KI-Assistenten notwendig ist, aber nicht ausreicht, um das erforderliche Maß an Zuverlässigkeit zur Generierung von Geschäftswert zu erreichen. Aus diesem Grund haben wir vorgeschlagen, das beliebte RAG-Entwurfsmuster um die Konzepte von Agenten und Tools zu erweitern, wobei die Flexibilität der Tools es uns ermöglicht, sowohl traditionelle NLP-Techniken als auch moderne LLM-Funktionen zu verwenden, um einem KI-Assistenten mehr Möglichkeiten zur Suche nach Informationen und zur Unterstützung zu geben Anwender dabei, geschäftliche Probleme effizient zu lösen.
Die Lösung demonstriert den Entwurfsprozess hin zu einem LLM-Assistenten, der in der Lage ist, verschiedene Arten von Fragen zum Abrufen, zum analytischen Denken und zum mehrstufigen Denken in Ihrer gesamten Wissensdatenbank zu beantworten. Wir haben auch hervorgehoben, wie wichtig es ist, über die Arten von Fragen und Aufgaben nachzudenken, bei denen von Ihrem LLM-Assistenten erwartet wird, dass er den Benutzern hilft. In diesem Fall führte uns die Designreise zu einer Architektur mit den drei Komponenten semantische Suche, Metadatenextraktion und SQL-Abfrage sowie LLM-Agent und -Tools, die unserer Meinung nach generisch und flexibel genug für mehrere Anwendungsfälle ist. Wir glauben auch, dass Sie diese Lösung weiter ausbauen können, indem Sie sich von dieser Lösung inspirieren lassen und tief in die Bedürfnisse Ihrer Benutzer eintauchen, um das zu erreichen, was für Sie am besten funktioniert.
Über die Autoren
Mohamed Ali Jamaoui ist ein Senior ML Prototyping Architect mit 10 Jahren Erfahrung im maschinellen Lernen in der Produktion. Es macht ihm Spaß, geschäftliche Probleme mit maschinellem Lernen und Software-Engineering zu lösen und Kunden dabei zu helfen, mit ML geschäftlichen Mehrwert zu erzielen. Als Teil von AWS EMEA Prototyping und Cloud Engineering unterstützt er Kunden beim Aufbau von Geschäftslösungen, die Innovationen in MLOPs, NLP, CV und LLMs nutzen.
Giuseppe Hannen ist Associate Consultant bei ProServe. Giuseppe setzt seine analytischen Fähigkeiten in Kombination mit AI&ML ein, um klare und effektive Lösungen für seine Kunden zu entwickeln. Er liebt es, einfache Lösungen für komplizierte Probleme zu finden, insbesondere für solche, die die neuesten technologischen Entwicklungen und Forschungsergebnisse erfordern.
Laurens ten Cate ist Senior Data Scientist. Laurens arbeitet mit Unternehmenskunden in EMEA zusammen und hilft ihnen dabei, ihre Geschäftsergebnisse mithilfe von AWS AI/ML-Technologien zu beschleunigen. Er ist auf NLP-Lösungen spezialisiert und konzentriert sich auf die Supply Chain- und Logistikbranche. In seiner Freizeit liest er gerne und beschäftigt sich mit Kunst.
Irina Radu ist ein Prototyping Engagement Manager, Teil von AWS EMEA Prototyping und Cloud Engineering. Sie hilft Kunden dabei, das Beste aus der neuesten Technologie herauszuholen, schneller Innovationen zu entwickeln und größer zu denken.
- SEO-gestützte Content- und PR-Distribution. Holen Sie sich noch heute Verstärkung.
- PlatoData.Network Vertikale generative KI. Motiviere dich selbst. Hier zugreifen.
- PlatoAiStream. Web3-Intelligenz. Wissen verstärkt. Hier zugreifen.
- PlatoESG. Kohlenstoff, CleanTech, Energie, Umwelt, Solar, Abfallwirtschaft. Hier zugreifen.
- PlatoHealth. Informationen zu Biotechnologie und klinischen Studien. Hier zugreifen.
- Quelle: https://aws.amazon.com/blogs/machine-learning/boosting-rag-based-intelligent-document-assistants-using-entity-extraction-sql-querying-and-agents-with-amazon-bedrock/
- :hast
- :Ist
- :nicht
- :Wo
- $UP
- 1
- 10
- 100
- 2022
- 3d
- 7
- a
- Fähigkeit
- Fähig
- Über Uns
- beschleunigen
- Zugang
- zugänglich
- erreicht
- Konto
- Genauigkeit
- genau
- genau
- Erreichen
- Erreichen
- über
- Handlung
- Schauspielkunst
- Action
- Aktionen
- automatisch
- hinzufügen
- zusätzlich
- Fügt
- angenommen
- Nach der
- aufs Neue
- gegen
- Makler
- Agenten
- AI
- AI-Assistent
- AI / ML
- Algorithmus
- Richtet sich aus
- Alle
- erlaubt
- neben
- ebenfalls
- Amazon
- Amazon Sage Maker
- Amazontext
- Amazon Web Services
- unter
- an
- Analyse
- Analytische
- analysieren
- und
- Ein anderer
- beantworten
- Antworten
- Anthropisch
- jedem
- Bienen
- APIs
- gilt
- Bewerben
- Ansatz
- angemessen
- ungefähr
- Architektur
- SIND
- Argumente
- um
- Kunst
- AS
- fragen
- helfen
- Assistentin
- Assistenten
- Partnerschaftsräte
- damit verbundenen
- annehmen
- At
- Anschläge
- Versuche
- Audio-
- vermehren
- Augmented
- Aurora
- Im Prinzip so, wie Sie es von Google Maps kennen.
- Autonom
- verfügbar
- AWS
- Zurück
- Backend
- Balance
- Base
- basierend
- basic
- BE
- weil
- war
- Bevor
- Verhalten
- hinter
- Glauben
- Vorteile
- BESTE
- zwischen
- Beyond
- größer
- Stärkung
- beide
- bauen
- Building
- Geschäft
- Unternehmen
- aber
- by
- Cache-Speicher
- CAD
- rufen Sie uns an!
- namens
- Aufruf
- Aufrufe
- CAN
- Kandidat
- Fähigkeiten
- fähig
- tragen
- Häuser
- Fälle
- Kette
- Chatbot
- Schecks
- Wahl
- Entscheidungen
- Auswählen
- Klasse
- Einstufung
- klar
- Cloud
- KOHÄRENT
- Zusammenarbeit
- Kolonne
- Spalten
- Kombination
- vereint
- wie die
- gemeinsam
- Unternehmen
- Unternehmen
- vergleichen
- Vergleich
- Vergleiche
- Ergänzung
- abschließen
- Komplex
- kompliziert
- Komponente
- Komponenten
- zusammengesetzt
- umfassend
- Berechnen
- Konzepte
- Beton
- Zustand
- Leiten
- Vernetz Dich
- Geht davon
- Überlegungen
- konsistent
- konsolidieren
- konstruieren
- Berater
- enthalten
- enthalten
- enthält
- Inhalt
- Kontext
- Gespräch
- Konversations
- Konversations-KI
- Gespräche
- verkaufen
- umgewandelt
- Kernbereich
- und beseitigen Muskelschwäche
- korrekt
- Dazugehörigen
- Kosten
- Kosten
- könnte
- gekoppelt
- erstellen
- schafft
- Erstellen
- Strom
- Original
- Kunde
- Kundensupport
- Kunden
- technische Daten
- Datenzugriff
- Datenwissenschaftler
- Datenbase
- entschieden
- Entscheiden
- tief
- tiefer
- definiert
- Definiert
- vertiefen
- Demand
- Demo
- zeigen
- Synergie
- zeigt
- Abhängigkeiten
- einsetzen
- beschreiben
- beschrieben
- Beschreibung
- Beschreibung
- Design
- Designmuster
- Designprozess
- Entwerfen
- detailliert
- Details
- entdecken
- Entdeckung
- entwickeln
- Entwicklung
- Entwicklungen
- digital
- Bekanntgabe
- diskutieren
- diskutiert
- Diskussionen
- Abstand
- tauchen
- verschieden
- Tauchen
- do
- Dokument
- Dokumentation
- Unterlagen
- die
- Tut nicht
- Domain
- Domains
- erledigt
- nach unten
- Fahrer
- zwei
- im
- dynamisch
- jeder
- Früher
- Früh
- erleichtern
- Benutzerfreundlichkeit
- leicht
- Effektiv
- effektiv
- Effizienz
- effizient
- effizient
- entweder
- Elemente
- Einbettung
- EMEA
- entstanden
- anstellen
- ermöglichen
- ermöglicht
- ermöglichen
- Ende
- Engagement
- Motor
- Entwicklung
- Motor (en)
- zu steigern,
- Verbessert
- genug
- bereichernd
- Unternehmen
- Entitäten
- Einheit
- Arbeitsumfeld
- Fehler
- insbesondere
- essential
- etablierten
- Sogar
- entwickelt sich
- untersuchen
- Beispiel
- Beispiele
- Existenz
- vorhandenen
- Erweitern Sie die Funktionalität der
- erwartet
- ERFAHRUNGEN
- erklärt
- Erläuterung
- Erklärt
- ERKUNDEN
- Erkundet
- ausgesetzt
- erweitern
- Verlängerung
- Erweiterung
- extra
- Extrakt
- Extraktion
- KONZENTRAT
- konfrontiert
- scheitert
- FAQ
- weit
- beschleunigt
- Merkmal
- Eigenschaften
- Feedback
- wenige
- Feld
- Reichen Sie das
- Mappen
- Filterung
- Filter
- Finale
- Endlich
- Revolution
- Finden Sie
- Vorname
- Flexibilität
- flexibel
- Fluss
- Setzen Sie mit Achtsamkeit
- Fokussierung
- Folgende
- folgt
- Aussichten für
- unten stehende Formular
- Format
- gebildet
- Formen
- Unser Ansatz
- Frei
- für
- Materials des
- Vorderes Ende
- Erfüllung
- voller
- voll
- Funktion
- weiter
- Tor
- sammeln
- Allgemeines
- erzeugen
- erzeugt
- Erzeugung
- Generation
- generativ
- Generative KI
- bekommen
- bekommen
- GitHub
- gegeben
- Kundenziele
- gut
- allmählich
- gewähren
- Gruppe an
- Gruppen
- hätten
- Haben
- mit
- he
- Hilfe
- Unternehmen
- hilft
- hier
- GUTE
- höchste
- Besondere
- seine
- Geschichte
- Hoffentlich
- Ultraschall
- Hilfe
- aber
- HTML
- HTTPS
- human
- Ideen
- identifiziert
- identifizieren
- Identifizierung
- Identitätsschutz
- if
- Image
- Bilder
- Bild
- implementieren
- Implementierung
- umgesetzt
- Umsetzung
- Bedeutung
- wichtig
- zu unterstützen,
- verbessert
- Verbesserungen
- Verbesserung
- in
- Dazu gehören
- Index
- indiziert
- Energiegewinnung
- Information
- Informationsextraktion
- Anfangs-
- wir innovieren
- Innovationen
- Varianten des Eingangssignals:
- Eingänge
- Inspiration
- inspirieren
- inspirierte
- installieren
- Instanz
- beantragen müssen
- integrieren
- Intelligent
- interagieren
- intern
- in
- einführen
- eingeführt
- Investieren
- Untersuchung
- Investition
- beteiligen
- IT
- SEINE
- selbst
- Job
- Reise
- jpg
- JSON
- Behalten
- Wesentliche
- Tasten
- Wissen
- bekannt
- Sprache
- grosse
- weitgehend
- Nachname
- später
- neueste
- startet
- Schicht
- lernen
- am wenigsten
- geführt
- Länge
- Niveau
- Hebelwirkung
- Gefällt mir
- LIMIT
- Einschränkungen
- LINK
- Liste
- LLM
- Belastungen
- Logistik
- Logistikbranche
- Lang
- liebt
- Maschine
- Maschinelles Lernen
- gemacht
- Main
- halten
- Aufrechterhaltung
- um
- verwaltet
- Manager
- viele
- Spiel
- Abstimmung
- reifen
- Kann..
- me
- Bedeutung
- Maßnahmen
- Triff
- Erwähnungen
- nur
- ineinander greifen
- Nachricht
- Metadaten
- Methode
- Methoden
- Metrisch
- Metrik
- Minimum
- irreführend
- Kommt demnächst...
- ML
- MLOps
- Modell
- für
- Mäßigung
- modern
- Modul
- mehr
- Zudem zeigt
- vor allem warme
- mehrere
- sollen
- Namen
- Natürliche
- Verarbeitung natürlicher Sprache
- notwendig,
- Need
- erforderlich
- Bedürfnisse
- Nachbarschaft
- Netto-
- Nettoumsatz
- hört niemals
- Neu
- weiter
- Nlp
- Andere
- Notizbuch
- Notion
- Objekt
- Objekterkennung
- of
- angeboten
- bieten
- Offline-Bereich.
- vorgenommen,
- on
- EINEM
- laufend
- einzige
- XNUMXh geöffnet
- Open-Source-
- Einkauf & Prozesse
- Optimieren
- Optionen
- or
- Auftrag
- Original
- Andere
- Anders
- UNSERE
- Ergebnisse
- skizzieren
- skizzierte
- Möglichkeiten für das Ausgangssignal:
- Ausgänge
- übrig
- Gesamt-
- Überwinden
- besitzen
- Paket
- Pandas
- Teil
- Teile
- Schnittmuster
- Muster
- Ausführen
- Leistung
- Erlaubnis
- Perspektive
- Biowissenschaften
- Stücke
- Pipeline
- Ebene
- Planung
- Plato
- Datenintelligenz von Plato
- PlatoData
- plausibel
- Points
- Datenschutzrichtlinien
- Beliebt
- Popularität
- besiedelt
- möglich
- gegebenenfalls
- Post
- Postgresql
- Potenzial
- möglicherweise
- angetriebene
- größte treibende
- Praxis
- Präzision
- Danach
- Gegenwart
- vorgeführt
- Geschenke
- Erhaltung
- verhindern
- verhindert
- vorher
- Privileg
- Problemlösung
- Probleme
- Prozessdefinierung
- Verarbeitung
- produziert
- Herstellung
- Produkt
- Produktion
- Versprechen
- aussichtsreich
- immobilien
- bietet
- vorgeschlage
- schlägt vor
- Prototyping
- zuverlässig
- die
- bietet
- Öffentlichkeit
- Python
- F&A
- Abfragen
- Frage
- Fragen
- Direkt
- schnell
- Rangliste
- schnell
- Roh
- erreichen
- erreicht
- Reagieren
- Lesebrillen
- bereit
- echt
- realen Welt
- Echtzeit
- Grund
- vernünftig
- Received
- Empfang
- kürzlich
- kürzlich
- erkennen
- empfehlen
- Software Empfehlungen
- Veteran
- siehe
- Region
- relevant
- Zuverlässigkeit
- verlassen
- bleibt bestehen
- Meldungen
- Quelle
- vertreten
- Anforderung
- erfordern
- falls angefordert
- Anforderung
- erfordert
- Forschungsprojekte
- Antwort
- Antworten
- REST
- Folge
- Die Ergebnisse
- Rückkehr
- Einnahmen
- Einnahmen
- Überprüfen
- Recht
- Risiken
- Rollen
- Ohne eine erfahrene Medienplanung zur Festlegung von Regeln und Strategien beschleunigt der programmatische Medieneinkauf einfach die Rate der verschwenderischen Ausgaben.
- Führen Sie
- Laufen
- läuft
- sagemaker
- gleich
- Skalierbarkeit
- Scan
- Scannen
- Wissenschaftler
- Skript
- Suche
- Suchmaschine
- Zweite
- Abschnitt
- Abschnitte
- Sicherheitdienst
- Sicherheitsmaßnahmen
- sehen
- Suchen
- gesehen
- Auswahl
- Auswahl
- Semantik
- sendet
- Senior
- geschickt
- Reihenfolge
- Lösungen
- sie
- sollte
- erklären
- zeigte
- gezeigt
- ähnlich
- Einfacher
- vereinfachte
- vereinfachen
- gleichzeitig
- da
- Single
- Fähigkeiten
- So
- bis jetzt
- Software
- Softwareentwicklung
- allein
- Lösung
- Lösungen
- Auflösung
- einige
- manchmal
- Quelle
- Quellen
- Raumfahrt
- spezialisiert
- spezialisiert
- spezifisch
- Geschwindigkeit
- Spagat
- Stapel
- Stufen
- Anfang
- Beginnen Sie
- steuern
- Schritt
- Shritte
- speichern
- gelagert
- einfach
- Strategien
- Strategie
- Streik
- streben
- Struktur
- strukturierte
- Studio Adressen
- erfolgreich
- so
- vorschlagen
- geeignet
- zusammenfassen
- liefern
- Supply Chain
- Support
- Unterstützt
- sicher
- Syntax
- System
- Tabelle
- zugeschnitten
- Nehmen
- nimmt
- Aufgabe
- und Aufgaben
- Tech
- Techniken
- technologische
- Technologies
- erzählen
- zehn
- Text
- textuell
- Vielen Dank
- zur Verbesserung der Gesundheitsgerechtigkeit
- Das
- die Informationen
- ihr
- Sie
- dann
- Dort.
- damit
- deswegen
- Diese
- vom Nutzer definierten
- think
- Denken
- fehlen uns die Worte.
- diejenigen
- nach drei
- Durch
- Zeit
- Titan
- zu
- heute
- Werkzeug
- Werkzeuge
- Top
- top 5
- gegenüber
- gegenüber
- Spur
- traditionell
- Ausbildung
- Transformieren
- Bearbeitung
- was immer dies auch sein sollte.
- vertrauenswürdig
- XNUMX
- tippe
- Typen
- typisch
- ui
- zugrunde liegen,
- verstehen
- bis
- Aktualisierung
- auf
- us
- -
- benutzt
- Mitglied
- Benutzererfahrung
- Nutzer
- verwendet
- Verwendung von
- BESTÄTIGEN
- Wert
- Werte
- Vielfalt
- verschiedene
- vielseitig
- Video
- Videos
- Sicherheitslücken
- geht
- Weg..
- we
- Netz
- Web-Services
- GUT
- waren
- Was
- wann
- während
- ob
- welche
- während
- warum
- Wikipedia
- werden wir
- mit
- .
- ohne
- Werk
- würde
- Schreiben
- X
- Jahr
- Jahr
- Du
- Ihr
- Zephyrnet