Dieser Beitrag wurde gemeinsam mit Stanislav Yeshchenko von Q4 Inc. verfasst.
Unternehmen nutzen Retrieval Augmented Generation (RAG) als Mainstream-Ansatz für die Entwicklung von Q&A-Chatbots. Wir sehen weiterhin neue Herausforderungen, die sich aus der Art der verfügbaren Datensätze ergeben. Bei diesen Datensätzen handelt es sich häufig um eine Mischung aus numerischen Daten und Textdaten, die manchmal strukturiert, unstrukturiert oder halbstrukturiert sind.
Q4 Inc. musste einige dieser Herausforderungen in einem ihrer vielen auf AWS basierenden KI-Anwendungsfälle bewältigen. In diesem Beitrag besprechen wir einen Q&A-Bot-Anwendungsfall, den Q4 implementiert hat, die Herausforderungen, die numerische und strukturierte Datensätze mit sich brachten, und wie Q4 zu dem Schluss kam, dass die Verwendung von SQL eine praktikable Lösung sein könnte. Abschließend werfen wir einen genaueren Blick auf den Einsatz des Q4-Teams Amazonas Grundgestein und SQLDatabaseChain zur Implementierung einer RAG-basierten Lösung mit SQL-Generierung.
Anwendungsfallübersicht
Q4 Inc. mit Hauptsitz in Toronto und Niederlassungen in New York und London ist eine führende Plattform für den Zugang zu Kapitalmärkten, die die Art und Weise verändert, wie Emittenten, Investoren und Verkäufer effizient miteinander in Kontakt treten, kommunizieren und interagieren. Die Q4-Plattform erleichtert Interaktionen auf den Kapitalmärkten durch IR-Website-Produkte, Lösungen für virtuelle Veranstaltungen, Engagement-Analysen, Investor Relations, Customer Relationship Management (CRM), Aktionärs- und Marktanalysen, Überwachung und ESG-Tools.
In der heutigen schnelllebigen und datengesteuerten Finanzlandschaft spielen Investor Relations Officers (IROs) eine entscheidende Rolle bei der Förderung der Kommunikation zwischen einem Unternehmen und seinen Aktionären, Analysten und Investoren. Im Rahmen ihrer täglichen Aufgaben analysieren IROs verschiedene Datensätze, darunter CRM, Eigentumsdaten und Börsendaten. Die Gesamtheit dieser Daten wird verwendet, um Finanzberichte zu erstellen, Investor-Relations-Ziele festzulegen und die Kommunikation mit bestehenden und potenziellen Investoren zu verwalten.
Um der wachsenden Nachfrage nach einem effizienten und dynamischen Datenabruf gerecht zu werden, wollte Q4 ein Chatbot-Q&A-Tool entwickeln, das IROs eine intuitive und unkomplizierte Methode bietet, auf die erforderlichen Informationen in einem benutzerfreundlichen Format zuzugreifen.
Das Endziel bestand darin, einen Chatbot zu erstellen, der öffentlich verfügbare Daten sowie proprietäre kundenspezifische Q4-Daten nahtlos integriert und gleichzeitig ein Höchstmaß an Sicherheit und Datenschutz gewährleistet. Was die Leistung betrifft, bestand das Ziel darin, eine Abfrageantwortzeit von Sekunden einzuhalten, um ein positives Erlebnis für Endbenutzer zu gewährleisten.
Die Finanzmärkte sind eine regulierte Branche, in der viel auf dem Spiel steht. Die Bereitstellung falscher oder veralteter Informationen kann neben anderen möglichen Datenschutzrisiken auch das Vertrauen von Anlegern und Aktionären beeinträchtigen. Q4 versteht die Branche und die Anforderungen und legt Datenschutz und Reaktionsgenauigkeit als Leitprinzipien bei der Bewertung einer Lösung fest, bevor sie auf den Markt gebracht werden kann.
Für den Machbarkeitsnachweis entschied sich Q4 für die Verwendung eines Datensatzes zum finanziellen Eigentum. Der Datensatz besteht aus Zeitreihendatenpunkten, die die Anzahl der im Besitz befindlichen Vermögenswerte darstellen. die Transaktionshistorie zwischen Investmentinstituten, Privatpersonen und öffentlichen Unternehmen; und viele weitere Elemente.
Da Q4 sicherstellen wollte, dass es alle von uns besprochenen funktionalen und nichtfunktionalen Anforderungen erfüllen kann, musste das Projekt auch kommerziell machbar bleiben. Dies wurde im gesamten Prozess der Entscheidung über den Ansatz, die Architektur, die Wahl der Technologie und die lösungsspezifischen Elemente berücksichtigt.
Experimente und Herausforderungen
Es war von Anfang an klar, dass Q4 große Sprachmodelle (LLMs) verwenden musste, um eine Frage in menschlicher Sprache zu verstehen und genaue Antworten zu generieren.
Im Folgenden sind einige der Experimente aufgeführt, die das Team durchgeführt hat, zusammen mit den identifizierten Herausforderungen und den gewonnenen Erkenntnissen:
- Vortraining – Q4 hat die Komplexität und die Herausforderungen verstanden, die mit dem Vortraining eines LLM unter Verwendung seines eigenen Datensatzes einhergehen. Es wurde schnell klar, dass dieser Ansatz ressourcenintensiv ist und viele nicht triviale Schritte wie Datenvorverarbeitung, Schulung und Auswertung umfasst. Zusätzlich zum damit verbundenen Aufwand wären die Kosten unerschwinglich. In Anbetracht der Art des Zeitreihendatensatzes erkannte Q4 auch, dass kontinuierlich ein inkrementelles Vortraining durchgeführt werden musste, sobald neue Daten eingingen. Dies hätte ein engagiertes interdisziplinäres Team mit Fachkenntnissen in Datenwissenschaft, maschinellem Lernen und Domänen erforderlich gemacht Wissen.
- Feintuning – Die Feinabstimmung eines vorab trainierten Grundlagenmodells (FM) umfasste die Verwendung mehrerer beschrifteter Beispiele. Dieser Ansatz zeigte zunächst einige Erfolge, in vielen Fällen stellte die Modellhalluzination jedoch eine Herausforderung dar. Das Modell hatte Schwierigkeiten, nuancierte Kontexthinweise zu verstehen und lieferte falsche Ergebnisse.
- RAG mit semantischer Suche – Konventionelles RAG mit semantischer Suche war der letzte Schritt vor dem Übergang zur SQL-Generierung. Das Team experimentierte mit der Verwendung von Suche, semantischer Suche und Einbettungen, um Kontext zu extrahieren. Während des Einbettungsexperiments wurde der Datensatz in Einbettungen umgewandelt, in einer Vektordatenbank gespeichert und dann mit den Einbettungen der Frage abgeglichen, um den Kontext zu extrahieren. Der abgerufene Kontext in einem der drei Experimente wurde dann verwendet, um die ursprüngliche Eingabeaufforderung als Eingabe für das LLM zu erweitern. Dieser Ansatz funktionierte gut für textbasierte Inhalte, bei denen die Daten aus natürlicher Sprache mit Wörtern, Sätzen und Absätzen bestehen. Angesichts der Art des Datensatzes von Q4, der hauptsächlich aus Finanzdaten besteht, die aus Zahlen, Finanztransaktionen, Börsenkursen und Daten bestehen, waren die Ergebnisse in allen drei Fällen suboptimal. Selbst bei der Verwendung von Einbettungen hatten die aus Zahlen generierten Einbettungen Probleme mit der Ähnlichkeitsrangfolge und führten in vielen Fällen zum Abrufen falscher Informationen.
Fazit von Q4: Die Generierung von SQL ist der Weg nach vorn
Angesichts der Herausforderungen, denen sich die herkömmliche RAG-Methodik gegenübersieht, begann das Team, über die SQL-Generierung nachzudenken. Die Idee bestand darin, mithilfe des LLM zunächst eine SQL-Anweisung aus der Benutzerfrage zu generieren und diese dem LLM in natürlicher Sprache vorzulegen. Die generierte Abfrage wird dann für die Datenbank ausgeführt, um den relevanten Kontext abzurufen. Der Kontext wird schließlich verwendet, um die Eingabeaufforderung für einen Zusammenfassungsschritt zu erweitern.
Die Hypothese von Q4 war, dass sie zunächst SQL aus der Benutzerfrage generieren mussten, um einen höheren Recall für den Abrufschritt, insbesondere für den numerischen Datensatz, zu erzielen. Es wurde angenommen, dass dies nicht nur die Genauigkeit erhöht, sondern auch den Kontext für eine bestimmte Frage innerhalb des Geschäftsbereichs hält. Für die Abfragegenerierung und die Generierung präziser SQL-Anweisungen musste Q4 den LLM vollständig kontextbewusst über die Struktur seines Datensatzes informieren. Dies bedeutete, dass die Eingabeaufforderung das Datenbankschema, einige Beispieldatenzeilen und für Menschen lesbare Felderklärungen für die Felder enthalten musste, die nicht leicht zu verstehen sind.
Basierend auf den ersten Tests zeigte diese Methode hervorragende Ergebnisse. Das mit allen notwendigen Informationen ausgestattete LLM war in der Lage, das richtige SQL zu generieren, das dann in der Datenbank ausgeführt wurde, um den richtigen Kontext abzurufen. Nachdem Q4 mit der Idee experimentiert hatte, kam es zu dem Schluss, dass die SQL-Generierung der richtige Weg sei, um die Herausforderungen der Kontextextraktion für ihren eigenen spezifischen Datensatz anzugehen.
Beginnen wir mit der Beschreibung des Gesamtlösungsansatzes, zerlegen ihn in seine Bestandteile und fügen dann die Teile zusammen.
Lösungsüberblick
LLMs sind große Modelle mit Milliarden von Parametern, die mithilfe sehr großer Datenmengen aus verschiedenen Quellen vorab trainiert werden. Aufgrund der Breite der Trainingsdatensätze wird von LLMs erwartet, dass sie über allgemeine Kenntnisse in verschiedenen Bereichen verfügen. LLMs sind auch für ihre Denkfähigkeiten bekannt, die von Modell zu Modell unterschiedlich sind. Dieses allgemeine Verhalten kann für eine bestimmte Domäne oder Branche optimiert werden, indem ein Basismodell mithilfe zusätzlicher domänenspezifischer Vortrainingsdaten weiter optimiert oder mithilfe gekennzeichneter Daten verfeinert wird. Mit dem richtigen Kontext, den richtigen Metadaten und den richtigen Anweisungen kann ein gut ausgewählter Allzweck-LLM qualitativ hochwertiges SQL erzeugen, solange er Zugriff auf den richtigen domänenspezifischen Kontext hat.
Im Anwendungsfall von Q4 beginnen wir mit der Übersetzung der Kundenfrage in SQL. Dazu kombinieren wir die Benutzerfrage, das Datenbankschema, einige Beispieldatenbankzeilen und detaillierte Anweisungen als Aufforderung an den LLM, SQL zu generieren. Nachdem wir die SQL haben, können wir bei Bedarf einen Validierungsschritt ausführen. Wenn wir mit der Qualität der SQL zufrieden sind, führen wir die Abfrage in der Datenbank aus, um den relevanten Kontext abzurufen, den wir für den folgenden Schritt benötigen. Da wir nun über den relevanten Kontext verfügen, können wir die ursprüngliche Frage des Benutzers, den abgerufenen Kontext und eine Reihe von Anweisungen zurück an das LLM senden, um eine endgültige zusammengefasste Antwort zu erstellen. Das Ziel des letzten Schritts besteht darin, dass das LLM die Ergebnisse zusammenfasst und eine kontextbezogene und genaue Antwort liefert, die dann an den Benutzer weitergegeben werden kann.
Die Wahl des LLM, das in jeder Phase des Prozesses verwendet wird, hat großen Einfluss auf Genauigkeit, Kosten und Leistung. Die Wahl einer Plattform oder Technologie, die Ihnen die Flexibilität bietet, zwischen LLMs innerhalb desselben Anwendungsfalls (mehrere LLM-Fahrten für verschiedene Aufgaben) oder über verschiedene Anwendungsfälle hinweg zu wechseln, kann bei der Optimierung der Qualität der Ausgabe, der Latenz und der Kosten von Vorteil sein . Auf die Wahl des LLM gehen wir später in diesem Beitrag ein.
Lösungsbausteine
Nachdem wir den Ansatz nun allgemein erläutert haben, gehen wir nun auf die Details ein und beginnen mit den Lösungsbausteinen.
Amazonas Grundgestein
Amazon Bedrock ist ein vollständig verwalteter Dienst, der eine Auswahl leistungsstarker FMs von führenden Unternehmen bietet, darunter AI21 Labs, Anthropic, Cohere, Meta, Stability AI und Amazon. Amazon Bedrock bietet außerdem eine breite Palette an Tools, die zum Erstellen generativer KI-Anwendungen, zur Vereinfachung des Entwicklungsprozesses und zur Wahrung von Datenschutz und Sicherheit erforderlich sind. Darüber hinaus können Sie bei Amazon Bedrock aus verschiedenen FM-Optionen wählen und die Modelle privat weiter verfeinern, indem Sie Ihre eigenen Daten nutzen, um die Reaktionen der Modelle an Ihre Anwendungsfallanforderungen anzupassen. Amazon Bedrock ist völlig serverlos und verfügt über keine zugrunde liegende Infrastruktur, um den erweiterten Zugriff auf verfügbare Modelle über eine einzige API zu verwalten. Schließlich unterstützt Amazon Bedrock mehrere Sicherheits- und Datenschutzanforderungen, einschließlich HIPAA-Berechtigung und DSGVO-Konformität.
In der Lösung von Q4 verwenden wir Amazon Bedrock als serverlosen, API-basierten Multi-Foundation-Modellbaustein. Da wir innerhalb desselben Anwendungsfalls mehrere Fahrten zum LLM durchführen möchten, können wir je nach Aufgabentyp das Modell auswählen, das für eine bestimmte Aufgabe am besten geeignet ist, sei es SQL-Generierung, -Validierung oder -Zusammenfassung.
LangChain
LangChain ist ein Open-Source-Integrations- und Orchestrierungsframework mit einer Reihe vorgefertigter Module (E/A, Abruf, Ketten und Agenten), mit denen Sie Aufgaben zwischen FMs, Datenquellen und Tools integrieren und orchestrieren können. Das Framework erleichtert die Erstellung generativer KI-Anwendungen, die die Orchestrierung mehrerer Schritte erfordern, um die gewünschte Ausgabe zu erzeugen, ohne dass Code von Grund auf neu geschrieben werden muss. LangChain unterstützt Amazon Bedrock als Multi-Foundation-Modell-API.
Speziell für den Anwendungsfall von Q4 verwenden wir LangChain zur Koordinierung und Orchestrierung von Aufgaben in unserem Workflow, einschließlich der Verbindung zu Datenquellen und LLMs. Dieser Ansatz hat unseren Code vereinfacht, da wir die vorhandenen LangChain-Module verwenden können.
SQLDatabaseChain
SQLDatabaseChain ist eine LangChain-Kette, die aus langchain_experimental importiert werden kann. SLDatabaseChain erleichtert das Erstellen, Implementieren und Ausführen von SQL-Abfragen mithilfe seiner effektiven Text-zu-SQL-Konvertierungen und -Implementierungen.
In unserem Anwendungsfall verwenden wir SQLDatabaseChain bei der SQL-Generierung, um die Interaktionen zwischen der Datenbank und dem LLM zu vereinfachen und zu orchestrieren.
Der Datensatz
Unser strukturierter Datensatz kann sich in einer SQL-Datenbank, einem Data Lake oder einem Data Warehouse befinden, sofern wir SQL unterstützen. In unserer Lösung können wir jeden Datensatztyp mit SQL-Unterstützung verwenden; Dies sollte von der Lösung abstrahiert werden und die Lösung in keiner Weise ändern.
Implementierungsdetails
Nachdem wir nun den Lösungsansatz, die Lösungskomponenten, die Wahl der Technologie und der Tools untersucht haben, können wir die Teile zusammenfügen. Das folgende Diagramm verdeutlicht die End-to-End-Lösung.
Lassen Sie uns die Implementierungsdetails und den Prozessablauf durchgehen.
Generieren Sie die SQL-Abfrage
Um die Codierung zu vereinfachen, nutzen wir bestehende Frameworks. Wir verwenden LangChain als Orchestrierungsframework. Wir beginnen mit der Eingabephase, in der wir die Benutzerfrage in natürlicher Sprache erhalten.
In dieser ersten Phase nehmen wir diese Eingabe und generieren ein äquivalentes SQL, das wir zur Kontextextraktion in der Datenbank ausführen können. Um SQL zu generieren, verwenden wir SQLDatabaseChain, das für den Zugriff auf unser gewünschtes LLM auf Amazon Bedrock angewiesen ist. Mit Amazon Bedrock erhalten wir über eine einzige API Zugriff auf eine Reihe zugrunde liegender LLMs und können für jede LLM-Reise, die wir unternehmen, das richtige auswählen. Wir stellen zunächst eine Verbindung zur Datenbank her und rufen das erforderliche Tabellenschema zusammen mit einigen Beispielzeilen aus den Tabellen ab, die wir verwenden möchten.
Bei unseren Tests haben wir festgestellt, dass zwei bis fünf Tabellendatenzeilen ausreichen, um dem Modell genügend Informationen zu liefern, ohne zu viel unnötigen Mehraufwand zu verursachen. Drei Zeilen reichten gerade aus, um den Kontext bereitzustellen, ohne das Modell mit zu viel Eingabe zu überfordern. In unserem Anwendungsfall haben wir mit Anthropic begonnen Claude V2. Das Modell ist bekannt für seine fortgeschrittene Argumentation und artikulierten kontextbezogenen Antworten, wenn es mit dem richtigen Kontext und den richtigen Anweisungen versehen wird. Als Teil der Anweisungen können wir weitere klärende Details zum LLM hinzufügen. Beispielsweise können wir diese Spalte beschreiben Comp_NAME
steht für den Firmennamen. Jetzt können wir die Eingabeaufforderung erstellen, indem wir die Benutzerfrage unverändert, das Datenbankschema, drei Beispielzeilen aus der Tabelle, die wir verwenden möchten, und eine Reihe von Anweisungen kombinieren, um das erforderliche SQL im sauberen SQL-Format ohne Kommentare oder Ergänzungen zu generieren.
Alle Eingabeelemente zusammen werden als Modelleingabeaufforderung betrachtet. Eine ausgereifte Eingabeaufforderung, die auf die bevorzugte Syntax des Modells zugeschnitten ist, hat großen Einfluss auf die Qualität und Leistung der Ausgabe. Die Wahl des für eine bestimmte Aufgabe zu verwendenden Modells ist ebenfalls wichtig, nicht nur, weil es sich auf die Ausgabequalität auswirkt, sondern auch, weil es Auswirkungen auf Kosten und Leistung hat.
Wir besprechen später in diesem Beitrag die Modellauswahl sowie das Prompt-Engineering und die Optimierung. Es ist jedoch erwähnenswert, dass wir in der Phase der Abfragegenerierung festgestellt haben, dass Claude Instant in der Lage war, vergleichbare Ergebnisse zu erzielen, insbesondere wenn die Benutzerfrage gut formuliert und nicht so anspruchsvoll ist. Allerdings lieferte Claude V2 auch bei komplexeren und indirekteren Benutzereingaben bessere Ergebnisse. Wir haben das allerdings in einigen Fällen gelernt Claude Instant Obwohl dies eine ausreichende Genauigkeit bei einer besseren Latenz und einem besseren Preis bieten kann, war unser Fall für die Abfragegenerierung besser für Claude V2 geeignet.
Überprüfen Sie die SQL-Abfrage
Unser nächster Schritt besteht darin, zu überprüfen, ob das LLM erfolgreich die richtige Abfragesyntax generiert hat und ob die Abfrage unter Berücksichtigung der Datenbankschemata und der bereitgestellten Beispielzeilen kontextuell sinnvoll ist. Für diesen Überprüfungsschritt können wir zur nativen Abfragevalidierung innerhalb von SQLDatabaseChain zurückkehren oder einen zweiten Ausflug zum LLM durchführen, einschließlich der generierten Abfrage zusammen mit der Validierungsanweisung.
Wenn wir für den Validierungsschritt ein LLM verwenden, können wir dasselbe LLM wie zuvor (Claude V2) oder ein kleineres, leistungsfähigeres LLM für eine einfachere Aufgabe wie Claude Instant verwenden. Da wir Amazon Bedrock verwenden, sollte dies eine sehr einfache Anpassung sein. Mit derselben API können wir den Modellnamen in unserem API-Aufruf ändern, der die Änderung übernimmt. Es ist wichtig zu beachten, dass ein kleinerer LLM in den meisten Fällen sowohl hinsichtlich der Kosten als auch der Latenz eine bessere Effizienz bieten kann und in Betracht gezogen werden sollte – solange Sie die gewünschte Genauigkeit erhalten. In unserem Fall haben Tests gezeigt, dass die generierte Abfrage durchweg korrekt ist und die richtige Syntax aufweist. Mit diesem Wissen konnten wir diesen Validierungsschritt überspringen und Latenz und Kosten einsparen.
Führen Sie die SQL-Abfrage aus
Nachdem wir nun die verifizierte SQL-Abfrage haben, können wir die SQL-Abfrage für die Datenbank ausführen und den relevanten Kontext abrufen. Dies sollte ein einfacher Schritt sein.
Wir nehmen den generierten Kontext, stellen ihn dem LLM unserer Wahl mit der anfänglichen Benutzerfrage und einigen Anweisungen zur Verfügung und bitten das Modell, eine kontextbezogene und artikulierte Zusammenfassung zu generieren. Anschließend präsentieren wir dem Benutzer die generierte Zusammenfassung als Antwort auf die ursprüngliche Frage, alles abgestimmt auf den aus unserem Datensatz extrahierten Kontext.
Für das am Zusammenfassungsschritt beteiligte LLM können wir entweder Titan Text Express oder Claude Instant verwenden. Beide würden gute Optionen für die Zusammenfassungsaufgabe darstellen.
Anwendungsintegration
Die Q&A-Chatbot-Funktion ist einer der KI-Dienste von Q4. Um Modularität und Skalierbarkeit zu gewährleisten, erstellt Q4 KI-Dienste als Microservices, auf die Q4-Anwendungen über APIs zugreifen können. Dieser API-basierte Ansatz ermöglicht eine nahtlose Integration in das Q4-Plattform-Ökosystem und erleichtert die Bereitstellung der Fähigkeiten der KI-Dienste für die gesamte Suite von Plattformanwendungen.
Das Hauptziel der KI-Dienste besteht darin, unkomplizierte Funktionen zum Abrufen von Daten aus beliebigen öffentlichen oder proprietären Datenquellen unter Verwendung natürlicher Sprache als Eingabe bereitzustellen. Darüber hinaus stellen die KI-Dienste zusätzliche Abstraktionsebenen bereit, um sicherzustellen, dass funktionale und nichtfunktionale Anforderungen wie Datenschutz und Sicherheit erfüllt werden. Das folgende Diagramm veranschaulicht das Integrationskonzept.
Implementierungsherausforderungen
Zusätzlich zu den Herausforderungen, die sich aus der Natur des strukturierten, numerischen Datensatzes ergeben, die wir zuvor besprochen haben, war Q4 mit einer Reihe anderer Implementierungsherausforderungen konfrontiert, die angegangen werden mussten.
LLM-Auswahl und -Leistung
Die Auswahl des richtigen LLM für die Aufgabe ist von entscheidender Bedeutung, da sie sich direkt auf die Qualität der Ausgabe sowie auf die Leistung (Round-Trip-Latenz) auswirkt. Hier sind einige Faktoren, die beim LLM-Auswahlprozess eine Rolle spielen:
- Art des LLM – Die Art und Weise, wie die FMs aufgebaut sind und die Ausgangsdaten, auf denen das Modell vorab trainiert wurde, bestimmen, für welche Aufgabentypen das LLM gut geeignet ist und wie gut es sein wird. Beispielsweise wäre ein Text-LLM gut für die Textgenerierung und -zusammenfassung geeignet, während ein Text-zu-Bild- oder Bild-zu-Text-Modell eher auf Bildanalyse- und Generierungsaufgaben ausgerichtet wäre.
- LLM-Größe – FM-Größen werden anhand der Anzahl der Modellparameter eines bestimmten Modells gemessen, typischerweise in Milliarden bei modernen LLMs. Je größer das Modell, desto teurer ist in der Regel das anfängliche Training oder die anschließende Feinabstimmung. Andererseits gilt im Allgemeinen für die gleiche Modellarchitektur: Je größer das Modell ist, desto intelligenter erwarten wir, dass es die Art von Aufgabe erfüllt, auf die es ausgerichtet ist.
- LLM-Leistung – Normalerweise gilt: Je größer das Modell, desto mehr Zeit dauert die Generierung der Ausgabe, vorausgesetzt, Sie verwenden dieselben Rechen- und E/A-Parameter (Eingabeaufforderungs- und Ausgabegröße). Darüber hinaus wird die Leistung bei gleicher Modellgröße stark davon beeinflusst, wie optimiert Ihre Eingabeaufforderung ist, wie groß die E/A-Tokens sind und wie klar und syntaktisch die Eingabeaufforderung ist. Eine ausgereifte Eingabeaufforderung kann zusammen mit einer optimierten I/O-Token-Größe die Reaktionszeit des Modells verbessern.
Berücksichtigen Sie daher bei der Optimierung Ihrer Aufgabe die folgenden Best Practices:
- Wählen Sie ein Modell, das für die jeweilige Aufgabe geeignet ist
- Wählen Sie die kleinste Modellgröße, die die gewünschte Genauigkeit erreichen kann
- Optimieren Sie Ihre Eingabeaufforderungsstruktur und formulieren Sie die Anweisungen so konkret wie möglich, sodass sie für das Modell leicht verständlich sind
- Verwenden Sie die kleinste Eingabeaufforderung, die genügend Anweisungen und Kontext bietet, um die gewünschte Genauigkeit zu erzielen
- Beschränken Sie die Ausgabegröße auf die kleinste Größe, die für Sie sinnvoll ist und Ihren Ausgabeanforderungen gerecht wird
Unter Berücksichtigung der Faktoren Modellauswahl und Leistungsoptimierung machten wir uns an die Arbeit, unseren Anwendungsfall für die SQL-Generierung zu optimieren. Nach einigen Tests stellten wir fest, dass Claude Instant, vorausgesetzt wir haben den richtigen Kontext und die richtigen Anweisungen, mit den gleichen Eingabeaufforderungsdaten eine vergleichbare SQL-Qualität wie Claude V2 zu einer viel besseren Leistung und einem viel besseren Preis liefern würde. Dies gilt, wenn die Benutzereingabe direkter und einfacher ist. Für anspruchsvollere Eingaben war Claude V2 erforderlich, um die gewünschte Genauigkeit zu erzielen.
Die Anwendung derselben Logik auf die Zusammenfassungsaufgabe führte uns zu dem Schluss, dass die Verwendung von Claude Instant oder Titan Text Express die erforderliche Genauigkeit bei einem viel besseren Leistungspunkt liefern würde, als wenn wir ein größeres Modell wie Claude V2 verwenden würden. Titan Text Expressed bot auch ein besseres Preis-Leistungs-Verhältnis, wie wir bereits besprochen haben.
Die Orchestrierungsherausforderung
Wir haben erkannt, dass es viel zu orchestrieren gibt, bevor wir eine aussagekräftige Antwort auf die Benutzerfrage erhalten können. Wie in der Lösungsübersicht gezeigt, umfasste der Prozess mehrere Datenbankfahrten und mehrere LLM-Reisen, die miteinander verflochten sind. Wenn wir von Grund auf neu bauen würden, hätten wir eine erhebliche Investition in die undifferenzierte Schwerstarbeit tätigen müssen, nur um den Basiscode fertigzustellen. Wir sind schnell dazu übergegangen, LangChain als Orchestrierungs-Framework zu verwenden, die Leistungsfähigkeit der Open-Source-Community zu nutzen und vorhandene Module wiederzuverwenden, ohne das Rad neu zu erfinden.
Die SQL-Herausforderung
Wir haben auch festgestellt, dass die Generierung von SQL nicht so einfach ist wie Kontextextraktionsmechanismen wie die semantische Suche oder die Verwendung von Einbettungen. Wir müssen zunächst das Datenbankschema und einige Beispielzeilen abrufen, um sie in unsere Eingabeaufforderung an das LLM aufzunehmen. Außerdem gibt es die SQL-Validierungsphase, in der wir sowohl mit der Datenbank als auch mit dem LLM interagieren mussten. SQLDatabaseChain war die offensichtliche Wahl des Tools. Da es Teil von LangChain ist, war die Anpassung unkompliziert, und jetzt können wir die SQL-Generierung und -Verifizierung mithilfe der Kette verwalten und so den Arbeitsaufwand minimieren.
Leistungsherausforderungen
Durch den Einsatz von Claude V2 und nach einer ordnungsgemäßen schnellen Entwicklung (die wir im nächsten Abschnitt besprechen) konnten wir qualitativ hochwertiges SQL erstellen. Angesichts der Qualität des generierten SQL begannen wir zu untersuchen, welchen Mehrwert die Validierungsphase tatsächlich bringt. Nach einer weiteren Analyse der Ergebnisse wurde deutlich, dass die Qualität der generierten SQL durchweg korrekt war, sodass das Kosten-Nutzen-Verhältnis der Hinzufügung einer SQL-Validierungsphase ungünstig war. Letztendlich haben wir die SQL-Validierungsphase eliminiert, ohne die Qualität unserer Ausgabe negativ zu beeinflussen, und die Roundtrip-Zeit für die SQL-Validierung verkürzt.
Zusätzlich zur Optimierung für ein kosten- und leistungseffizienteres LLM für den Zusammenfassungsschritt konnten wir mit Titan Text Express eine bessere Leistung und Kosteneffizienz erzielen.
Zur weiteren Leistungsoptimierung gehörte die Feinabstimmung des Abfragegenerierungsprozesses mithilfe effizienter Prompt-Engineering-Techniken. Anstatt eine Fülle von Tokens bereitzustellen, lag der Schwerpunkt auf der Bereitstellung einer möglichst geringen Menge an Eingabe-Tokens, in der richtigen Syntax, die das Modell verstehen soll, und mit dem minimalen, aber optimalen Satz an Anweisungen. Darauf gehen wir im nächsten Abschnitt näher ein – es handelt sich um ein wichtiges Thema, das nicht nur hier, sondern auch in anderen Anwendungsfällen anwendbar ist.
Schnelles Engineering und Optimierung
Sie können Claude auf Amazon Bedrock für verschiedene Geschäftsanwendungsfälle anpassen, wenn die richtigen Prompt-Engineering-Techniken eingesetzt werden. Claude fungiert hauptsächlich als Gesprächsassistent, der ein Mensch-Assistent-Format nutzt. Claude ist darin geschult, Texte für die Assistentenrolle auszufüllen. Angesichts der gewünschten Anweisungen und prompten Vervollständigungen können wir unsere Prompts für Claude mithilfe verschiedener Techniken optimieren.
Wir beginnen mit einer ordnungsgemäß formatierten Eingabeaufforderungsvorlage, die eine gültige Vervollständigung liefert. Anschließend können wir die Antworten weiter optimieren, indem wir mit Eingabeaufforderungen mit verschiedenen Eingabesätzen experimentieren, die für Daten aus der realen Welt repräsentativ sind. Es wird empfohlen, bei der Entwicklung einer Eingabeaufforderungsvorlage viele Eingaben einzuholen. Sie können auch separate Sätze von Prompt-Entwicklungsdaten und Testdaten verwenden.
Eine andere Möglichkeit, die Claude-Antwort zu optimieren, besteht darin, zu experimentieren und zu iterieren, indem Regeln, Anweisungen usw. hinzugefügt werden nützliche Optimierungen. Anhand dieser Optimierungen können Sie verschiedene Arten von Vervollständigungen anzeigen, indem Sie beispielsweise Claude auffordern, „Ich weiß nicht“ zu erwähnen, um Halluzinationen vorzubeugen, Schritt für Schritt denken, Eingabeaufforderungsverkettungen verwenden und Raum zum „Nachdenken“ geben, während dadurch Antworten generiert werden und Überprüfung auf Verständnis und Richtigkeit.
Lassen Sie uns unsere Abfragegenerierungsaufgabe verwenden und einige der Techniken besprechen, die wir zur Optimierung unserer Eingabeaufforderung verwendet haben. Es gab einige Kernelemente, die unseren Bemühungen zur Abfragegenerierung zugute kamen:
- Verwendung der richtigen Mensch-/Assistenten-Syntax
- Verwendung von XML-Tags (Claude respektiert und versteht XML-Tags)
- Hinzufügen klarer Anweisungen für das Modell, um Halluzinationen zu verhindern
Das folgende generische Beispiel zeigt, wie wir die Mensch-/Assistent-Syntax verwendet, XML-Tags angewendet und Anweisungen hinzugefügt haben, um die Ausgabe auf SQL zu beschränken und das Modell anzuweisen, „Entschuldigung, ich kann nicht helfen“ zu sagen, wenn es kein relevantes SQL erzeugen kann . Die XML-Tags wurden verwendet, um die Anweisungen, zusätzliche Hinweise, das Datenbankschema, zusätzliche Tabellenerklärungen und Beispielzeilen einzurahmen.
Die endgültige Arbeitslösung
Nachdem wir alle beim Proof of Concept identifizierten Herausforderungen angegangen waren, hatten wir alle Lösungsanforderungen erfüllt. Q4 war mit der Qualität des vom LLM generierten SQL zufrieden. Dies gilt für einfache Aufgaben, die nur eine WHERE-Klausel zum Filtern der Daten erforderten, aber auch für komplexere Aufgaben, die kontextbasierte Aggregationen mit GROUP BY und mathematische Funktionen erforderten. Die End-to-End-Latenz der Gesamtlösung lag im einstelligen Sekundenbereich, was für den Anwendungsfall als akzeptabel definiert wurde. Dies alles war der Wahl eines optimalen LLM in jeder Phase, einem ordnungsgemäßen Prompt-Engineering, dem Wegfall des SQL-Verifizierungsschritts und der Verwendung eines effizienten LLM für den Zusammenfassungsschritt (Titan Text Express oder Claude Instant) zu verdanken.
Es ist erwähnenswert, dass die Verwendung von Amazon Bedrock als vollständig verwalteter Dienst und die Möglichkeit, über dieselbe API auf eine Reihe von LLMs zuzugreifen, Experimente und einen nahtlosen Wechsel zwischen LLMs durch Änderung des Modellnamens im API-Aufruf ermöglichten. Mit diesem Maß an Flexibilität war Q4 in der Lage, für jeden LLM-Aufruf das leistungsstärkste LLM auszuwählen, basierend auf der Art der Aufgabe, sei es Abfragegenerierung, Verifizierung oder Zusammenfassung.
Zusammenfassung
Es gibt keine Lösung, die für alle Anwendungsfälle geeignet ist. Bei einem RAG-Ansatz hängt die Qualität der Ausgabe stark von der Bereitstellung des richtigen Kontexts ab. Das Extrahieren des richtigen Kontexts ist der Schlüssel, und jeder Datensatz ist aufgrund seiner einzigartigen Eigenschaften anders.
In diesem Beitrag haben wir gezeigt, dass die Verwendung von SQL zum Extrahieren des für die Erweiterung verwendeten Kontexts bei numerischen und strukturierten Datensätzen zu günstigeren Ergebnissen führen kann. Wir haben auch gezeigt, dass Frameworks wie LangChain den Codierungsaufwand minimieren können. Darüber hinaus haben wir die Notwendigkeit erörtert, innerhalb desselben Anwendungsfalls zwischen LLMs wechseln zu können, um die optimale Genauigkeit, Leistung und Kosten zu erzielen. Abschließend haben wir hervorgehoben, wie Amazon Bedrock, serverlos und mit einer Vielzahl von LLMs unter der Haube, die erforderliche Flexibilität bietet, um sichere, leistungsstarke und kostenoptimierte Anwendungen mit dem geringsten Aufwand zu erstellen.
Beginnen Sie Ihre Reise zur Entwicklung generativer KI-gestützter Anwendungen, indem Sie einen Anwendungsfall identifizieren, der für Ihr Unternehmen von Nutzen ist. Wie das Q4-Team erfahren hat, kann die SQL-Generierung bei der Entwicklung intelligenter Anwendungen, die sich in Ihre Datenspeicher integrieren, bahnbrechend sein und so Umsatzpotenzial erschließen.
Über die Autoren
Tamer Soliman ist Senior Solutions Architect bei AWS. Er unterstützt Kunden von unabhängigen Softwareanbietern (Independent Software Vendor, ISV) bei der Innovation, dem Aufbau und der Skalierung auf AWS. Er verfügt über mehr als zwei Jahrzehnte Branchenerfahrung in den Bereichen Beratung, Schulung und professionelle Dienstleistungen. Er ist ein Multi-Patent-Erfinder mit drei erteilten Patenten und seine Erfahrung erstreckt sich über mehrere Technologiebereiche, darunter Telekommunikation, Netzwerke, Anwendungsintegration, KI/ML und Cloud-Bereitstellungen. Er ist auf AWS-Netzwerke spezialisiert und hat eine tiefe Leidenschaft für maschinelles Lernen, KI und generative KI.
Mani Chanuja ist Tech Lead – Generative AI Specialists, Autorin des Buches „Applied Machine Learning and High Performance Computing on AWS“ und Mitglied des Vorstands der Women in Manufacturing Education Foundation. Sie leitet Projekte zum maschinellen Lernen (ML) in verschiedenen Bereichen wie Computer Vision, Verarbeitung natürlicher Sprache und generative KI. Sie hilft Kunden dabei, große Modelle für maschinelles Lernen in großem Maßstab zu erstellen, zu trainieren und bereitzustellen. Sie spricht auf internen und externen Konferenzen wie re:Invent, Women in Manufacturing West, YouTube-Webinaren und GHC 23. In ihrer Freizeit geht sie gerne lange Läufe am Strand entlang.
Stanislaw Jeschtschenko ist Softwarearchitekt bei Q4 Inc.. Er verfügt über mehr als ein Jahrzehnt Branchenerfahrung in der Softwareentwicklung und Systemarchitektur. Sein vielfältiger Hintergrund, der Rollen wie technischer Leiter und leitender Full-Stack-Entwickler umfasst, ermöglicht seinen Beitrag zur Weiterentwicklung der Innovation der Q4-Plattform. Stanislav widmet sich der Förderung technischer Innovationen und der Gestaltung strategischer Lösungen in diesem Bereich.
- 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/how-q4-inc-used-amazon-bedrock-rag-and-sqldatabasechain-to-address-numerical-and-structured-dataset-challenges-building-their-qa-chatbot/
- :hast
- :Ist
- :nicht
- :Wo
- $UP
- 100
- 118
- 125
- 15%
- 23
- 7
- a
- Fähigkeiten
- Fähigkeit
- Fähig
- Abstraktion
- Fülle
- akzeptabel
- Zugang
- zugänglich
- Konto
- Genauigkeit
- genau
- Erreichen
- über
- Handlungen
- berührt das Schneidwerkzeug
- automatisch
- hinzugefügt
- Hinzufügen
- Zusatz
- Zusätzliche
- zusätzlich
- Zugänge
- Adresse
- angesprochen
- Einstellung
- advanced
- Vorrückend
- Vorteil
- Nach der
- gegen
- Agenten
- Aggregat
- AI
- KI-Dienste
- KI-Anwendungsfälle
- AI / ML
- gezielt
- ausrichten
- ausgerichtet
- Alle
- erlauben
- erlaubt
- entlang
- ebenfalls
- Obwohl
- am
- Amazon
- Amazon Web Services
- Betrag
- Beträge
- an
- Analyse
- Business Analysten
- Analytik
- analysieren
- Analyse
- und
- Ein anderer
- beantworten
- Antworten
- Anthropisch
- jedem
- etwas
- Bienen
- APIs
- anwendbar
- Anwendung
- Anwendungen
- angewandt
- Ansatz
- Architektur
- SIND
- AS
- fragen
- Details
- Assistentin
- unterstützt
- Sortiment
- At
- vermehren
- Augmented
- Autor
- verfügbar
- bewusst
- AWS
- Zurück
- Hintergrund
- basierend
- basic
- BE
- Beach
- wurde
- weil
- war
- Bevor
- Anfang
- Verhalten
- Sein
- angenommen
- vorteilhaft
- BESTE
- Best Practices
- Besser
- zwischen
- Milliarden
- Blockieren
- Blockiert
- Tafel
- Vorstand
- buchen
- Wander- und Outdoorschuhen
- beide
- Breite
- Break
- breit
- bauen
- Building
- baut
- erbaut
- Geschäft
- aber
- by
- rufen Sie uns an!
- kam
- CAN
- Kann bekommen
- Fähigkeiten
- capability
- Hauptstadt
- Kapitalmärkte
- österreichische Unternehmen
- Häuser
- Fälle
- Kette
- Ketten
- challenges
- Herausforderungen
- Herausforderungen beim Bauen
- Übernehmen
- Changer
- Ändern
- Charakteristik
- Chatbot
- Chatbots
- Wahl
- Auswählen
- Auswahl
- Clarity
- reinigen
- klar
- näher
- Cloud
- Code
- Programmierung
- Kolonne
- kombiniert
- Vereinigung
- wie die
- Bemerkungen
- kommerziell
- mit uns kommunizieren,
- Kommunikation
- community
- Unternehmen
- Unternehmen
- vergleichbar
- Abschluss
- Komplex
- Komplexität
- Compliance
- Komponenten
- begreifen
- Berechnen
- Computer
- Computer Vision
- Computing
- konzept
- Schluss
- geschlossen
- Abschluss
- durchgeführt
- Kongressbegleitung
- Vernetz Dich
- Sich zusammenschliessen
- Verbindung
- Geht davon
- betrachtet
- Berücksichtigung
- konsequent
- Bestehend
- besteht
- konstruieren
- Consulting
- Inhalt
- Kontext
- kontextuelle
- fortsetzen
- ständig
- Beiträge
- konventionellen
- Konversations
- Konvertierungen
- umgewandelt
- koordinieren
- Kernbereich
- und beseitigen Muskelschwäche
- Kosten
- könnte
- erstellen
- kritischem
- CRM
- wichtig
- Kunde
- Kunden
- Unterricht
- technische Daten
- Datensee
- Datenpunkte
- Datenschutz
- Datenschutz und Sicherheit
- Datenwissenschaft
- datengesteuerte
- Datenbase
- Datensätze
- Datum
- Jahrzehnte
- Jahrzehnte
- entschieden
- Entscheiden
- gewidmet
- angenommen
- definiert
- Demand
- Synergie
- zeigt
- hängt
- einsetzen
- Implementierungen
- beschreiben
- Beschreibung
- erwünscht
- detailliert
- Details
- entschlossen
- Entwickler:in / Unternehmen
- Entwicklung
- Entwicklung
- anders
- Direkt
- Direkt
- Geschäftsführung
- diskutieren
- diskutiert
- tauchen
- verschieden
- do
- Domain
- Domains
- Nicht
- doppelte Kontrolle
- nach unten
- Fahren
- zwei
- im
- dynamisch
- jeder
- Früher
- Einfache
- Ökosystem
- Bildungswesen
- Effektiv
- Effizienz
- effizient
- effizient
- Anstrengung
- Bemühungen
- entweder
- Elemente
- Wählbarkeit
- eliminieren
- aufstrebenden
- beschäftigt
- ermöglicht
- Ende
- End-to-End
- beendet
- engagieren
- Engagement
- Entwicklung
- genug
- gewährleisten
- ausgestattet
- Äquivalent
- Nachhaltigkeit
- insbesondere
- etablieren
- Auswerten
- Auswertung
- Sogar
- Veranstaltungen
- Jedes
- Beispiel
- Beispiele
- vorhandenen
- erwarten
- erwartet
- teuer
- ERFAHRUNGEN
- Experiment
- Experimente
- Experte
- Expertise
- Erkundet
- express
- zum Ausdruck gebracht
- Verlängerung
- extern
- Extrakt
- Extraktion
- konfrontiert
- erleichtert
- Faktoren
- schnelllebig
- günstig
- möglich
- wenige
- Feld
- Felder
- füllen
- Filter
- Finale
- Endlich
- Revolution
- Finanzdaten
- Vorname
- Flexibilität
- Fluss
- Setzen Sie mit Achtsamkeit
- folgen
- Folgende
- Aussichten für
- Format
- vorwärts
- Förderung
- gefunden
- Foundation
- FRAME
- Unser Ansatz
- Gerüste
- Frei
- für
- voller
- Voller Stapel
- voll
- funktional
- Funktionen
- weiter
- Spiel
- Game-Changer
- DSGVO
- (DSGVO) Datenschutzgrundverordnung konform
- ausgerichtet
- Allgemeines
- erzeugen
- erzeugt
- erzeugt
- Erzeugung
- Generation
- generativ
- Generative KI
- bekommen
- bekommen
- ABSICHT
- gegeben
- gibt
- Unterstützung
- Go
- Kundenziele
- Ziele
- gut
- erteilt
- groß
- Gruppe an
- persönlichem Wachstum
- hätten
- Pflege
- glücklich
- Haben
- mit
- he
- Hauptsitz
- schwer
- schweres Heben
- Hilfe
- hilft
- hier (auf dänisch)
- hier
- GUTE
- leistungsstark
- hochwertige
- höher
- höchste
- Besondere
- Highlights
- hoch
- Hinweise
- seine
- Geschichte
- Haube
- Ultraschall
- aber
- HTTPS
- human
- für Menschen lesbar
- i
- Idee
- identifiziert
- Identifizierung
- if
- Image
- Impact der HXNUMXO Observatorien
- wirkt
- Auswirkungen
- Einfluss hat
- implementieren
- Implementierung
- Realisierungen
- umgesetzt
- Auswirkungen
- wichtig
- zu unterstützen,
- in
- In anderen
- Inc.
- das
- Einschließlich
- Erhöhung
- inkremental
- unabhängig
- Einzelpersonen
- Energiegewinnung
- Information
- Infrastruktur
- Anfangs-
- anfänglich
- wir innovieren
- Innovation
- Varianten des Eingangssignals:
- Eingänge
- sofortig
- Institutionen
- Anleitung
- integrieren
- Integration
- wollen
- interagieren
- Interaktionen
- intern
- verflochten
- in
- intuitiv
- Investition
- Investor
- Investoren
- beteiligt
- Emittenten
- Isv
- IT
- SEINE
- Reise
- jpg
- nur
- Behalten
- Wesentliche
- Wissend
- Wissen
- bekannt
- Labs
- See
- Landschaft
- Sprache
- grosse
- größer
- Nachname
- zuletzt
- Latency
- später
- Lagen
- führen
- führenden
- umwandeln
- gelernt
- lernen
- am wenigsten
- geführt
- Programm
- Lessons Learned
- Niveau
- Facelift
- Gefällt mir
- Gleichen
- LLM
- Logik
- London
- Lang
- aussehen
- suchen
- Los
- Maschine
- Maschinelles Lernen
- gemacht
- Main
- hauptsächlich
- Mainstream
- halten
- Aufrechterhaltung
- um
- MACHT
- verwalten
- verwaltet
- Management
- Herstellung
- viele
- Markt
- Market Analysis
- Marktdaten
- Märkte
- abgestimmt
- mathematisch
- Kann..
- sinnvoll
- gemeint
- Mechanismen
- Triff
- Mitglied
- versiegelte
- Meta
- Metadaten
- Methode
- Methodik
- Microservices
- minimal
- minimieren
- mischen
- ML
- Modell
- für
- modern
- Module
- mehr
- vor allem warme
- meist
- ziehen um
- viel
- Multi
- mehrere
- Name
- nativen
- Natürliche
- Verarbeitung natürlicher Sprache
- Natur
- notwendig,
- Need
- erforderlich
- negativ
- Vernetzung
- Neu
- New York
- weiter
- nicht
- beachten
- Bemerkens
- jetzt an
- Anzahl
- Zahlen
- Ziel
- offensichtlich
- of
- WOW!
- angeboten
- Angebote
- Offiziere
- Büros
- vorgenommen,
- on
- EINEM
- einzige
- XNUMXh geöffnet
- Open-Source-
- optimal
- Optimierung
- Optimieren
- optimiert
- Optimierung
- Optionen
- or
- orchestrieren
- Orchesterbearbeitung
- Auftrag
- Original
- Andere
- UNSERE
- Möglichkeiten für das Ausgangssignal:
- übrig
- Gesamt-
- Überblick
- überwältigend
- besitzen
- Besitz
- Eigentum
- Parameter
- Teil
- besondere
- Bestanden
- Leidenschaft & KREATIVITÄT
- Patent
- Patente
- Weg
- Ausführen
- Leistung
- Durchführung
- wählen
- Stücke
- Plattform
- Plato
- Datenintelligenz von Plato
- PlatoData
- Play
- Points
- Punkte
- positiv
- möglich
- Post
- Potenzial
- Werkzeuge
- Kräfte
- Praktiken
- bevorzugt
- Gegenwart
- vorgeführt
- verhindern
- Preis
- Grundsätze
- Datenschutz
- Datenschutz und Sicherheit
- Prozessdefinierung
- Verarbeitung
- produziert
- Produziert
- Produkte
- Professionell
- tiefgreifende
- Projekt
- Projekte
- Eingabeaufforderungen
- Beweis
- Proof of Concept
- ordnungsgemäße
- Eigentums-
- erwies sich
- die
- vorausgesetzt
- bietet
- Bereitstellung
- Öffentlichkeit
- öffentliche Firmen
- öffentlich
- Zweck
- setzen
- F&A
- Qualität
- Abfragen
- Frage
- schnell
- Zitate
- Rangliste
- lieber
- RE
- bereit
- realen Welt
- realisiert
- erhalten
- empfohlen
- Aufzeichnungen
- Referenzierung
- geregelt
- Verhältnis
- Beziehung
- relevant
- Meldungen
- Vertreter
- Darstellen
- representiert
- erfordern
- falls angefordert
- Voraussetzungen:
- Ressourcen
- geachtet
- Respekt
- Antwort
- Antworten
- eine Beschränkung
- Die Ergebnisse
- Einnahmen
- zurückkehren
- Überprüfung
- Recht
- Risiken
- Rollen
- Rollen
- Zimmer
- rund
- Ohne eine erfahrene Medienplanung zur Festlegung von Regeln und Strategien beschleunigt der programmatische Medieneinkauf einfach die Rate der verschwenderischen Ausgaben.
- Führen Sie
- läuft
- gleich
- zufrieden
- zufrieden
- Speichern
- Skalierbarkeit
- Skalieren
- Wissenschaft
- kratzen
- nahtlos
- nahtlos
- Suche
- Zweite
- Sekunden
- Abschnitt
- Verbindung
- Sicherheitdienst
- sehen
- Auswahl
- Sellers
- senden
- Senior
- Sinn
- getrennte
- Modellreihe
- Serverlos
- Lösungen
- kompensieren
- Sets
- mehrere
- Gestaltung
- Aktionär
- Aktionäre
- sie
- sollte
- zeigte
- gezeigt
- Konzerte
- signifikant
- Einfacher
- einfacher
- vereinfachte
- vereinfachen
- Vereinfachung
- Single
- Größe
- Größen
- kleinere
- smart
- schlauer
- Software
- Software-Entwicklung
- Lösung
- Lösungen
- einige
- anspruchsvoll
- Quelle
- Quellen
- überspannend
- überspannt
- spricht
- Spezialisten
- spezialisiert
- spezifisch
- speziell
- Stabilität
- Stapel
- Stufe
- Einsätze
- Stand
- steht
- Anfang
- begonnen
- Beginnen Sie
- Erklärung
- bleiben
- Schritt
- Shritte
- -bestands-
- Börse
- gelagert
- Läden
- einfach
- Strategisch
- Struktur
- strukturierte
- Anschließend
- Erfolg
- Erfolgreich
- so
- ausreichend
- geeignet
- Suite
- zusammenfassen
- ZUSAMMENFASSUNG
- Support
- Unterstützt
- Überwachung
- Schalter
- Syntax
- System
- Tabelle
- zugeschnitten
- Nehmen
- gemacht
- nimmt
- Einnahme
- Aufgabe
- und Aufgaben
- Team
- Tech
- Technische
- Techniken
- Technologie
- Telekom
- erzählen
- Vorlage
- Test
- Testen
- Tests
- Text
- als
- Vielen Dank
- zur Verbesserung der Gesundheitsgerechtigkeit
- Das
- Die Hauptstadt
- ihr
- dann
- Dort.
- Diese
- vom Nutzer definierten
- Denken
- fehlen uns die Worte.
- nach drei
- Durch
- während
- Zeit
- Zeitfolgen
- mal
- Titan
- zu
- heutigen
- gemeinsam
- Zeichen
- Tokens
- auch
- Werkzeug
- Werkzeuge
- Thema
- toronto
- gegenüber
- Training
- trainiert
- Ausbildung
- Transaktion
- Transaktionen
- Transformieren
- Ausflug
- was immer dies auch sein sollte.
- Vertrauen
- WENDE
- XNUMX
- tippe
- Typen
- typisch
- nicht fähig
- für
- zugrunde liegen,
- verstehen
- Verständnis
- versteht
- verstanden
- einzigartiges
- Entriegelung
- unnötig
- us
- -
- Anwendungsfall
- benutzt
- Mitglied
- benutzerfreundlich
- Verwendung von
- die
- gültig
- Bestätigung
- Wert
- Vielfalt
- verschiedene
- Verkäufer
- Verification
- verified
- überprüfen
- sehr
- lebensfähig
- Anzeigen
- Assistent
- Seh-
- Spaziergang
- wollte
- wurde
- Weg..
- we
- Netz
- Web-Services
- Webinare
- Webseite
- GUT
- ging
- waren
- West
- Was
- Rad
- wann
- während
- welche
- während
- werden wir
- mit
- .
- ohne
- Damen
- Worte
- Arbeiten
- gearbeitet
- Arbeitsablauf.
- arbeiten,
- wert
- würde
- schreiben
- Code schreiben
- XML
- noch
- York
- Du
- Ihr
- Youtube
- Zephyrnet