Chatgpt, внедрение поиска и поколение поиска для Squeak/smalltalk
Семантика (от древнегреческого sēmantikós ) относится к значению или значению информации. В то время как нормальные классы String и Text в Squeak принимают синтаксическое представление о тексте как последовательность символов и инструкции по форматированию, SemanticText фокусируется на смысле и понимании текста. С появлением NLP (обработка естественного языка) и LLMS (модели с большими языками) доступность интерпретации текста в вычислительных системах существенно расширяется. Этот пакет направлен на то, чтобы сделать семантический контекст доступным в Squeak/SmallTalk, предоставляя следующие функции:
Для получения более подробной информации установите пакет и погрузитесь в комментарии и код класса, или продолжайте читать ниже.
Чатгпт Интеграция редактора: объясните это / суммируйте / скажите Openai API -наблюдатель затрат | Помогите интеграция браузера: семантическое поиск и поиск добыча добычи (Rag) Просьба интеграция разговоров в почте: аналогичный поиск в разговоре |
Все еще находится в стадии разработки. Больше может последовать. Отзывы и взносы приветствуются!
Получите текущее изображение Squeak Trunk (рекомендуется) или изображение Squeak 6.0 (только ограниченная поддержка) и сделайте это в рабочей области:
Metacello new
baseline: ' SemanticText ' ;
repository: ' github://hpi-swa-lab/Squeak-SemanticText:main ' ;
get; " for updates "
load. Поскольку большая часть функциональности в настоящее время основана на API OpenAI, вам нужно настроить здесь ключ API и вставить его в предпочтения OpenAI API Key . Хотя API OpenAI не является бесплатным для использования, вы платите только за то, что вам нужно, и нет удивительного кредитного механизма. Токены действительно дешевы - например, вы можете установить порог в размере 5 долларов, что достаточно для общения более 1 MIO. Слова или внедрение 50 мио. Слова (или в 42 раза больше собранных произведений Шекспира).
Из основного док -панели мира перейдите в приложения > Chatgpt . Введите свою подсказку и нажмите CMD + S или нажмите голос для непрерывного аудио беседы. В расширенном режиме вы также можете определить системные инструкции и функции, которые модель может вызвать. Через меню окна
, вы также можете выбрать другую модель или редактировать дальнейшие предпочтения.
Проверьте методы расширения *SemanticText на String , Collection , SequenceableCollection , AbstractSound и других. Некоторые примеры:
' 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.Основное использование такого:
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! 'Вы также можете улучшить подсказку, вставив дополнительные пары сообщений пользователя/помощника до взаимодействия ( несколько выстрелов ):
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. ' Вы можете найти больше примеров (таких как потоковая передача сообщений, получение нескольких ответов и вещаний токена регистрации) на стороне класса SemanticConversation .
Простой агент можно определить так:
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: aStringЗатем призвана так:
SemanticSqueakAgent makeNewConversation
addUserMessage: ' how many windows are open ' ;
getAssistantReply -- > ' You currently have 138 open windows in your Squeak environment. ' Или развлечь редактор разговоров, выполнив SemanticSqueakAgent openNewConversation .
Все начинается в классе SemanticCorpus . Например, именно так вы могли бы самостоятельно настроить семантическое поисковое корпус для системы помощи 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.Желтый щелчок в любом текстовом редакторе (необязательно выберите часть текста до этого), нажмите больше ... и выберите один из объяснений , суммируйте его , задайте вопрос об этом ... или скажите это . Или вскоре через клавиатуру: ESC , ? , Введите , Q. ?
Вы также можете выбрать Type Type для диктатного текста.
Откройте браузер Help из основного док -панели мира и введите свой запрос в поле поиска. Обратите внимание, что на данный момент синонимичные поисковые термины работают лучше, чем вопросы (например, предпочитают «подключение к Интернету», как я могу получить доступ к Интернету? »).
Примечание
Эти функции должны сначала включить в браузере предпочтений («Семантический поиск в браузерах помощи»).
Получите Squeak Subox Talk (World Main Docking Bar> Tools > Squeak Subober Talk ), обновите его до последней версии через меню «Настройки» и включите опцию Semantic Search в Squeak Subrobe Talk в браузере Preventions. После этого вы можете:
Это экспериментальный исследовательский проект. Проверьте SemanticsQueak, нашу статью или мою диссертацию для получения дополнительной информации.
Сделай это:
OpenAIAccount openExpenseWatcherМне лично нравится захватить последнее положение из этого морфа и вставлять его в мой основной стыковочный планку. Если вам это тоже нравится, отправьте запрос на функцию или запрос на вытяжку для автоматизации этого!
Различные модели могут быть зарегистрированы поставщиками, выбранными и использованы через интерфейс SemanticText . Основным поставщиком сегодня является клиент API OpenAI, но могут последовать дальнейшие клиенты. Реестр может быть запрошен, например, defaultEmbeddingModel , chooseDefaultConversationModel или registeredSpeechSynthesisModels .
В целях отладки и тестирования мы также предлагаем фиктивного поставщика для разговоров и внедрения.
Кроме того, существует поставщик синтеза речи для плагина Klatt . Это требует речевого пакета и может быть загружен отдельно от пакета SemanticTextProviders-Klatt (или путем указания load: #full в скрипте Metacello).
Более подробная информация об архитектуре, API и инструментах SemanticText доступна в приложении моего тезиса. Обратите внимание, что это, возможно, включает в себя устаревшую информацию или еще не применяемые рефактор (но также хорошие диаграммы и примеры! И куча теории, стоящей за ней!).
На данный момент, как известно, следующие проекты используют Semanticext:
Несмотря на технически не связанный, SqueakGPT исследует аналогичный подход к использованию генеративного ИИ для Squeak.
Благодаря Марселю Тэмолю (@marceltaeumel) за консультирование мне на протяжении всего моих исследований и экспериментов. Спасибо Тони Маттису (@Amintos) за советы, касающиеся поиска внедрения (в частности для 541ae49 ). Спасибо Винсенту Эйххорну (@Vincenteichhorn) за то, что он дал мне обзор методов индексации для Vector DBS (скоро будет реализовать один!). Благодаря R/MachineLearning Leads за предложение альтернативных моделей встраивания (ваши предложения могут быть реализованы один день).
Счастлив!