Chatgpt, incorporação de busca e geração de recuperação de recuperação para squeak/smalltalk
A semântica (do antigo grego Sēmantikós ) refere -se ao significado ou significado da informação. Enquanto as classes normais String e Text em Squeak têm uma visão sintática do texto como uma sequência de caracteres e instruções de formatação, SemanticText se concentra no sentido e na compreensão do texto. Com o advento do PNL (processamento de linguagem natural) e LLMs (grandes modelos de idiomas), a disponibilidade da interpretabilidade do texto nos sistemas de computação está se expandindo substancialmente. Este pacote tem como objetivo tornar o contexto semântico acessível em Squeak/SmallTalk, fornecendo os seguintes recursos:
Para mais detalhes, instale o pacote e mergulhe nos comentários e codificadores da classe, ou continue lendo abaixo.
Chatgpt Integração do editor: explique / resume / diga Observador de despesas da API OpenAI | Ajuda Integração do navegador: pesquisa semântica e geração aumentada de recuperação (RAG) Integração de conversas da caixa de entrada Squeak: pesquisa de conversa semelhante |
Ainda em desenvolvimento. Mais pode seguir. Feedback e contribuições são bem -vindas!
Obtenha uma imagem de porta -malas atual (recomendada) ou uma imagem Squeak 6.0 (apenas suporte limitado) e faça isso em um espaço de trabalho:
Metacello new
baseline: ' SemanticText ' ;
repository: ' github://hpi-swa-lab/Squeak-SemanticText:main ' ;
get; " for updates "
load. Como a maioria das funcionalidades é baseada atualmente na API do OpenAI, você precisa configurar uma chave da API aqui e colá -la na preferência OpenAI API Key . Embora a API do OpenAI não seja livre para usar, você paga apenas pelo que precisa e não há um mecanismo de crédito surpreendente. Os tokens são realmente baratos - por exemplo, você pode definir um limite de US $ 5, o que é suficiente para conversar mais de 1 mio. palavras ou incorporação de 50 mio. palavras (ou 42 vezes os trabalhos coletados de Shakespeare).
Na barra de ancoragem principal do mundo, vá para aplicativos > Chatgpt . Digite seu prompt e pressione CMD + S ou pressione a voz para uma conversa contínua em áudio. No modo avançado, você também pode definir instruções e funções do sistema que o modelo pode chamar. Através do menu da janela
, você também pode escolher um modelo diferente ou editar mais preferências.
Confira os métodos de extensão *SemanticText em String , Collection , SequenceableCollection , AbstractSound e outros. Alguns exemplos:
' 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.O uso básico é assim:
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! 'Você também pode melhorar o aviso inserindo pares adicionais de mensagens de usuário/assistente antes da interação ( poucos anos provando ):
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. ' Você pode encontrar mais exemplos (como streaming de mensagens, recuperar várias respostas e registrar probabilidades de token) no lado da classe da SemanticConversation .
Um agente simples pode ser definido assim:
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: aStringEntão, invocar assim:
SemanticSqueakAgent makeNewConversation
addUserMessage: ' how many windows are open ' ;
getAssistantReply -- > ' You currently have 138 open windows in your Squeak environment. ' Ou crie um editor de conversação fazendo SemanticSqueakAgent openNewConversation .
Tudo começa na classe SemanticCorpus . Por exemplo, é assim que você pode configurar um corpus de busca semântica para o sistema de ajuda do Squeak:
" 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.Clique em amarelo em qualquer editor de texto (opcionalmente, selecione uma parte do texto antes disso), clique em mais ... e selecione um de explicar , resumir , fazer uma pergunta sobre isso ... ou diga . Ou em breve via teclado: ESC ,? , Digite , q . ?
Você também pode selecionar falar para digitar para ditar o texto.
Abra um navegador de ajuda da barra principal do mundo e digite sua consulta no campo de pesquisa. Observe que, no momento, os termos de pesquisa sinônimos funcionam melhor do que as perguntas (por exemplo, preferem "conexão com a Internet" sobre "Como posso acessar a Internet?").
Observação
Esses recursos precisam ativar o navegador de preferências primeiro ("pesquisa semântica nos navegadores de ajuda").
Obtenha Squeak InBox Talk (World Main Aloking Bar> Ferramentas > Squeak Inbox Talk ), atualize -a para a versão mais recente no menu Configurações e ligue a pesquisa semântica da opção na caixa de entrada Squeak Talk no navegador Preferências. Depois disso, você pode:
Este é um projeto de pesquisa experimental. Confira o semântico, nosso artigo ou minha tese para obter mais informações.
Faça isso:
OpenAIAccount openExpenseWatcherPessoalmente, gosto de pegar o último submorph a partir deste morph e inseri -lo na minha principal barra de encaixe. Se você gosta disso também, envie uma solicitação de recurso ou uma solicitação de tração para automatizar isso!
Modelos diferentes podem ser registrados por fornecedores, selecionados e usados através da interface SemanticText . O principal provedor hoje é o cliente da API OpenAI, mas outros clientes podem seguir. O Registro pode ser consultado como defaultEmbeddingModel , chooseDefaultConversationModel ou registeredSpeechSynthesisModels .
Para fins de depuração e teste, também oferecemos um provedor simulado para conversas e incorporações.
Além disso, existe um provedor de síntese de fala para o plug -in KLATT . Requer o pacote de fala e pode ser carregado separadamente do pacote SemanticTextProviders-Klatt (ou especificando load: #full no script Metacello).
Mais detalhes sobre a arquitetura, APIs e ferramentas do SemantictExt estão disponíveis no apêndice da minha tese. Observe que isso possivelmente inclui informações desatualizadas ou ainda não aplicadas refatoras (mas também diagramas e exemplos agradáveis! E um monte de teoria por trás disso!).
No momento, os seguintes projetos são conhecidos por usar o SemantictExt:
Embora tecnicamente não relacionado, o SqueakGPT explora uma abordagem semelhante ao uso da IA generativa para Squeak.
Agradecemos a Marcel Taeumel (@MarCELTAEUMEL) por me aconselhar ao longo de meus estudos e experimentos. Agradecemos a Toni Mattis (@amintos) pelas dicas sobre a pesquisa de incorporação (em particular por 541ae49 ). Agradecemos a Vincent Eichhorn (@Vincenteichhorn) por me dar uma visão geral das técnicas de indexação para o Vector DBS (implementará um em breve!). Agradecemos ao pessoal da R/MachineLearning por sugerir modelos alternativos de incorporação (suas sugestões podem ser implementadas um dia).
Feliz chiando!