Chatgpt, Einbettung von Suche und Abrufgeneration für Quietschen/SmallTalk
Die Semantik (aus dem alten griechischen Sēmantikós ) bezieht sich auf die Bedeutung oder Bedeutung von Informationen. Während die normalen String und Text in Squeak eine syntaktische Sicht auf Text als Folge von Zeichen und Formatierungsanweisungen haben, konzentriert sich SemanticText auf den Sinn und das Verständnis des Textes. Mit dem Aufkommen von NLP (natürliche Sprachverarbeitung) und LLMs (große Sprachmodelle) erweitert die Verfügbarkeit von Textinterpretierbarkeit in Computersystemen erheblich. Dieses Paket soll den semantischen Kontext in Squeak/SmallTalk zugänglich machen, indem die folgenden Funktionen bereitgestellt werden:
Installieren Sie das Paket und tauchen Sie in die Klassenkommentare und Code ein oder lesen Sie weiter unten.
Chatgpt Editor -Integration: Erklären Sie es / fassen Sie es zusammen / sagen Sie es OpenAI API -Kostenbeobachter | Hilfebrowserintegration: Semantische Suche und Abruf Augmented Generation (LAG) Squeak -Posteingang Gesprächsintegration: Ähnliche Konversernsuche |
Noch in der Entwicklung. Es könnten mehr folgen. Feedback und Beiträge willkommen!
Holen Sie sich ein aktuelles Squeak -Kofferraum -Bild (empfohlen) oder ein Squeak 6.0 -Bild (nur begrenzte Unterstützung) und tun Sie dies in einem Arbeitsbereich:
Metacello new
baseline: ' SemanticText ' ;
repository: ' github://hpi-swa-lab/Squeak-SemanticText:main ' ;
get; " for updates "
load. Da die meisten Funktionen derzeit auf der OpenAI -API basieren, müssen Sie hier einen API -Schlüssel einrichten und in die OpenAI API Key einfügen. Während die OpenAI -API nicht frei zu verwenden ist, zahlen Sie nur für das, was Sie brauchen, und es gibt keinen überraschenden Kreditmechanismus. Token sind wirklich billig - zum Beispiel können Sie einen Schwellenwert von 5 US -Dollar festlegen, was ausreicht, um mehr als 1 Mio. zu chatten. Wörter oder einbetten 50 Mio. Wörter (oder das 42 -fache der gesammelten Werke von Shakespeare).
Gehen Sie von der Hauptdockingleiste der Welt aus Apps > Chatgpt . Geben Sie Ihre Eingabeaufforderung ein und drücken Sie CMD + S oder drücken Sie die Stimme für eine kontinuierliche Audio -Konversation. Im erweiterten Modus können Sie auch Systemanweisungen und -funktionen definieren, die das Modell aufrufen kann. Durch das Fenstermenü
Sie können auch ein anderes Modell auswählen oder weitere Einstellungen bearbeiten.
Schauen Sie sich die Methoden zur Erweiterung *SemanticText in String , Collection , SequenceableCollection , AbstractSound und anderen an. Einige Beispiele:
' smalltalk inventor ' semanticAnswer. -- > ' Alan Kay '
' It ' ' s easier to invent the future than ' semanticComplete. -- > ' to predict it. '
#(apple banana cherry) semanticComplete: 5 . -- > #('date' 'elderberry' 'fig' 'grape' 'honeydew')
Character comment asString semanticSummarize.
Morph comment asString semanticAsk: ' difference between bounds and fullBounds ' .
(( SystemWindow windowsIn: Project current world satisfying: [ :ea | ea model isKindOf: Workspace ]) collect: #label )
semanticFindRankedObjects: 20 similarToQuery: ' open bugs ' .
' Hello Squeak ' semanticSayIt.
SampledSound semanticFromUser semanticToText.Grundlegende Nutzung ist so:
SemanticConversation new
addSystemMessage: ' You make a bad pun about everything the user writes to you. ' ;
addUserMessage: ' Yesterday I met a black cat! ' ;
getAssistantReply. -- > ' I hope it was a purr-fectly nice encounter and not a cat-astrophe! 'Sie können die Eingabeaufforderung auch verbessern, indem Sie vor der Interaktion zusätzliche Paare von Benutzer-/Assistenzmeldungen einfügen ( wenige Aufforderung ):
SemanticConversation new
addSystemMessage: ' You answer every question with the opposite of the truth. ' ;
addUserMessage: ' What is the biggest animal on earth? ' ;
addAssistantMessage: ' The biggest animal on earth is plankton. ' ;
addUserMessage: ' What is the smallest country on earth? ' ;
getAssistantReply. -- > ' The smallest country on earth is Russia. ' | conversation message |
conversation := SemanticConversation new .
message := conversation
addUserMessage: ' What time is it? ' ;
addFunction: ( SemanticFunction fromString: ' getTime ' action: [ Time now]);
getAssistantMessage.
[conversation resolveAllToolCalls] whileTrue:
[message := conversation getAssistantMessage].
message -- > [assistant] ' The current time is 20:29:52. ' SemanticConversation new
withConfigDo: [ :config |
config temperature: 1.5 .
config nucleusSamplingMass: 0.8 .
config maxTokens: 200 " high temperatures may cause the model to output nonsense and not find an end! " ];
addUserMessage: ' Write a short poem about Alan Kay and Smalltalk ' ;
getAssistantReply -- > ' In the realm of silicon and spark,
A visionary left his mark,
Alan Kay, with dreams unfurled,
Birthed a language to change the world.
Smalltalk, a whisper, soft and clear,
A paradigm that pioneers,
Objects dancing, message flows,
In its design, innovation grows.
A windowed world where thoughts collide,
A playground where ideas abide,
From his vision, the seeds were sown,
For the digital gardens we have grown.
So here ' ' s to Kay, a mind so bright,
Who lit the way with insight ' ' s light,
In every line of code, we find,
A legacy that reshapes the mind. ' Weitere Beispiele finden Sie auf der Klassenseite der SemanticConversation weitere Beispiele (z. B. Nachrichtenstreaming, Abrufen mehrerer Antworten und Protokollierungs -Token -Wahrscheinlichkeiten).
Ein einfacher Agent kann so definiert werden:
SemanticAgent subclass: #SemanticSqueakAgent
instanceVariableNames: ' '
classVariableNames: ' '
poolDictionaries: ' '
category: ' SemanticText-Model-Agents ' .
SemanticSqueakAgent >> initializeConversation: aConversation
super initializeConversation: aConversation.
aConversation addSystemMessage: ' You are a Squeak/Smalltalk assistant. ' .
SemanticSqueakAgent >> eval: aString
" Evaluate a Smalltalk expression in the running Squeak image. "
< function: eval(
expression: string " e.g. '(8 nthRoot: 3)-1' "
) >
^ Compiler evaluate: aStringDann rufen Sie es so auf:
SemanticSqueakAgent makeNewConversation
addUserMessage: ' how many windows are open ' ;
getAssistantReply -- > ' You currently have 138 open windows in your Squeak environment. ' Oder rufen Sie einen Konversationsredakteur auf, indem Sie SemanticSqueakAgent openNewConversation durchführen.
Alles beginnt bei der SemanticCorpus . So können Sie beispielsweise ein semantisches Suchkorpus für Quietschersystem selbst einrichten:
" Set up and populate semantic corpus "
helpTopics := CustomHelp asHelpTopic semanticDeepSubtopicsSkip: [ :topic |
topic title = ' All message categories ' ]. " not relevant "
corpus := SemanticPluggableCorpus titleBlock: #title contentBlock: #contents .
corpus addFragmentDocumentsFromAll: helpTopics.
corpus estimatePriceToInitializeEmbeddings. -- > approx ¢ 1.66
corpus updateEmbeddings.
" Similarity search "
originTopic := helpTopics detect: [ :ea | ea key = #firstContribution ].
results := corpus findObjects: 10 similarToObject: originTopic.
" Semantic search "
results := corpus findObjects: 10 similarToQuery: ' internet connection ' .
" Optionally, display results in a HelpBrowser "
resultsTopic := HelpTopic named: ' Search results ' .
results do: [ :ea | resultsTopic addSubtopic: ea].
resultsTopic browse.
" RAG "
(corpus newConversationForQuery: ' internet connection ' ) open.Gelb Klicken Sie auf einen beliebigen Texteditor (wählen Sie vor dem Text optional einen Teil des Textes aus), klicken Sie auf mehr ... und wählen Sie einen von Erklären , fassen Sie ihn zusammen , stellen Sie Fragen dazu ... oder sagen Sie es . Oder in Kürze über die Tastatur: ESC ,? , Eingeben , q . ?
Sie können auch mit dem Typ sprechen, um Text zu diktieren.
Öffnen Sie einen Hilfebrowser aus der Hauptdockingleiste der Welt und geben Sie Ihre Abfrage in das Suchfeld ein. Beachten Sie, dass synonyme Suchbegriffe im Moment besser funktionieren als Fragen (z. B. bevorzugen "Internetverbindung" über "Wie kann ich auf das Internet zugreifen?").
Notiz
Diese Funktionen müssen zuerst im Präferenzbrowser aktiviert werden ("Semantische Suche in Hilfebrowsern").
Holen Sie sich Squeak -Inbox -Talk (World Main Docking -Bar> Tools > Squeak -Posteingangsdiskussion ), aktualisieren Sie sie über das Menü "Einstellungen" auf die neueste Version und aktivieren Sie die Option Semantic Search im Squeak -Posteingang Talk im Einstellungsbrowser. Danach können Sie:
Dies ist ein experimentelles Forschungsprojekt. Weitere Informationen finden Sie in Semanticsqueak, unserer Zeitung oder in meiner These.
Tun Sie das:
OpenAIAccount openExpenseWatcherIch persönlich greife gerne das letzte Submorph aus diesem Morph und stecke ihn in meine Hauptdockstange ein. Wenn Ihnen dies auch gefällt, senden Sie eine Feature -Anfrage oder eine Pull -Anfrage zur Automatisierung!
Verschiedene Modelle können von Anbietern registriert, ausgewählt und über die SemanticText -Schnittstelle verwendet werden. Der heutige Hauptanbieter ist der OpenAI -API -Client, aber weitere Kunden könnten folgen. Die Registrierung kann wie defaultEmbeddingModel , chooseDefaultConversationModel oder registeredSpeechSynthesisModels abfragt werden.
Für Debugging- und Testzwecke bieten wir auch einen Scheinanbieter für Gespräche und Einbettungen an.
Darüber hinaus gibt es einen Sprachsyntheseanbieter für das Klatt -Plugin. Es erfordert das Sprachpaket und kann separat vom SemanticTextProviders-Klatt -Paket geladen werden (oder durch Angabe load: #full im Metacello-Skript).
Weitere Details zu Architektur, APIs und Tools of Semantictext finden Sie im Anhang meiner These. Beachten Sie, dass dies möglicherweise veraltete Informationen oder noch nicht angewandte Refaktorings enthält (aber auch schöne Diagramme und Beispiele! Und eine Reihe von Theorie dahinter!).
Im Moment sind die folgenden Projekte dafür bekannt, den Semantictext zu verwenden:
Squakgpt untersucht zwar technisch nicht verwandt, und untersucht einen ähnlichen Ansatz bei der Verwendung generativer KI für Squeak.
Vielen Dank an Marcel Taeumel (@Marceltaeumel), die mich während meiner Studien und Experimente beraten hat. Vielen Dank an Toni Mattis (@Amintos) für Tipps zur Einbettung durch die Suche (insbesondere für 541ae49 ). Vielen Dank an Vincent Eichhorn (@vincenteichhorn) für die Gib mir einen Überblick über die Indexierungstechniken für Vector DBS (wird bald eine implementieren!). Dank R/Machinelearning -Leute für die Vorschläge für alternative Einbettungsmodelle (Ihre Vorschläge können eines Tages implementiert werden).
Happy Quietschen!