Chatgpt, pencarian yang menanamkan, dan generasi pengambilan untuk mencicit/smalltalk
Semantik (dari Sēmantikós Yunani kuno) mengacu pada signifikansi atau makna informasi. Sementara String normal dan kelas Text dalam mencicit mengambil tampilan sintaksis pada teks sebagai urutan karakter dan instruksi pemformatan, SemanticText berfokus pada rasa dan pemahaman teks. Dengan munculnya NLP (pemrosesan bahasa alami) dan LLMS (model bahasa besar), ketersediaan interpretabilitas teks dalam sistem komputasi berkembang secara substansial. Paket ini bertujuan untuk membuat konteks semantik dapat diakses di Squeak/SmallTalk dengan memberikan fitur -fitur berikut:
Untuk detail lebih lanjut, instal paket dan selami komentar dan kode kelas, atau lanjutkan membaca di bawah ini.
Chatgpt Integrasi Editor: Jelaskan / Rangkum / Katakanlah Pengamat Biaya API Openai | Integrasi Bantuan Browser: Pencarian Semantik dan Pengambilan Generasi augmented (RAG) Integrasi Bicara Kotak Masuk: Pencarian Percakapan Serupa |
Masih dalam pengembangan. Lebih banyak mungkin mengikuti. Umpan balik dan kontribusi selamat datang!
Dapatkan gambar trunk saat ini (direkomendasikan) atau gambar mencicit 6.0 (hanya dukungan terbatas) dan lakukan ini di ruang kerja:
Metacello new
baseline: ' SemanticText ' ;
repository: ' github://hpi-swa-lab/Squeak-SemanticText:main ' ;
get; " for updates "
load. Karena sebagian besar fungsi saat ini didasarkan pada API OpenAI, Anda perlu mengatur kunci API di sini dan menempelkannya di preferensi OpenAI API Key . Meskipun OpenAI API tidak bebas digunakan, Anda hanya membayar untuk apa yang Anda butuhkan dan tidak ada mekanisme kredit yang mengejutkan. Token sangat murah - misalnya, Anda dapat menetapkan ambang $ 5, yang cukup untuk mengobrol lebih dari 1 mio. kata -kata atau menanamkan 50 mio. kata -kata (atau 42 kali karya -karya Shakespeare yang dikumpulkan).
Dari World Main Docking Bar, buka Aplikasi > Chatgpt . Ketik prompt Anda dan tekan CMD + S , atau tekan suara untuk percakapan audio yang berkelanjutan. Dalam mode lanjutan, Anda juga dapat mendefinisikan instruksi dan fungsi sistem yang dapat dihubungi oleh model. Melalui menu jendela
, Anda juga dapat memilih model yang berbeda atau mengedit preferensi lebih lanjut.
Lihatlah *SemanticText pada String , Collection , SequenceableCollection , AbstractSound , dan lainnya. Beberapa contoh:
' 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.Penggunaan dasar seperti ini:
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! 'Anda juga dapat meningkatkan prompt dengan memasukkan sepasang pesan pengguna/asisten tambahan sebelum interaksi ( beberapa pengambilan gambar ):
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. ' Anda dapat menemukan lebih banyak contoh (seperti streaming pesan, mengambil beberapa respons, dan mencatat probabilitas token) di sisi kelas SemanticConversation .
Agen sederhana dapat didefinisikan seperti ini:
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: aStringLalu, memohon seperti ini:
SemanticSqueakAgent makeNewConversation
addUserMessage: ' how many windows are open ' ;
getAssistantReply -- > ' You currently have 138 open windows in your Squeak environment. ' Atau memunculkan editor percakapan dengan melakukan SemanticSqueakAgent openNewConversation .
Semuanya dimulai di kelas SemanticCorpus . Misalnya, ini adalah bagaimana Anda bisa mengatur corpus pencarian semantik untuk sistem bantuan Squeak sendiri:
" 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.Klik kuning pada editor teks apa pun (secara opsional pilih sebagian teks sebelum itu), klik lebih banyak ... , dan pilih salah satu dari menjelaskannya , rangkum , ajukan pertanyaan tentang itu ... , atau katakan . Atau segera melalui keyboard: ESC ,? , Masukkan , q . ?
Anda juga dapat memilih Bicaralah untuk mengetik untuk mendikte teks.
Buka browser bantuan dari dunia docking bar dan ketik dalam kueri Anda ke bidang pencarian. Perhatikan bahwa saat ini, istilah pencarian yang sinonim berfungsi lebih baik daripada pertanyaan (misalnya, lebih suka "koneksi internet" daripada "bagaimana saya bisa mengakses internet?").
Catatan
Fitur ini perlu diaktifkan di browser preferensi terlebih dahulu ("pencarian semantik di browser bantuan").
Dapatkan Squeak Inbox Talk (World Main Docking Bar> Tools > Squeak Inbox Talk ), perbarui ke versi terbaru melalui menu Pengaturan , dan nyalakan Pencarian Semantik Opsi di Squeak Inbox Talk di browser Preferensi. Setelah itu, Anda bisa:
Ini adalah proyek penelitian eksperimental. Lihatlah semantik, makalah kami, atau tesis saya untuk informasi lebih lanjut.
Lakukan ini:
OpenAIAccount openExpenseWatcherSaya pribadi suka mengambil submorph terakhir dari morf ini dan memasukkannya ke bar docking utama saya. Jika Anda suka ini juga, kirimkan permintaan fitur atau permintaan tarik untuk mengotomatisasi ini!
Model yang berbeda dapat didaftarkan oleh penyedia, dipilih, dan digunakan melalui antarmuka SemanticText . Penyedia utama saat ini adalah klien API OpenAI, tetapi klien lebih lanjut mungkin mengikuti. Registry dapat ditanya seperti defaultEmbeddingModel , chooseDefaultConversationModel , atau registeredSpeechSynthesisModels .
Untuk tujuan debugging dan pengujian, kami juga menawarkan penyedia tiruan untuk percakapan dan embedding.
Selain itu, ada penyedia sintesis pidato untuk plugin Klatt . Dibutuhkan paket ucapan dan dapat dimuat secara terpisah dari paket SemanticTextProviders-Klatt (atau dengan menentukan load: #full dalam skrip metacello).
Rincian lebih lanjut tentang arsitektur, API, dan alat semantikteks tersedia dalam lampiran tesis saya. Perhatikan bahwa ini mungkin termasuk informasi yang sudah ketinggalan zaman atau belum diterapkan refactorings (tetapi juga diagram dan contoh yang bagus! Dan banyak teori di belakangnya!).
Saat ini, proyek -proyek berikut diketahui memanfaatkan SEMANTICTEXT:
Meskipun secara teknis tidak terkait, SqueakGpt mengeksplorasi pendekatan yang sama untuk menggunakan AI generatif untuk mencicit.
Terima kasih kepada Marcel Taeumel (@marceltaeumel) yang telah menasihati saya selama studi dan eksperimen saya. Terima kasih kepada Toni Mattis (@amintos) untuk tips tentang pencarian embedding (khususnya untuk 541ae49 ). Terima kasih kepada Vincent Eichhorn (@vincenteichhorn) yang telah memberi saya gambaran tentang teknik pengindeksan untuk DB vektor (akan segera mengimplementasikannya!). Terima kasih kepada orang -orang R/Machinelearning karena telah menyarankan model embedding alternatif (saran Anda dapat diimplementasikan suatu hari nanti).
Selamat mencicit!