Von Julia Wiesinger, Patrick Marlow und Vladimir Vuskovic
Original: https://www.kaggle.com/whitepaper-agents
Verzeichnis (auf der Festplatte des Computers)
kurz
Was ist ein intelligenter Körper?
Modellierung
Artefakt
Orchestrierungsschicht
Intelligenz und Modellierung
Kognitive Architektur: Wie Intelligenz funktioniert
Werkzeuge: unsere Schlüssel zur Außenwelt
Erweiterungen
Beispielhafte Erweiterungen
Funktion (math.)
Anwendungsfall
Funktion Beispielcode
Datenspeicherung
Umsetzung und Anwendung
Überprüfung der Werkzeuge
Verbesserung der Modellleistung durch gezieltes Lernen
Schnellstart Intelligentsia mit LangChain
Produktionsanwendungen mit Vertex AI-Intelligenzen
Zusammenfassungen
Diese Kombination aus logischem Denken und dem Zugang zu externen Informationen in Verbindung mit generativen KI-Modellen führt zum Konzept der Intelligenz.
kurz
Menschen sind sehr gut darin, unübersichtliche Mustererkennungsaufgaben zu bewältigen. Allerdings sind sie oft auf Hilfsmittel angewiesen - wie Bücher, Google-Suchen oder Taschenrechner -, um ihr Vorwissen zu ergänzen, bevor sie zu einer Schlussfolgerung gelangen können.
Genau wie Menschen können generative KI-Modelle so trainiert werden, dass sie Tools nutzen, um auf Echtzeitinformationen zuzugreifen oder reale Aktionen vorzuschlagen. So können Modelle beispielsweise mit Hilfe von Datenbanksuchwerkzeugen auf bestimmte Informationen wie die Kaufhistorie eines Kunden zugreifen, um maßgeschneiderte Einkaufsempfehlungen zu generieren.
Alternativ kann das Modell auf der Grundlage einer Benutzeranfrage verschiedene API-Aufrufe tätigen, eine E-Mail-Antwort an einen Kollegen senden oder eine Finanztransaktion in Ihrem Namen durchführen. Dazu muss das Modell nicht nur auf eine Reihe von externen Tools zugreifen, sondern auch in der Lage sein, jede Aufgabe selbständig zu planen und auszuführen.
Diese Kombination aus logischem Denken und dem Zugang zu externen Informationen ist mit dem generativen KI-Modell verbunden und führt zu der Vorstellung eines intelligenten Körpers oder Programms, das die unabhängigen Fähigkeiten des generativen KI-Modells erweitert. In diesem Whitepaper werden all diese und verwandte Aspekte näher untersucht.
Was ist ein intelligenter Körper?
In ihrer grundlegendsten Form kann eine generative KI-Intelligenz als eine Anwendung definiert werden, die versucht, ein Ziel zu erreichen, indem sie die Welt beobachtet und mit den ihr zur Verfügung stehenden Mitteln darauf reagiert. Intelligente Systeme sind autonom und können unabhängig von menschlichen Eingriffen agieren, insbesondere wenn ihnen geeignete Ziele oder Absichten vorgegeben werden, die sie erfüllen sollen. Intelligente Intelligenzen können auch proaktiv handeln, um ihre Ziele zu erreichen. Selbst wenn ein intelligenter Körper keine ausdrücklichen Anweisungen von einem Menschen erhält, kann er überlegen, was er als Nächstes tun sollte, um sein Endziel zu erreichen. Während das Konzept der Intelligenzen in der KI recht allgemein und leistungsstark ist, konzentriert sich dieses Whitepaper auf die spezifischen Arten von Intelligenzen, die generative KI-Modelle zum Zeitpunkt der Veröffentlichung aufbauen können.
Um das Innenleben von Intelligenzen zu verstehen, müssen wir zunächst die zugrunde liegenden Komponenten beschreiben, die ihr Verhalten, ihre Handlungen und Entscheidungen steuern. Die Kombination dieser Komponenten kann als kognitive Architektur beschrieben werden, und es gibt viele solcher Architekturen, die durch Mischen und Anpassen dieser Komponenten realisiert werden können. Wenn wir uns auf die Kernfunktionen konzentrieren, gibt es drei grundlegende Komponenten in der kognitiven Architektur eines intelligenten Körpers, wie in Abbildung 1 dargestellt.
Abbildung 1: Generische Intelligenzarchitektur und Komponenten
Modellierung
Im Kontext von Intelligentsia ist ein Modell ein Sprachmodell (LM), das als zentraler Entscheidungsträger für die Prozesse der Intelligentsia verwendet wird. Bei den von Intelligentsia verwendeten Modellen kann es sich um ein oder mehrere LM beliebiger Größe (klein/groß) handeln, die in der Lage sind, anweisungsbasierten Schlussfolgerungen und logischen Rahmenwerken wie ReAct, Chain of Thought oder Thinking Tree zu folgen. Die Modelle können generisch, multimodal oder auf die Bedürfnisse Ihrer speziellen Smartbody-Architektur abgestimmt sein. Um die besten Produktionsergebnisse zu erzielen, sollten Sie ein Modell verwenden, das am besten für Ihre beabsichtigte Endanwendung geeignet ist und idealerweise auf die Datensignatur trainiert wurde, die mit den Werkzeugen verbunden ist, die Sie in Ihrer kognitiven Architektur verwenden wollen. Es ist wichtig zu beachten, dass das Modell in der Regel nicht mit den spezifischen Konfigurationseinstellungen (d. h. Toolauswahl, Orchestrierung/Reasoning-Einstellungen) der Intelligenzen trainiert wird. Das Modell kann jedoch weiter optimiert werden, um die Aufgaben des intelligenten Körpers auszuführen, indem ihm Beispiele zur Verfügung gestellt werden, die die Funktionalität des intelligenten Körpers demonstrieren, einschließlich Fällen, in denen der intelligente Körper bestimmte Werkzeuge oder Schlussfolgerungsschritte in verschiedenen Kontexten verwendet.
Artefakt
Das zugrunde liegende Modell ist trotz seiner beeindruckenden Fähigkeiten zur Text- und Bilderzeugung nach wie vor durch seine Unfähigkeit zur Interaktion mit der Außenwelt eingeschränkt. Tools überbrücken diese Lücke, indem sie Intelligenz in die Lage versetzen, mit externen Daten und Diensten zu interagieren und dabei einen breiteren Umfang an Operationen als das zugrunde liegende Modell selbst zu erschließen. Tools können viele Formen annehmen und sind unterschiedlich komplex, orientieren sich aber in der Regel an gängigen Web-API-Methoden wie GET, POST, PATCH und DELETE. Tools können zum Beispiel Kundeninformationen in einer Datenbank aktualisieren oder Wetterdaten abrufen, um die Reiseempfehlungen zu beeinflussen, die eine Intelligenz einem Benutzer gibt. Mit Tools können Intelligenzen auf reale Informationen zugreifen und diese verarbeiten. Dadurch können sie speziellere Systeme wie die abrufgestützte Generierung (RAG), was die Fähigkeiten der Intelligenzen erheblich über das hinaus erweitert, was das zugrunde liegende Modell allein erreichen kann. Wir werden weiter unten ausführlicher auf Werkzeuge eingehen, aber es ist wichtig zu verstehen, dass Werkzeuge die Kluft zwischen den internen Funktionen der Intelligenzen und der externen Welt überbrücken und so eine breitere Palette von Möglichkeiten erschließen.
Orchestrierungsschicht
Die Orchestrierungsebene beschreibt einen zyklischen Prozess, der steuert, wie ein intelligenter Körper Informationen erhält, interne Überlegungen anstellt und diese Überlegungen als Grundlage für seine nächste Aktion oder Entscheidung verwendet. In der Regel wird diese Schleife fortgesetzt, bis der intelligente Körper sein Ziel oder seinen Haltepunkt erreicht hat. Die Komplexität der Orchestrierungsschicht kann je nach den Intelligenzen und den von ihnen ausgeführten Aufgaben sehr unterschiedlich sein. Einige Schleifen können einfache Berechnungen mit Entscheidungsregeln sein, während andere eine verkettete Logik enthalten, zusätzliche Algorithmen des maschinellen Lernens einbeziehen oder andere probabilistische Argumentationstechniken implementieren können. Wir werden die Implementierung der Intelligenz-Orchestrierungsschicht im Abschnitt über die kognitive Architektur ausführlicher erörtern.
Intelligenz und Modellierung
Um den Unterschied zwischen Intelligenzen und Modellen deutlicher zu machen, betrachten Sie das folgende Diagramm:
Modellierung | intelligenter Körper |
---|---|
Das Wissen ist auf das beschränkt, was in den Trainingsdaten vorhanden ist. | Das Wissen wird durch die Verbindung mit externen Systemen über Tools erweitert. |
Single-Session-Reasoning/Prädiktion auf der Grundlage von Benutzeranfragen. Es gibt keine Verwaltung des Sitzungsverlaufs oder des fortlaufenden Kontexts, es sei denn, dies ist ausdrücklich für das Modell vorgesehen. (z. B. Chat-Verlauf) | Verwaltung des Sitzungsverlaufs (z. B. Chat-Protokolle), um mehrere Runden von Schlussfolgerungen/Vorhersagen auf der Grundlage von Benutzeranfragen und Entscheidungen in der Orchestrierungsschicht zu ermöglichen. In diesem Fall ist eine "Runde" definiert als eine Interaktion zwischen einem interagierenden System und einer intelligenten Einrichtung. (d.h. 1 eingehendes Ereignis/Abfrage und 1 Antwort der intelligenten Stelle). |
Es gibt keine native Tool-Implementierung. | Die Werkzeuge sind in der nativen Smart-Body-Architektur implementiert. |
Es ist keine eigene Logikschicht implementiert. Benutzer können Prompts als einfache Fragen formulieren oder Inferenz-Frameworks (CoT, ReAct usw.) verwenden, um komplexe Prompts zu bilden, die das Modell bei der Erstellung von Vorhersagen anleiten. | Native kognitive Architekturen verwenden logische Rahmenwerke wie CoT, ReAct oder andere vorgefertigte Intelligenzrahmen wie LangChain. |
Kognitive Architektur: Wie Intelligenz funktioniert
Stellen Sie sich einen Küchenchef in einer geschäftigen Küche vor. Sein Ziel ist es, köstliche Gerichte für die Restaurantbesucher zu kreieren, was einen Kreislauf aus Planung, Ausführung und Anpassung erfordert.
- Sie sammeln Informationen wie Kundenbestellungen und Zutaten in Vorratskammer und Kühlschrank.
- Sie machen sich Gedanken darüber, welche Gerichte und Geschmacksrichtungen auf der Grundlage der soeben gesammelten Informationen zubereitet werden können.
- Sie werden aktiv, um Gerichte zuzubereiten: Gemüse schneiden, Gewürze mischen, Fleisch braten.
In jeder Phase des Prozesses nehmen die Köche bei Bedarf Anpassungen vor, verfeinern ihre Pläne, wenn die Zutaten zur Neige gehen oder wenn sie Rückmeldungen von Kunden erhalten, und verwenden die vorherigen Ergebnisse, um ihren nächsten Aktionsplan festzulegen. Dieser Zyklus aus Informationsaufnahme, Planung, Ausführung und Anpassung beschreibt die einzigartige kognitive Architektur, die Köche einsetzen, um ihre Ziele zu erreichen.
Wie ein Koch kann ein intelligenter Körper eine kognitive Architektur nutzen, um sein Endziel zu erreichen, indem er Informationen iterativ verarbeitet, fundierte Entscheidungen trifft und nachfolgende Aktionen auf der Grundlage früherer Ergebnisse verfeinert. Das Herzstück der kognitiven Architektur eines intelligenten Körpers ist die Orchestrierungsschicht, die für die Aufrechterhaltung des Gedächtnisses, des Zustands, des Denkens und der Planung verantwortlich ist. Sie nutzt das sich rasch entwickelnde Gebiet des Cue-Engineerings und damit zusammenhängende Rahmenwerke, um das Denken und die Planung zu steuern, so dass Intelligenzen mit ihrer Umgebung interagieren und Aufgaben effektiver erledigen können. Die Forschung in den Bereichen Cue-Engineering und Aufgabenplanung für Sprachmodelle entwickelt sich rasch weiter und bringt eine Vielzahl vielversprechender Ansätze hervor. Die folgende Liste erhebt keinen Anspruch auf Vollständigkeit, enthält aber einige der zum Zeitpunkt der Veröffentlichung dieses Whitepapers gängigsten Frameworks und Argumentationstechniken:
- ReAct, ein Cue-Engineering-Framework, bietet eine Denkprozess-Strategie für Sprachmodelle, um Benutzeranfragen mit oder ohne kontextuelle Beispiele zu verstehen und zu bearbeiten. ReAct-Cues übertreffen nachweislich mehrere SOTA-Baselines und verbessern die menschliche Handlungsfähigkeit und Glaubwürdigkeit für große Sprachmodelle.
- Chain of Thought (CoT), ein Cue-Engineering-Rahmen, der durch Zwischenschritte Argumentationsfähigkeiten ermöglicht. Es gibt verschiedene Untertechniken von CoT, einschließlich selbstreferenzieller, aktiver Cueing und multimodaler CoT, von denen jede je nach der spezifischen Anwendung Vor- und Nachteile hat.
- Der Thinking Tree (ToT), ein Cue-Engineering-Rahmen, ist ideal für explorative oder strategische Vorausschau-Aufgaben geeignet. Er verallgemeinert die Denkkettenaufforderungen und ermöglicht es den Modellen, verschiedene Gedankenketten zu erkunden, die als Zwischenschritte zur allgemeinen Problemlösung unter Verwendung von Sprachmodellen dienen.
Ein intelligenter Körper kann eine der oben genannten Argumentationstechniken oder viele andere verwenden, um die nächstbeste Aktion für eine bestimmte Benutzeranfrage auszuwählen. Betrachten wir zum Beispiel eine programmierte Verwendung des ReAct Der Rahmen wählt die richtigen Aktionen und Werkzeuge für die Intelligenz der Benutzeranfrage aus. Die Abfolge der Ereignisse könnte wie folgt aussehen:
- Der Nutzer sendet eine Anfrage an den Smart Body
- Geheimdienst beginnt ReAct-Sequenz
- Der intelligente Körper fordert das Modell auf, den nächsten ReAct zu erzeugen
Einer der Schritte und sein entsprechender Ausgang:
a. Fragen: Eingabe von Fragen aus Benutzeranfragen, versehen mit Eingabeaufforderungen
b. Überlegungen: Modellierung von Überlegungen, was als nächstes getan werden sollte
c. Operation: die Entscheidung des Modells, welche Aktion als nächstes durchgeführt werden soll
i. Hier können die Werkzeuge ausgewählt werden
ii) Eine Aktion könnte zum Beispiel [Flug, Suche, Code, Keine] sein, wobei die ersten drei für bekannte Werkzeuge stehen, aus denen das Modell wählen kann, und die letzte für "keine Werkzeugwahl".
d. Operative Eingaben: die Entscheidungen des Modells darüber, welche Eingaben an das Tool weitergegeben werden sollen, falls vorhanden.
e. Beobachtungen: Ergebnisse von Operationen/Manipulationen von Eingangssequenzen
i. Dieser Denk-/Operations-/Operationsinput/Beobachtung kann so oft wie nötig wiederholt werden. ii.
f. Endgültige Antwort: die endgültige Antwort des Modells auf die ursprüngliche Benutzeranfrage
4. die ReAct-Schleife endet und die endgültige Antwort PS wird dem Benutzer mitgeteilt:ReAct-Implementierungslogik Hands-on
Abbildung 2: Beispiel für Intelligentsia mit ReAct Reasoning in der Orchestrierungsschicht
Wie in Abbildung 2 dargestellt, sind das Modell, das Werkzeug und die Intelligenz so konfiguriert, dass sie zusammenarbeiten, um dem Nutzer eine fundierte, präzise Antwort auf seine ursprüngliche Anfrage zu geben. Während das Modell die Antwort auf der Grundlage seines A-priori-Wissens erraten kann (wodurch eine Illusion entsteht), verwendet es das Tool (Flüge), um in Echtzeit nach externen Informationen zu suchen. Diese zusätzlichen Informationen werden dem Modell zur Verfügung gestellt, damit es fundiertere Entscheidungen auf der Grundlage realer Daten treffen kann, die aggregiert und an den Nutzer zurückgegeben werden.
Zusammenfassend lässt sich sagen, dass die Qualität der Reaktion eines intelligenten Körpers in direktem Zusammenhang mit der Fähigkeit des Modells steht, diese verschiedenen Aufgaben zu durchdenken und zu bearbeiten, einschließlich der Fähigkeit, die richtigen Werkzeuge auszuwählen, und der Frage, wie gut diese Werkzeuge definiert sind. So wie ein Küchenchef ein Gericht mit frischen Zutaten zubereitet und auf das Feedback seiner Kunden achtet, ist ein intelligenter Körper auf fundierte Überlegungen und zuverlässige Informationen angewiesen, um optimale Ergebnisse zu erzielen. Im nächsten Abschnitt werden wir uns mit den verschiedenen Möglichkeiten befassen, wie Intelligenzler mit frischen Daten in Verbindung treten.
Werkzeuge: unsere Schlüssel zur Außenwelt
Sprachmodelle sind zwar gut darin, Informationen zu verarbeiten, doch fehlt ihnen die Fähigkeit, die reale Welt direkt wahrzunehmen und zu beeinflussen. Dies schränkt ihre Nützlichkeit in Situationen ein, in denen sie mit externen Systemen oder Daten interagieren müssen. Das bedeutet, dass ein Sprachmodell in gewissem Sinne nur so gut ist wie das, was es aus seinen Trainingsdaten lernt. Doch egal, wie viele Daten wir in unsere Modelle einspeisen, ihnen fehlt immer noch die grundlegende Fähigkeit, mit der Außenwelt zu interagieren. Wie können wir also unsere Modelle in die Lage versetzen, mit externen Systemen in Echtzeit und kontextbezogen zu interagieren? Funktionen, Erweiterungen, Datenspeicher und Plugins sind allesamt Möglichkeiten, um Modelle mit dieser wichtigen Fähigkeit auszustatten.
Obwohl sie viele Namen haben, sind Werkzeuge das Bindeglied, das eine Verbindung zwischen unseren zugrunde liegenden Modellen und der Außenwelt herstellt. Diese Verbindung zu externen Systemen und Daten ermöglicht es unseren Intelligenzen, eine Vielzahl von Aufgaben mit größerer Genauigkeit und Zuverlässigkeit auszuführen. So kann ein intelligenter Körper mit Hilfe von Werkzeugen beispielsweise Smart-Home-Einstellungen anpassen, einen Kalender aktualisieren, Benutzerinformationen aus einer Datenbank abrufen oder eine E-Mail auf der Grundlage bestimmter Anweisungen versenden.
Zum Zeitpunkt der Erstellung dieses Whitepapers gibt es drei Haupttypen von Tools, mit denen Google-Modelle interagieren können: Erweiterungen, Funktionen und Datenspeicher. Indem wir Intelligenzen mit Werkzeugen ausstatten, erschließen wir ihr enormes Potenzial, die Welt nicht nur zu verstehen, sondern auch zu handeln, was die Tür zu unzähligen neuen Anwendungen und Möglichkeiten öffnet.
Erweiterungen
Der einfachste Weg, Erweiterungen zu verstehen, besteht darin, sich vorzustellen, dass sie die Kluft zwischen APIs und intelligenten Anwendungen auf standardisierte Weise überbrücken und es intelligenten Anwendungen ermöglichen, APIs nahtlos auszuführen, unabhängig von ihrer zugrunde liegenden Implementierung. Nehmen wir an, Sie haben eine intelligente Anwendung entwickelt, deren Ziel es ist, Nutzern bei der Buchung von Flügen zu helfen. Sie wissen, dass Sie die Google Flights-API verwenden möchten, um Fluginformationen abzurufen, aber Sie sind nicht sicher, wie Sie Ihren intelligenten Körper dazu bringen können, diesen API-Endpunkt aufzurufen.
Abbildung 3: Wie interagieren die Intelligenzen mit externen APIs?
Ein Ansatz könnte darin bestehen, benutzerdefinierten Code zu implementieren, der eine eingehende Benutzeranfrage aufnimmt, sie nach relevanten Informationen analysiert und dann einen API-Aufruf tätigt. Im Anwendungsfall "Flugbuchung" könnte ein Benutzer zum Beispiel sagen: "Ich möchte einen Flug von Austin nach Zürich buchen." In diesem Fall müsste unsere benutzerdefinierte Codelösung "Austin" und "Zürich" als relevante Entitäten aus der Benutzerabfrage extrahieren, bevor ein API-Aufruf erfolgen kann. Was passiert aber, wenn der Benutzer sagt: "Ich möchte einen Flug nach Zürich buchen", ohne eine Abflugstadt anzugeben? Ohne die erforderlichen Daten wird der API-Aufruf fehlschlagen, und es muss mehr Code implementiert werden, um solche Rand- und Extremfälle zu erfassen. Dieser Ansatz ist nicht skalierbar und kann leicht in jeder Situation fehlschlagen, die über den Umfang des implementierten benutzerdefinierten Codes hinausgeht.
Ein zuverlässigerer Ansatz ist die Verwendung von Erweiterungen. Erweiterungen überbrücken die Kluft zwischen Intelligenzen und APIs auf folgende Weise:
- Verwenden Sie die Beispiele, um Intelligenz zu lehren, wie man API-Endpunkte verwendet.
- Bringen Sie der Intelligenz bei, welche Parameter für einen erfolgreichen Aufruf des API-Endpunkts erforderlich sind.
Abbildung 4: Erweiterung zur Verbindung von Intelligenzen mit externen APIs
Erweiterungen können unabhängig von der Intelligenz erstellt werden, sollten aber als Teil der Konfiguration der Intelligenz bereitgestellt werden. Der Intelligente Körper verwendet das Modell und die Beispiele zur Laufzeit, um zu bestimmen, welche Erweiterungen, wenn überhaupt, für die Lösung der Anfrage des Benutzers geeignet sind. Dies unterstreicht einen entscheidenden Vorteil von Erweiterungen, nämlich ihre eingebauten Beispieltypen, die es dem Intelligent Body ermöglichen, dynamisch die für die Aufgabe am besten geeignete Erweiterung auszuwählen.
Abbildung 5: 1-to-Many-Beziehung zwischen Intelligentsia, Erweiterungen und APIs
Man kann es so verstehen: Ein Softwareentwickler entscheidet, welchen API-Endpunkt er zur Lösung des Problems eines Nutzers verwendet. Wenn ein Benutzer einen Flug buchen möchte, könnte ein Entwickler die Google Flights API verwenden, und wenn ein Benutzer wissen möchte, wo sich das nächstgelegene Café in der Nähe seines Standorts befindet, könnte ein Entwickler die Google Maps API verwenden. auf die gleiche Weise verwendet der Intelligentsia/Model Stack eine Reihe bekannter Erweiterungen, um zu entscheiden, welche für die Anfrage des Benutzers am besten geeignet ist. Wenn Sie die Erweiterungen in Aktion sehen möchten, finden Sie sie in der Zwillinge Probieren Sie sie in der App aus, indem Sie zu Einstellungen > Erweiterungen gehen und jede Erweiterung aktivieren, die Sie testen möchten. Sie könnten zum Beispiel die Google Flights-Erweiterung aktivieren und Gemini bitten, "Flüge von Austin nach Zürich am nächsten Freitag anzuzeigen".
Beispielhafte Erweiterungen
Um die Verwendung von Erweiterungen zu vereinfachen, bietet Google eine Reihe von gebrauchsfertigen Erweiterungen, die schnell in Ihr Projekt importiert und mit minimaler Konfiguration verwendet werden können. Mit der Code-Interpreter-Erweiterung in Code Snippet 1 können Sie beispielsweise Python-Code aus natürlichsprachlichen Beschreibungen generieren und ausführen.
Python
vertexai importieren
importiere pprint
PROJEKT_ID = "IHRE_PROJEKT_ID"
REGION = "us-zentral1"
vertexai.init(projekt=PROJEKT_ID, ort=REGION)
from vertexai.preview.extensions import Erweiterung
extension_code_interpreter = Extension.from_hub("code_interpreter")
CODE_QUERY = """Schreibe eine Python-Methode, um einen Binärbaum in O(n) Zeit zu invertieren.""""
Antwort = extension_code_interpreter.execute(
operation_id = "generate_and_execute",
operation_params = {"query": CODE_QUERY}
)
print("Erstellter Code:")
pprint.pprint({Antwort['generierter_code']})
# Das obige Snippet erzeugt den folgenden Code.
# Generierter Code.
# class TreeNode.
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = links
# self.right = rechts
Python
def invert_binary_tree(root).
"""
Invertiert einen Binärbaum.
Args.
root: Die Wurzel des Binärbaums.
Args: root: Die Wurzel des Binärbaums.
Die Wurzel des invertierten Binärbaums.
"""
if not root: return None
return Keine
# Rekursives Vertauschen der linken und rechten Kinder
root.left, root.right = \
invert_binary_tree(root.right), invert_binary_tree(root.left)
invert_binary_tree(Wurzel.links)
# Anwendungsbeispiel.
# Konstruieren Sie einen Beispiel-Binärbaum
# 4
# / \
# 2 7
# / \ \ \ \
# 1 3 6 9
root = TreeNode(4)
root.left = TreeNode(2)
wurzel.rechts = TreeNode(7)
wurzel.links.links = TreeNode(1)
wurzel.links.rechts = TreeNode(3)
wurzel.rechts.links = TreeNode(6)
root.right.right = TreeNode(9)
# Invertieren des Binärbaums
inverted_root = invert_binary_tree(root)
Codeschnipsel 1: Die Code-Interpreter-Erweiterung erzeugt Python-Code und führt ihn aus.
Zusammenfassend lässt sich sagen, dass Erweiterungen Intelligenzen eine Vielzahl von Möglichkeiten bieten, die Außenwelt wahrzunehmen, mit ihr zu interagieren und sie zu beeinflussen. Die Auswahl und der Aufruf dieser Erweiterungen wird durch die Verwendung von Beispielen gesteuert, die alle als Teil der Erweiterungskonfiguration definiert sind.
Funktion (math.)
Im Bereich der Softwaretechnik werden Funktionen als in sich geschlossene Codemodule definiert, die zur Ausführung bestimmter Aufgaben verwendet und bei Bedarf wiederverwendet werden können. Wenn Softwareentwickler Programme schreiben, erstellen sie in der Regel viele Funktionen, um verschiedene Aufgaben zu erfüllen. Sie definieren auch die Logik für den Aufruf von function_a und function_b sowie die erwarteten Eingaben und Ausgaben.
Funktionen funktionieren im Bereich der Intelligenz auf sehr ähnliche Weise, aber wir können Modelle anstelle von Softwareentwicklern verwenden. Modelle können einen Satz bekannter Funktionen übernehmen und auf der Grundlage ihrer Spezifikation entscheiden, wann jede Funktion zu verwenden ist und welche Argumente die Funktion benötigt. Funktionen unterscheiden sich in mehrfacher Hinsicht von Erweiterungen, vor allem in der Art und Weise, wie sie eingesetzt werden:
- Modellausgabefunktionen und ihre Parameter, aber keine Echtzeit-API-Aufrufe.
- Funktionen werden auf der Client-Seite ausgeführt, während Erweiterungen auf der Smartbody-Seite ausgeführt werden.
Wiederum am Beispiel von Google Flights könnte ein einfacher Aufbau der Funktion wie in Abbildung 7 aussehen.
Abbildung 7: Wie interagieren die Funktionen mit externen APIs?
Der Hauptunterschied besteht darin, dass weder Funktionen noch Intelligenzen direkt mit der Google Flights-API interagieren. Wie erfolgen also die API-Aufrufe tatsächlich?
Bei der Verwendung von Funktionen werden die Logik und die Ausführung des Aufrufs des eigentlichen API-Endpunkts von der Intelligenz an die Client-Anwendung übertragen, wie in den Abbildungen 8 und 9 unten dargestellt. Dadurch erhält der Entwickler eine detailliertere Kontrolle über den Datenfluss in der Anwendung. Es gibt viele Gründe, warum sich ein Entwickler für die Verwendung von Funktionen anstelle von Erweiterungen entscheiden könnte, aber einige häufige Anwendungsfälle sind:
- APIs müssen auf einer anderen Ebene des Anwendungsstapels aufgerufen werden, anstatt direkt im Prozess der Agentenarchitektur (z. B. über ein Middleware-System, ein Front-End-Framework usw.).
- Sicherheits- oder Authentifizierungsbeschränkungen, die den Agenten daran hindern, die API direkt aufzurufen (z. B. ist die API nicht dem Internet zugänglich, oder die Infrastruktur des Agenten hat keinen Zugang zur API).
- Zeitliche Beschränkungen oder Beschränkungen der Abfolge von Vorgängen, die verhindern, dass Agenten die API in Echtzeit aufrufen können (z. B. Batch-Vorgänge, manuelle Überprüfungsprozesse usw.).
- Für API-Antworten, die der Agent nicht ausführen kann, ist eine zusätzliche Datenumwandlungslogik erforderlich. Beispielsweise bieten einige API-Endpunkte keine Filtermechanismen zur Begrenzung der Anzahl der zurückgegebenen Ergebnisse. Die Verwendung von Funktionen auf der Client-Seite bietet Entwicklern zusätzliche Möglichkeiten zur Durchführung dieser Umwandlungen.
- Entwickler möchten die Proxy-Entwicklung iterieren, ohne zusätzliche Infrastruktur für API-Endpunkte bereitzustellen (z. B. können Funktionsaufrufe als "Staking-Simulationen" für APIs verwendet werden).
Während die Unterschiede zwischen den beiden Ansätzen aus Sicht der internen Architektur eher subtil sind, wie in Abbildung 8 dargestellt, bieten Funktionsaufrufe zusätzliche Kontrolle und verringern die Abhängigkeit von externer Infrastruktur, was sie für Entwickler zu einer attraktiven Option macht.
Abbildung 8: Client-seitige und Smartbody-seitige Steuerelemente zur Beschreibung von Erweiterungen und Funktionsaufrufen
Anwendungsfall
Modelle können zum Aufrufen von Funktionen verwendet werden, um komplexe clientseitige Ausführungsprozesse für Endbenutzer zu handhaben, bei denen der Entwickler der intelligenten Einrichtung nicht möchte, dass das Sprachmodell die API-Ausführung verwaltet (wie es bei Erweiterungen der Fall ist). Betrachten wir das folgende Beispiel, bei dem ein intelligenter Körper als Reise-Concierge trainiert wird, um mit einem Benutzer zu interagieren, der eine Urlaubsreise buchen möchte. Das Ziel ist, dass der intelligente Körper eine Liste von Städten erstellt, die wir in unserer Middleware-Anwendung verwenden können, um Bilder, Daten usw. für den Benutzer herunterzuladen, damit dieser seine Reise planen kann. Der Benutzer könnte sagen:
Ich möchte mit meiner Familie einen Skiurlaub machen, weiß aber nicht, wohin ich fahren soll.
In einer typischen Eingabeaufforderung für das Modell könnte die Ausgabe wie folgt aussehen:
Natürlich finden Sie hier eine Liste von Städten, die für eine Skireise mit der Familie in Frage kommen:
- Crested Butte, CO, Vereinigte Staaten von Amerika
- Whistler, Britisch-Kolumbien, Kanada
- Zermatt, Schweiz
Obwohl die obige Ausgabe die von uns benötigten Daten (Städtenamen) enthält, ist das Format nicht zum Parsen geeignet. Mit einem Funktionsaufruf können wir dem Modell beibringen, diese Ausgabe in einem strukturierten Stil (z. B. JSON) zu formatieren, der für ein anderes System leichter zu parsen ist. Bei der gleichen Eingabeaufforderung durch den Benutzer könnte die JSON-Ausgabe der Funktion etwa so aussehen wie in Codeschnipsel 5.
unbefestigt
function_call {
name: "display_cities"
args: {
"Städte": ["Crested Butte", "Whistler", "Zermatt"], "Einstellungen": "Skifahren
"vorgaben": "skifahren"
}
}
Codeausschnitt 5: Beispiel für einen Funktionsaufruf zum Anzeigen einer Liste von Städten und Benutzereinstellungen Diese JSON-Last wird vom Modell generiert und dann an unseren Client-Server gesendet, um die gewünschte Aktion auszuführen. In diesem speziellen Fall rufen wir die Google Places-API auf, um die vom Modell bereitgestellten Städte abzurufen, die Bilder nachzuschlagen und sie dann unseren Nutzern als formatierten Rich Content bereitzustellen. Das Sequenzdiagramm in Abbildung 9 zeigt die Schritte der obigen Interaktion im Detail.
Abbildung 9: Sequenzdiagramm, das den Lebenszyklus eines Funktionsaufrufs zeigt
Das Ergebnis des Beispiels in Abbildung 9 ist, dass das Modell verwendet wird, um die Leerstellen mit den Parametern auszufüllen, die die Client-Benutzeroberfläche für den Aufruf der Google Places-API benötigt. Die Client-Benutzeroberfläche verwendet die vom Modell bereitgestellten Parameter in der zurückgegebenen Funktion, um den eigentlichen API-Aufruf zu verwalten. Dies ist nur ein Anwendungsfall für Funktionsaufrufe, aber es gibt viele andere Szenarien, die in Betracht gezogen werden können, wie z. B.:
- Sie möchten, dass das Sprachmodell eine Funktion vorschlägt, die Sie in Ihrem Code verwenden können, aber Sie möchten keine Anmeldeinformationen in Ihren Code aufnehmen. Da der Funktionsaufruf die Funktion nicht ausführt, müssen Sie keine Anmeldeinformationen mit Informationen über die Funktion in Ihren Code aufnehmen.
- Sie führen einen asynchronen Vorgang aus, der mehr als ein paar Sekunden in Anspruch nehmen kann. Diese Szenarien gelten für Funktionsaufrufe, da es sich um einen asynchronen Vorgang handelt.
- Sie möchten die Funktion auf einem anderen Gerät als dem System ausführen, das den Funktionsaufruf und seine Argumente erzeugt hat.
Ein wichtiger Punkt bei Funktionen ist, dass sie dem Entwickler mehr Kontrolle über die Ausführung von API-Aufrufen und den gesamten Datenfluss in der Anwendung geben sollen. In dem Beispiel in Abbildung 9 hat sich der Entwickler dafür entschieden, die API-Informationen nicht an die Intelligenz zurückzugeben, da sie für künftige Aktionen der Intelligenz nicht relevant sind. Je nach Architektur der Anwendung kann es jedoch sinnvoll sein, externe API-Aufrufdaten an die Intelligenz zurückzugeben, um künftige Überlegungen, Logik und die Auswahl von Aktionen zu beeinflussen. Letztendlich ist es Sache des Anwendungsentwicklers, zu entscheiden, was für eine bestimmte Anwendung angemessen ist.
Funktion Beispielcode
Um die obige Ausgabe von unserer Skiurlaubsszene zu erhalten, müssen wir jede Komponente so erstellen, dass sie mit unserem gemini-1.5-flash-001-Modell funktioniert. Zunächst definieren wir die Funktion display_cities als einfache Python-Methode.
Python
def display_cities(cities: list[str], preferences: Optional[str] = None).
"""Liefert eine Liste von Städten basierend auf der Suchanfrage und den Präferenzen des Benutzers.
Args.
preferences (str): Die Suchpräferenzen des Benutzers, z.B. Skifahren,
Strände, Restaurants, Barbecues usw.
cities (list[str]): Liste der Städte, die dem Benutzer empfohlen werden.
Rückgabe: list[str]: Liste der Städte, die dem Benutzer empfohlen werden.
list[str]: Eine Liste von Städten, die dem Benutzer empfohlen werden.
"""
return städte
Codeschnipsel 6: Beispielhafte Python-Methode für eine Funktion, die eine Liste von Städten anzeigt.
Als Nächstes werden wir unser Modell instanziieren, das Werkzeug erstellen und dann die Abfrage des Benutzers und das Werkzeug an das Modell übergeben. Die Ausführung des nachstehenden Codes führt zu der unten im Codeschnipsel gezeigten Ausgabe.
Python
from vertexai.generative_models import GenerativeModel, Tool, FunctionDeclaration
model = GenerativeModel("gemini-1.5-flash-001")
display_cities_function = FunctionDeclaration.from_func(display_cities)
tool = Tool(Funktionserklärungen=[display_cities_function])
message = "Ich möchte mit meiner Familie einen Skiausflug machen, aber ich weiß nicht, wohin ich fahren soll."
res = model.generate_content(message, tools=[tool])
print(f "Funktionsname: {res.candidates[0].content.parts[0].function_call.name}")
print(f "Funktionsargumente: {res.candidates[0].content.parts[0].function_call.args}")
> Funktionsname: display_cities
> Function Args: {'preferences': 'skiing', 'cities': ['Aspen', 'Vail'.
'Park City']}
Codeschnipsel 7. erstellt das Tool, sendet es mit der Benutzerabfrage an das Modell und ermöglicht Funktionsaufrufe
Zusammenfassend lässt sich sagen, dass Funktionen einen einfachen Rahmen bieten, der es Anwendungsentwicklern ermöglicht, den Datenfluss und die Systemausführung genau zu steuern und gleichzeitig Intelligenzen/Modelle für die Generierung von Schlüsseleingaben effektiv zu nutzen. Die Entwickler können optional wählen, ob sie Intelligenzen "in der Schleife" halten wollen, indem sie externe Daten zurückgeben, oder ob sie sie je nach den spezifischen Anforderungen der Anwendungsarchitektur weglassen wollen.
Datenspeicherung
Stellen Sie sich ein Sprachmodell als eine riesige Bibliothek vor, die ihre Trainingsdaten enthält. Im Gegensatz zu einer Bibliothek, die ständig neue Bücher erwirbt, bleibt diese Bibliothek jedoch statisch und enthält nur das Wissen aus dem anfänglichen Training. Dies ist eine Herausforderung, da sich das Wissen der realen Welt ständig ändert.
Entwicklung. Die Datenspeicherung behebt diese Einschränkung, indem sie den Zugang zu dynamischeren und aktuelleren Informationen ermöglicht und sicherstellt, dass die Antworten der Modelle stets auf Fakten und Relevanz beruhen.
Stellen Sie sich ein häufiges Szenario vor, in dem ein Entwickler eine kleine Menge zusätzlicher Daten für ein Modell bereitstellen muss, vielleicht in Form einer Tabellenkalkulation oder einer PDF-Datei.
Abbildung 10: Wie interagieren die Intelligenzen mit strukturierten und unstrukturierten Daten?
Datenspeicher ermöglichen es den Entwicklern, den intelligenten Systemen zusätzliche Daten in ihrem ursprünglichen Format zur Verfügung zu stellen, so dass eine zeitaufwändige Datenkonvertierung, eine erneute Modellschulung oder eine Feinabstimmung nicht erforderlich sind. Der Datenspeicher konvertiert eingehende Dokumente in eine Reihe von Vektor-Datenbankeinbettungen, die von den Intelligenzen verwendet werden können, um die Informationen zu extrahieren, die sie zur Ergänzung ihrer nächsten Aktion oder Reaktion auf den Benutzer benötigen.
Abbildung 11. Datenspeicher verbinden Intelligenz mit verschiedenen Arten von neuen Echtzeit-Datenquellen.
Umsetzung und Anwendung
Im Zusammenhang mit generativen KI-Intelligenzen wird die Datenspeicherung häufig in Form von Vektordatenbanken implementiert, auf die die Entwickler den Intelligenzen zur Laufzeit Zugriff gewähren wollen. Wir werden hier nicht näher auf Vektordatenbanken eingehen, aber das Wichtigste ist, dass sie Daten in Form von Vektoreinbettungen speichern, d. h. hochdimensionale Vektoren oder mathematische Darstellungen der bereitgestellten Daten. In den letzten Jahren war eines der typischsten Beispiele für die Verwendung von Datenspeichern mit Sprachmodellen die Retrieval Augmented Generation (RAG)-Anwendungen. Diese Anwendungen versuchen, die Breite und Tiefe des Modellwissens zu erweitern, indem sie den Modellen Zugang zu Daten in einer Vielzahl von Formaten gewähren, zum Beispiel:
- Inhalt der Website
- Strukturierte Daten in PDF, Word-Dokumenten, CSV, Tabellenkalkulationen und anderen Formaten.
- Unstrukturierte Daten in HTML, PDF, TXT und anderen Formaten.
Abbildung 12. 1-to-many-Beziehung zwischen Intelligenzen und Datenspeichern, die verschiedene Arten von vorindizierten Daten darstellen können
Der grundlegende Prozess eines jeden Zyklus von Benutzeranfragen und Antworten intelligenter Stellen wird in der Regel wie in Abbildung 13 dargestellt modelliert.
-
- Die Benutzeranfrage wird an das Einbettungsmodell gesendet, um eine Einbettung der Anfrage zu erzeugen
- Die Einbettung der Abfrage wird dann mit Hilfe eines Abgleichsalgorithmus (z. B. ScaNN) mit dem Inhalt der Vektordatenbank abgeglichen.
- Abrufen von Übereinstimmungen aus der Vektordatenbank im Textformat und Zurücksenden an den Smart Body
- Intelligente Systeme empfangen Benutzeranfragen und abgerufenen Inhalt und formulieren dann Antworten oder Aktionen
5. die endgültige Antwort an den Benutzer senden
Abbildung 13: Lebenszyklus der Benutzeranfrage und der Antwort des intelligenten Körpers in RAG-basierten Anwendungen
Das Endergebnis ist eine Anwendung, die es den Intelligenzen ermöglicht, die Anfrage des Nutzers über eine Vektorsuche mit einem bekannten Datenspeicher abzugleichen, den Rohinhalt abzurufen und ihn der Orchestrierungsschicht und dem Modell zur weiteren Verarbeitung zuzuführen. Der nächste Schritt kann darin bestehen, dem Nutzer die endgültige Antwort zu geben oder zusätzliche Vektorsuchen durchzuführen, um die Ergebnisse weiter zu optimieren. Ein Beispiel für die Interaktion mit einem intelligenten Körper, der eine RAG mit ReAct-Reasoning/Planung implementiert, ist in Abbildung 14 dargestellt.
Abbildung 14: Beispiel einer RAG-Anwendung mit ReAct Reasoning/Planung
Überprüfung der Werkzeuge
Zusammenfassend lässt sich sagen, dass Erweiterungen, Funktionen und Datenspeicher mehrere verschiedene Arten von Werkzeugen darstellen, die Intelligenzen zur Laufzeit verwenden können. Jedes Werkzeug hat seinen eigenen Zweck und kann nach dem Ermessen des Entwicklers der Intelligenz zusammen oder getrennt verwendet werden.
Erweiterungen | Funktionsaufruf | Datenspeicherung | |
---|---|---|---|
vollziehen | Intelligente Body Side Implementierung | Client-seitige Ausführung | Intelligente Body Side Implementierung |
Anwendungsfall |
|
|
Die Entwickler wollen Retrieval Augmented Generation (RAG) mit einem der folgenden Datentypen implementieren:
|
Verbesserte Modellleistung und gezieltes Lernen
Ein Schlüsselaspekt für den effektiven Einsatz von Modellen ist ihre Fähigkeit, bei der Erzeugung von Ergebnissen die richtigen Werkzeuge auszuwählen, insbesondere wenn sie in großem Umfang in der Produktion eingesetzt werden. Eine allgemeine Schulung kann den Modellen helfen, diese Fähigkeit zu entwickeln.Aber reale Szenarien erfordern in der Regel mehr alsdie Kenntnis der Ausbildungsdaten. Stellen Sie sich den Unterschied zwischen grundlegenden Kochkenntnissen und der Beherrschung einer bestimmten Küche vor. Beide erfordern grundlegende kulinarische Kenntnisse, aber letzteres erfordert gezieltes Lernen für differenziertere Ergebnisse.
Es gibt mehrere Ansätze, um Modelle beim Erwerb dieser Art von spezifischem Wissen zu unterstützen:
- Kontextuelles Lernen: Bei diesem Ansatz werden generische Modelle mit Hinweisen, Werkzeugen und kleinen Beispielen versorgt, so dass sie "on the fly" lernen können, wie und wann diese Werkzeuge für bestimmte Aufgaben zu verwenden sind. Das ReAct-Framework ist ein Beispiel für diesen Ansatz in natürlicher Sprache.
- Retrieval-basiertes Kontextlernen: Bei dieser Technik werden die Modellhinweise dynamisch aufgefüllt, indem die wichtigsten Informationen, Werkzeuge und verwandten Beispiele aus einem externen Speicher abgerufen werden. Ein Beispiel hierfür ist der "Beispielspeicher" in der Vertex-KI-Erweiterung oder die bereits erwähnte RAG-Architektur mit Datenspeicher.
- Auf Feinabstimmung basierendes Lernen: Bei dieser Methode wird das Modell mit einem größeren beispielspezifischen Datensatz trainiert, bevor es Schlussfolgerungen zieht. Dies hilft dem Modell zu verstehen, wann und wie es bestimmte Werkzeuge anwenden soll, bevor es Benutzeranfragen erhält.
Zur weiteren Veranschaulichung der Ziele jeder Lernmethode können wir auf die Analogie des Kochens zurückkommen, um sie zu untersuchen.
- Stellen Sie sich vor, ein Koch erhält ein bestimmtes Rezept (Hinweis), einige wichtige Zutaten (Hilfsmittel) und einige Beispielgerichte von Kunden (weniger Beispiele). Auf der Grundlage dieser begrenzten Informationen und des allgemeinen kulinarischen Wissens des Kochs muss er herausfinden, wie er "on the fly" das Gericht zubereiten kann, das dem Rezept und den Vorlieben des Kunden am besten entspricht. Dies ist kontextbezogenes Lernen.
- Stellen wir uns nun unseren Koch in einer gut ausgestatteten Küche mit einer Vorratskammer (externer Datenspeicher) voller Zutaten und Rezepte (Beispiele und Werkzeuge) vor. Der Koch ist nun in der Lage, Zutaten und Rezepte dynamisch aus der Speisekammer auszuwählen und besser auf die Rezepte und Vorlieben der Kunden abzustimmen. Auf diese Weise können Köche vorhandenes und neues Wissen nutzen, um intelligentere und anspruchsvollere Gerichte zu kreieren. Dies ist abrufbasiertes kontextuelles Lernen.
- Stellen wir uns schließlich vor, dass wir den Koch zurück in die Schule schicken, damit er eine neue Küche oder neue Gerichte lernt (die zuvor auf einem größeren beispielspezifischen Datensatz trainiert wurden). Auf diese Weise kann der Koch zukünftige unbekannte Kundenrezepte mit einem tieferen Verständnis angehen. Wenn wir wollen, dass der Koch
Dieser Ansatz ist ideal, wenn Sie sich in einer bestimmten Küche (Wissensgebiet) auszeichnen. Dies ist ein auf Feinabstimmung basierendes Lernen.
Jeder Ansatz hat einzigartige Vor- und Nachteile in Bezug auf Geschwindigkeit, Kosten und Latenzzeit. Durch die Kombination dieser Techniken in einem intelligenten Rahmen können wir jedoch die Vorteile nutzen und die Nachteile minimieren, was zu einer robusteren und anpassungsfähigeren Lösung führt.
Schnellstart Intelligentsia mit LangChain
Um ein Beispiel für einen ausführbaren Smartbody zu liefern, der tatsächlich läuft, werden wir LangChain und die LangGraph Bibliotheken zur Erstellung eines schnellen Prototyps. Diese beliebten Open-Source-Bibliotheken ermöglichen es den Nutzern, Client-Intelligenzen aufzubauen, indem sie Sequenzen von Logik und Argumentation miteinander "verknüpfen" und Tools zur Beantwortung von Nutzeranfragen aufrufen. Wir werden unser Modell gemini-1.5-flash-001 und einige einfache Tools verwenden, um eine mehrstufige Anfrage eines Benutzers zu beantworten, wie in Codeschnipsel 8 gezeigt.
Die von uns verwendeten Tools sind SerpAPI (für die Google-Suche) und Google Places API. Sie können die Beispielausgabe in Code-Snippet 9 sehen, nachdem Sie unser Verfahren in Code-Snippet 8 ausgeführt haben.
Python
from langgraph.prebuilt import create_react_agent
from langchain_core.tools importieren Werkzeug
from langchain_community.utilities import SerpAPIWrapper
from langchain_community.tools importiere GooglePlacesTool
os.environ["SERPAPI_API_KEY"] = "XXXXX"
os.environ["GPLACES_API_KEY"] = "XXXXX"
@tool
def search(query: str):
"""Verwenden Sie die SerpAPI, um eine Google-Suche durchzuführen.""""
suche = SerpAPIWrapper()
return search.run(query)
@tool
def places(query: str): """Google Places verwenden(query: str):""
"""Verwenden Sie die Google Places API, um eine Google Places-Abfrage auszuführen. """"
places = GooglePlacesTool()
return places.run(Abfrage)
model = ChatVertexAI(model="gemini-1.5-flash-001")
tools = [search, places]
query = "Gegen wen haben die Texas Longhorns letzte Woche im Football gespielt? Wie lautet die Adresse des Stadions der anderen Mannschaft?"
agent = create_react_agent(model, tools)
input = {"messages": [("human", query)]}
for s in agent.stream(input, stream_mode="values"):
message = s["messages"][-1]
if isinstance(nachricht, tupel).
print(nachricht)
else: message.pretty_print(nachricht, tupel): print(nachricht)
message.pretty_print()
Code Snippet 8: Beispiele für die Verwendung der Tools LangChain und LangGraph Intelligentsia
unbefestigt
=============================== Benutzer Nachrichten ================================ Wer war der Football-Gegner der Texas Longhorns letzte Woche? Wie lautet die Adresse des Stadions der gegnerischen Mannschaft? ================================= KI-Nachricht ================================= Werkzeugaufruf: search Parameter: Suche: Texas Longhorns Football Spielplan ================================ Werkzeugmeldung ================================ Name: Suche {... Ergebnis: "NCAA Division I Football, Georgia, Datum..."} ================================= AI Nachrichten ================================= Die Texas Longhorns spielten letzte Woche gegen die Georgia Bulldogs. Werkzeugaufruf: location Parameter: Abfrage: Georgia Bulldogs Stadion ================================ Tool-Meldung ================================ Name: Standort {... Sanford Stadium Adresse: 100 Sanford Road...} ================================= AI-Meldung ================================= Die Adresse des Georgia Bulldogs Stadium ist 100 Sanford Road, Athens, Georgia 30602.
Codeschnipsel 9. die Ausgabe des Programms in Codeschnipsel 8.
Dies ist zwar ein recht einfaches Beispiel für einen intelligenten Körper, aber es zeigt, wie alle grundlegenden Komponenten des Modells, der Orchestrierung und der Werkzeuge zusammenarbeiten, um ein bestimmtes Ziel zu erreichen. Im letzten Abschnitt werden wir untersuchen, wie diese Komponenten in den von Google gehosteten Produkten wie den Vertex-KI-Intelligenzen und generativen Playbooks zusammenpassen.
Produktionsanwendungen mit Vertex AI-Intelligenzen
Während dieses Whitepaper die Kernkomponenten von Intelligenzen untersucht, erfordert der Aufbau produktionsfähiger Anwendungen deren Integration mit anderen Tools wie Benutzeroberflächen, Bewertungsrahmen und Mechanismen zur kontinuierlichen Verbesserung. Die KI-Plattform Vertex von Google vereinfacht diesen Prozess durch die Bereitstellung einer vollständig gehosteten Umgebung, die alle zuvor beschriebenen wesentlichen Elemente enthält. Über eine natürlichsprachliche Schnittstelle können Entwickler die Schlüsselelemente ihrer Intelligenzen - Ziele, Aufgabenbeschreibungen, Werkzeuge, Sub-Intelligenzen für die Aufgabendelegation und Beispiele - schnell definieren, um das gewünschte Systemverhalten einfach zu erstellen. Darüber hinaus bietet die Plattform eine Reihe von Entwicklungswerkzeugen, die zum Testen, Bewerten, Messen der Leistung von Intelligenzen, zur Fehlersuche und zur Verbesserung der Gesamtqualität der entwickelten Intelligenzen verwendet werden können. So können sich die Entwickler auf den Aufbau und die Optimierung ihrer Intelligenz konzentrieren, während die Komplexität der Infrastruktur, des Einsatzes und der Wartung von der Plattform selbst verwaltet wird.
In Abbildung 15 sehen Sie eine Beispielarchitektur für eine auf der Vertex AI-Plattform aufgebaute Intelligenz, die verschiedene Funktionen wie den Vertex Agent Builder, Vertex Extensions, Vertex Function Calls und Vertex Example Storage verwendet. Die Architektur umfasst viele der verschiedenen Komponenten, die für produktionsreife Anwendungen erforderlich sind.
Abbildung 15: Beispielarchitektur von End-to-End-Intelligenzen, die auf der Vertex-KI-Plattform aufgebaut sind
Sie können dieses Beispiel einer vorgefertigten Smartbody-Architektur aus unserer offiziellen Dokumentation ausprobieren.
Zusammenfassungen
In diesem Whitepaper erörtern wir die grundlegenden Bausteine generativer KI-Intelligenzen, ihre Zusammensetzung und effektive Möglichkeiten, sie in Form von kognitiven Architekturen zu implementieren. Zu den wichtigsten Erkenntnissen aus diesem Whitepaper gehören:
- Intelligente Systeme erweitern die Funktionalität von Sprachmodellen, indem sie Werkzeuge einsetzen, um auf Echtzeitinformationen zuzugreifen, praktische Maßnahmen vorzuschlagen und komplexe Aufgaben selbständig zu planen und durchzuführen. Intelligente Systeme können ein oder mehrere Sprachmodelle verwenden, um zu bestimmen, wann und wie Zustandsübergänge erfolgen sollen, und externe Werkzeuge einsetzen, um eine beliebige Anzahl komplexer Aufgaben auszuführen, die für das Modell allein nur schwer oder gar nicht zu bewältigen wären.
- Das Herzstück der Funktionsweise von Intelligenzen ist die Orchestrierungsebene, eine kognitive Architektur, die das Denken, die Planung und die Entscheidungsfindung ermöglicht und die Aktionen steuert. Verschiedene Argumentationstechniken (z. B. ReAct, Gedankenketten und Gedankenbäume) bieten einen Rahmen für die Orchestrierungsschicht, um Informationen zu empfangen, interne Überlegungen anzustellen und fundierte Entscheidungen oder Antworten zu generieren.
- Tools (z. B. Erweiterungen, Funktionen und Datenspeicher) fungieren für Intelligenzen als Schlüssel zur Außenwelt, die es ihnen ermöglichen, mit externen Systemen zu interagieren und auf Wissen zuzugreifen, das über ihre Trainingsdaten hinausgeht. Erweiterungen bilden eine Brücke zwischen Intelligenzen und externen APIs.Dies ermöglicht die Ausführung von API-Aufrufen und den Abruf von Echtzeitinformationen. Funktionen bieten Entwicklern durch die Aufteilung der Zuständigkeiten eine detailliertere Kontrolle und ermöglichen es Intelligenzen, Funktionsparameter zu generieren, die auf dem Client ausgeführt werden können. Datenspeicher ermöglichen Intelligenzen den Zugriff auf strukturierte oder unstrukturierte Daten zur Unterstützung datengesteuerter Anwendungen.
Die Zukunft intelligenter Körper hält aufregende Fortschritte bereit, und wir haben gerade erst begonnen, an der Oberfläche dessen zu kratzen, was möglich ist. Mit immer ausgefeilteren Werkzeugen und verbesserten Denkfähigkeiten werden die Intelligenzen in der Lage sein, immer komplexere Probleme zu lösen. Darüber hinaus wird der strategische Ansatz der "Verkettung von Intelligenzen" weiter an Dynamik gewinnen. Durch die Kombination spezialisierter Intelligenzen - die sich jeweils in einem bestimmten Bereich oder einer bestimmten Aufgabe auszeichnen - können wir branchen- und problembereichsübergreifend hervorragende Ergebnisse erzielen.
Es ist wichtig zu bedenken, dass der Aufbau komplexer Intelligenzarchitekturen einen iterativen Ansatz erfordert. Experimentieren und Verfeinerung sind der Schlüssel, um Lösungen für spezifische Geschäftsfälle und organisatorische Anforderungen zu finden. Aufgrund der generativen Natur der zugrunde liegenden Modelle, die ihre Architektur unterstützen, sind keine zwei Intelligenzen identisch. Wenn wir jedoch die Stärken jeder zugrunde liegenden Komponente nutzen, können wir wirkungsvolle Anwendungen erstellen, die die Möglichkeiten des Sprachmodells erweitern und einen echten Mehrwert schaffen.
Endnote
- Shafran, I., Cao, Y. et al., 2022, 'ReAct: Synergising Reasoning and Acting in Language Models'. Verfügbar unter.
https://arxiv.org/abs/2210.03629 - Wei, J., Wang, X. et al., 2023, 'Chain-of-Thought Prompting Elicits Reasoning in Large Language Models'.
Verfügbar unter: https://arxiv.org/pdf/2201.11903.pdf. - Wang, X. et al., 2022, 'Self-Consistency Improves Chain of Thought Reasoning in Language Models'.
Verfügbar unter: https://arxiv.org/abs/2203.11171. - Diao, S. et al., 2023, 'Active Prompting with Chain-of-Thought for Large Language Models'. Verfügbar unter.
https://arxiv.org/pdf/2302.12246.pdf. - Zhang, H. et al., 2023, 'Multimodal Chain-of-Thought Reasoning in Language Models'. Verfügbar unter.
https://arxiv.org/abs/2302.00923. - Yao, S. et al., 2023, 'Tree of Thoughts: Deliberate Problem Solving with Large Language Models'. Verfügbar unter.
https://arxiv.org/abs/2305.10601. - Long, X., 2023, 'Large Language Model Guided Tree-of-Thought'. Verfügbar unter.
https://arxiv.org/abs/2305.08291. - **Google: "Google Gemini-Anwendung". Verfügbar unter: **http://gemini.google.com.
- **Swagger: "OpenAPI-Spezifikation". Verfügbar unter: **https://swagger.io/specification/.
- Xie, M., 2022, "Wie funktioniert kontextbezogenes Lernen? Ein Rahmen zum Verständnis der Unterschiede zwischen
Traditionelles überwachtes Lernen". Verfügbar unter: https://ai.stanford.edu/blog/understanding-incontext/. - Google Research: "ScaNN (Scalable Nearest Neighbors)". Verfügbar unter.
https://github.com/google-research/google-research/tree/master/scann. - **LangChain. 'LangChain'. Verfügbar unter: **https://python.langchain.com/v0.2/docs/introduction/.