Squeak/SmallTalkのCHATGPT、埋め込み検索、および検索された生成
セマンティクス(古代ギリシャのsēmantikósから)は、情報の重要性または意味を指します。 Squeakの通常のStringとTextクラスは、テキストの構文ビューを文字のシーケンスとフォーマット命令として使用しますが、 SemanticTextテキストの感覚と理解に焦点を当てています。 NLP(自然言語処理)とLLMS(大規模な言語モデル)の出現により、コンピューティングシステムでのテキスト解釈可能性の可用性は大幅に拡大しています。このパッケージの目的は、次の機能を提供することにより、きしむ/SmallTalkでセマンティックコンテキストにアクセスできるようにすることを目的としています。
詳細については、パッケージをインストールしてクラスのコメントとコードに飛び込むか、以下をご覧ください。
chatgpt 編集者統合:それを説明 /要約 /言う Openai API費用ウォッチャー | ブラウザの統合をヘルプ:セマンティック検索と検索拡張生成(RAG) きしむ受信トレイトークの統合:同様の会話検索 |
まだ開発中です。さらに続くかもしれません。フィードバックと貢献を歓迎します!
現在のきしみのトランク画像(推奨)またはきしむ6.0イメージ(限定サポートのみ)を取得し、ワークスペースでこれを行います。
Metacello new
baseline: ' SemanticText ' ;
repository: ' github://hpi-swa-lab/Squeak-SemanticText:main ' ;
get; " for updates "
load.現在、ほとんどの機能はOpenai APIに基づいているため、ここでAPIキーを設定し、 OpenAI API Key選好で貼り付ける必要があります。 Openai APIは自由に使用できませんが、必要なもののみを支払い、驚くべきクレジットメカニズムはありません。トークンは非常に安いです - たとえば、5ドルのしきい値を設定できます。これは、1mio以上のチャットに十分です。単語または埋め込み50 mio。単語(またはシェークスピアの収集された作品の42倍)。
World Main Docking Barから、 Apps > ChatGptにアクセスしてください。プロンプトを入力してCMD + sを押すか、継続的なオーディオ会話のために音声を押します。 Advancedモードでは、モデルが呼び出すことができるシステムの命令と機能を定義することもできます。ウィンドウメニューを通して
、別のモデルを選択したり、さらに設定を編集することもできます。
String 、 Collection 、 SequenceableCollection 、 AbstractSoundなどの*SemanticText拡張メソッドをご覧ください。いくつかの例:
' 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 。 ?
また、テキストを口述するためにSpeak to Typeを選択することもできます。
World Main Docking Barからヘルプブラウザを開き、クエリを検索フィールドに入力します。現時点では、同義の検索用語は質問よりもうまく機能します(たとえば、「インターネットにインターネット接続」を好みます。インターネットにアクセスするには」)。
注記
この機能は、最初にPreference Browserで有効にする必要があります(「ヘルプブラウザでのセマンティック検索」)。
きしみの受信トレイトーク(World Main Docking Bar> Tools > Squeak Inbox Talk )を取得し、 [設定]メニューから最新バージョンに更新し、設定ブラウザのSqueak Inbox Talkでオプションセマンティック検索をオンにします。その後、できます:
これは実験的な研究プロジェクトです。詳細については、SemanticSqueak、私たちの論文、または私の論文をご覧ください。
これを行う:
OpenAIAccount openExpenseWatcher私は個人的に、このモーフから最後のサブモーフをつかみ、メインドッキングバーに挿入するのが好きです。これも気に入ったら、これを自動化するための機能リクエストまたはプルリクエストを送信してください!
プロバイダーによって登録され、 SemanticTextインターフェイスを介して使用され、さまざまなモデルを登録できます。今日のメインプロバイダーはOpenai APIクライアントですが、さらにクライアントが続く可能性があります。レジストリは、 defaultEmbeddingModel 、 chooseDefaultConversationModel 、またはregisteredSpeechSynthesisModelsなどのようにクエリできます。
デバッグとテストのために、会話や埋め込みのための模擬プロバイダーも提供しています。
さらに、 Klattプラグインの音声合成プロバイダーがあります。音声パッケージが必要であり、 SemanticTextProviders-Klattパッケージとは別にロードできます(または、メタセロスクリプトでload: #full指定することで)。
Semantictextのアーキテクチャ、API、およびツールの詳細については、私の論文の付録で入手できます。これには、時代遅れの情報が含まれているか、まだ適用されていないリファクタリングが含まれている可能性があることに注意してください(ただし、素敵な図と例もあります!
現時点では、次のプロジェクトはsemantictextを使用することが知られています。
技術的には無関係ですが、Sceakgptは、Squeakに生成AIを使用することと同様のアプローチを探ります。
私の研究と実験を通して私にアドバイスしてくれたMarcel Taeumel(@marceltaeumel)に感謝します。埋め込み検索に関するヒントについては、Toni Mattis(@Amintos)に感謝します(特に541ae49の場合)。 Vector DBSのインデックス作成手法の概要を教えてくれたVincent Eichhorn(@vincenteichhorn)に感謝します(すぐに実装します!)。別の埋め込みモデルを提案してくれたR/MachinElearningの人々に感謝します(いつか提案が実装される場合があります)。
幸せなきしむ!