Chatgpt, búsqueda de búsqueda y generación de recuperación auggada para Squeak/SmallTalk
La semántica (del antiguo griego sēmantikós ) se refiere a la importancia o significado de la información. Mientras que las clases normales String y Text en Squeak tienen una visión sintáctica sobre el texto como una secuencia de caracteres e instrucciones de formato, SemanticText se centra en el sentido y la comprensión del texto. Con el advenimiento de NLP (procesamiento del lenguaje natural) y LLM (modelos de lenguaje grande), la disponibilidad de la interpretabilidad del texto en los sistemas de computación se está expandiendo sustancialmente. Este paquete tiene como objetivo hacer que el contexto semántico sea accesible en Squeak/SmallTalk proporcionando las siguientes características:
Para obtener más detalles, instale el paquete y sumérjase en los comentarios y el código de la clase, o continúe leyendo a continuación.
Chatgpt Integración del editor: explíquelo / resértelo / dígalo Operai API Gastos Observador | Ayuda a la integración del navegador: búsqueda y recuperación semántica de generación aumentada (trapo) Integración de charlas de bandeja de entrada de Squeak: búsqueda de conversación similar |
Todavía en desarrollo. Más podría seguir. Comentarios y contribuciones ¡Bienvenidos!
Obtenga una imagen de troncal de chirrido actual (recomendado) o una imagen Squeak 6.0 (solo soporte limitado) y haga esto en un espacio de trabajo:
Metacello new
baseline: ' SemanticText ' ;
repository: ' github://hpi-swa-lab/Squeak-SemanticText:main ' ;
get; " for updates "
load. Como la mayoría de la funcionalidad se basa actualmente en la API de OpenAI, debe configurar una tecla API aquí y pegarla en la preferencia OpenAI API Key . Si bien la API de OpenAI no es de uso gratuito, solo paga por lo que necesita y no hay un mecanismo de crédito sorprendente. Los tokens son realmente baratos, por ejemplo, puede establecer un umbral de $ 5, lo cual es suficiente para chatear más de 1 MIO. palabras o incrustación 50 MIO. Palabras (o 42 veces las obras recolectadas de Shakespeare).
Desde la barra de acoplamiento principal del mundo, vaya a aplicaciones > chatgpt . Escriba su mensaje y presione CMD + S , o presione la voz para una conversación de audio continua. En el modo avanzado, también puede definir las instrucciones y funciones del sistema que el modelo puede llamar. A través del menú de la ventana
, también puede elegir un modelo diferente o editar preferencias adicionales.
Echa un vistazo a los *SemanticText en String , Collection , SequenceableCollection , AbstractSound y otros. Algunos ejemplos:
' 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.El uso básico es así:
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! 'También puede mejorar el indicador insertando pares adicionales de mensajes de usuario/asistente antes de la interacción ( solicitante de pocos disparos ):
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. ' Puede encontrar más ejemplos (como transmisión de mensajes, recuperar múltiples respuestas y registrar probabilidades de token) en el lado de la clase de SemanticConversation .
Un agente simple se puede definir así:
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: aStringEntonces, invoquelo así:
SemanticSqueakAgent makeNewConversation
addUserMessage: ' how many windows are open ' ;
getAssistantReply -- > ' You currently have 138 open windows in your Squeak environment. ' O traiga un editor de conversaciones haciendo SemanticSqueakAgent openNewConversation .
Todo comienza en la clase SemanticCorpus . Por ejemplo, así es como podría configurar un corpus de búsqueda semántica para el sistema de ayuda de Squeak usted mismo:
" 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.Haga clic amarillo en cualquier editor de texto (opcionalmente, seleccione una parte de texto antes de eso), haga clic más ... y seleccione uno de explicarlo , resumirlo , hacer una pregunta al respecto ... o decirlo . O en breve a través del teclado: Esc ,? , Enter , q . ?
También puede seleccionar hablar de Tipo para dictar texto.
Abra un navegador de ayuda de la barra de acoplamiento principal mundial y escriba su consulta en el campo de búsqueda. Tenga en cuenta que en este momento, los términos de búsqueda sinónimos funcionan mejor que las preguntas (por ejemplo, prefieren "conexión a Internet" sobre "¿Cómo puedo acceder a Internet?").
Nota
Estas características deben habilitar primero en el navegador Preference ("Búsqueda semántica en los navegadores de ayuda").
Obtenga Squeak Box Talk (Barra de acoplamiento principal World Bar> Herramientas > Talk de bandeja de entrada de Squeak ), actualice a la última versión a través del menú Configuración y active la Opción de búsqueda semántica en Squeak Bank Talk en el navegador Preferencias. Después de eso, puedes:
Este es un proyecto de investigación experimental. Consulte SemanticsQueak, nuestro artículo o mi tesis para obtener más información.
Haz esto:
OpenAIAccount openExpenseWatcherPersonalmente, me gusta tomar el último submorph de este morfo e insertarlo en mi barra principal de acoplamiento. Si también le gusta, envíe una solicitud de función o una solicitud de extracción para automatizar esto.
Los proveedores pueden registrar diferentes modelos, seleccionados y utilizados a través de la interfaz SemanticText . El proveedor principal de hoy es el cliente API de OpenAI, pero pueden seguir más clientes. El registro se puede consultar como defaultEmbeddingModel , chooseDefaultConversationModel o registeredSpeechSynthesisModels .
Para fines de depuración y prueba, también ofrecemos un proveedor simulado para conversaciones e integridades.
Además, hay un proveedor de síntesis del habla para el complemento Klatt . Requiere el paquete de habla y se puede cargar por separado del paquete SemanticTextProviders-Klatt (o especificando load: #full en el script Metacello).
Más detalles sobre la arquitectura, las API y las herramientas de semantictext están disponibles en el apéndice de mi tesis. Tenga en cuenta que esto posiblemente incluye información anticuada o no se aplican refactorizaciones (¡pero también buenos diagramas y ejemplos! ¡Y un montón de teoría detrás de esto!).
En este momento, se sabe que los siguientes proyectos utilizan semantictext:
Si bien técnicamente no está relacionado, SqueakGPT explora un enfoque similar para usar IA generativa para Squeak.
Gracias a Marcel Taeumel (@Marceltaeumel) por asesorarme a lo largo de mis estudios y experimentos. Gracias a Toni Mattis (@amintos) por los consejos sobre la búsqueda de incrustación (en particular para 541ae49 ). Gracias a Vincent Eichhorn (@Vincenteichhorn) por darme una visión general de las técnicas de indexación para Vector DBS (¡implementará uno pronto!). Gracias a la gente de R/MachineLearning por sugerir modelos de incrustación alternativos (sus sugerencias pueden implementarse algún día).
¡Feliz chirrido!