自分のScrapboxをChatGPTにつないだ話勉強会
3/8に自分のScrapbox(ここ)をChatGPTにつないで、ChatGPTがこのScrapboxを参照した上で反応を返せるようにした
「こういうことをしたかった、したい、知識がなくてできない」的な話がネット上で複数件観測されたので3/9に公開した
使ってみた人、派生を生み出した人が複数人
手軽に試せるようにこのScrapboxから使ったインデックスを共有したら、同じように共有する人が5人くらいいて仮想人格的に対話させたりブレインストーミングさせたりできるようになった
出力例
Scrapboxを参照していない場合
>>> Kozanebaって何?
回答できません。提供された情報が不十分です。
Scrapboxを参照した場合
>>> Kozanebaって何?
Kozanebaは、デジタル文房具で、考えをまとめるためのツール。テストユーザ向けにはリリースされているが、まだ広くアナウンスされていない。開発者は、多くの人に使われることに価値を感じている。
別の例
>> 盲点カードって何?
(参照なし) 盲点カードとは、自分が気付かない問題や欠点を指摘するために、他人が匿名で書いたカードのことです。
(参照あり) 盲点カードは、人間が自分の盲点に気づき、それを解消するためのプロセスをカードに分類し、問題解決に役立てるためのものです。物理的な特許文献を類型化したTRIZのようなものです。絵の描かれたカードと解説冊子をイメージしていましたが、トートバッグなどにも使えるように考えられています。
仕組み
100行程度の2つのスクリプトmake_index.py(129)とask.py(63)でできている
インデックスの作成
https://gyazo.com/11b2ef80922d5c5b9363f492e8b3d10b
この文章とベクトルの対応付けをベクトルインデックスと呼んだりする
質問
https://gyazo.com/2a3e1d2dd207e60e2f0add64865e3cc4
「質問」には限らないのだが呼び変えてもややこしいので「質問文」と呼ぶことにする
質問文をEmbedding APIで埋め込みベクトルにする
そのベクトルとベクトルインデックスのベクトルの類似度を計算する
似てる順で並べてプロンプトに入るだけ入れる
ChatGPT APIに投げて回答を作らせる
Q: ベクトルってどれくらいのサイズ?
A: 今のところ1536次元だけど、数に深い意味はない
Q: 類似度の計算って?
A: OpenAIのEmbedding APIは正規化されたベクトルを返すので、単に内積を取るだけでよい(コサイン類似度) Q: 類似度計算の速度は?
A: 現状何も頑張ってない
PythonのListとnp.dotしてるだけ
その状態で1秒に22000個(MacBook Pro)、このScrapboxだと全部で39000個
高速化したければ色々手段はある、今は必要を感じてない(ChatGPT APIの方がだいぶ遅い)
Q: 規模と費用は?
埋め込み
このScrapboxだと17,229,603 tokens
Embedding APIのコストは$0.4 / 1M Token
つまり7ドルくらい
「コーディングを支える技術」を丸ごと埋め込んで$0.13
(このScrapboxが書籍54冊分ということに驚き…)
質問回答
gpt-3.5-turbo $0.002 / 1K tokens
GPT3.5を使ってた
4096トークンがcontext上限で、上限いっぱいまで使うコードを書いた
なので$0.008くらい
GPT4のAPIもその後リリースされた
同じ使い方をするなら$0.15
上限いっぱいまで使うとすると32K contextなので$1.98
これは「このScrapboxの関係ありそうなページを最低62ページ読んで回答」という挙動になる
エンジニアの知的生産術の文字だけのページで1000トークンぐらいなので「技術書の質問に関連ありそうなページを31ページ読んでから回答」が300円でできる
正直、ほとんどのユースケースではそんなに読まなくていいのではと思う。
GPT3.5なら1円、GPT4でも25円で書籍のから3ページ読んで答えてくれる
そしてどのページを参考にしたか指し示してくれる
GPT4はまだまだ気軽に使うには高い
しかし1/10の値段になったらどうなるか?
APIを叩かずにローカルで無料で使えるならどうなるか?
この変化が1年以内に起きそうと感じる。
今は個人的にはGPT4のAPIは使っていない
ChatGPT Plusの$20/monthサブスクリプションをしてる
3時間あたり25回まで使えるからすぐにペイする
本質的にScrapboxには依存していない
他の情報ソースに使ってみた人たち
もちろんグループウェアやビデオ会議の文字起こしを対象にすることもできる
書籍
「コーディングを支える技術」を読ませてみた
>>> オブジェクトとは何か?
(GPT3.5) オブジェクトとは、現実世界の「モノ」の「模型」をコンピュータの中に作るための概念であり、プログラミング言語においては、データとそのデータを操作するための手続きをまとめたものとして表現されます。また、オブジェクト指向とは、このオブジェクトを中心にプログラムを設計する手法のことです。具体的には、オブジェクト同士の関係性を表現するクラスや、クラスから生成されたインスタンスを操作するメソッドなどがあります。
コーディングを支える技術 p.187~
https://gyazo.com/c07380aa591c368d3a5f1707d9e1fd10
https://gyazo.com/ac403c5a4b056f0da17ce0659b0bdae2
(GPT4)オブジェクトは、プログラミングにおいて現実世界の概念や事物を表現するための構造です。オブジェクト指向プログラミングでは、オブジェクトはその事物の属性(データ)と振る舞い(関数やメソッド)を持ちます。オブジェクトは、クラスという設計図に基づいて作られるインスタンスであり、プログラムの中で操作され、異なるオブジェクトと相互作用します。オブジェクト指向の目的は、現実世界の問題をより自然に表現し、再利用性や保守性の向上など、コードの品質を高めることです。
「元から知ってる知識」のウェイトが高まって「コーディングを支える技術」の要素がわからなくなっている
こういう「他にも書いてる文章がたくさんある概念」は自前でデータを読ませる必要はない
マイナーな造語を理解させられるのがこのアプローチのメリット
code::
Kozanebaの宣伝ツイートを作って
Kozanebaを使ってアイデアや情報を視覚化しませんか?🤔
🌟議論を整理
🌟ツイートのつながりを探索
🌟隣接するキーワードを発見
Kozanebaはあなたの知的生産を加速させるデジタル文房具です!✍️🚀
座談会
異なる個人Scrapboxのデータを「仮想人格」としてパネルディスカッションさせてみた
6人それぞれ異なった視点で発言して面白い
今後の発展について
技術的にはグループウェア内の情報に対して同じことをやることは可能
ChatGPTにグループウェア内のあらゆる情報が送信されることに対する顧客の反発があるだろう、ここが問題
前半のベクトル検索の部分はChatGPTと切り離しても有用
なので検索に特化した企業がそれを提供していく(Elasticsearchとかね)
だからアプリの企業はこれを自前でやっても優位性につながらない
やることは「ちゃんとつながれるようにしておく」ぐらい
ちょっとした便利機能を提供することは技術的には可能
たとえばkintoneのスレッドに「要約する」ボタンをつけるとか
単にスレッドの内容に「要約せよ」と書き足してAPIを叩くだけ
ボタンを押した時だけ送信されるから「全部送信する」よりは反発少ないだろう
足場が半年で揺らぐような状況で、長期的に顧客に提供する機能としてリリースするのかどうか、高速に壊れる機能のメンテに人員を割くかどうか
技術とは違うレイヤーの判断だと思う
GPT-4.icon簡潔にToolformerについて箇条書きで説明します。
Toolformerは、言語モデルが外部ツール(検索エンジン、計算機、カレンダーなど)を使えるようにするモデルです。
既存のアプローチには大量の人間の注釈が必要であったり、タスク固有の設定に制限されることが多いため、Toolformerは異なるアプローチを提案します。
ツールの使用は、大量の人間の注釈を必要とせず、自己教師付きの方法で学習されるべきです。
言語モデルは、どのツールをいつ使うかを自分で判断できるべきです。
大規模な言語モデルとインコンテキスト学習を利用して、APIの使用例を生成し、モデルにAPI呼び出しを学習させます。
自己教師付きの損失関数を使用して、どのAPI呼び出しがトークン予測に役立つかを判断します。
有用だと判断されたAPI呼び出しで言語モデルを微調整します。
Toolformerは、ツールの使用を学習した後、ゼロショットでさまざまなタスクにおいて優れた結果を達成します。
つまりAIにグループウェアの使い方を教えるということ
必要に応じてグループウェアを操作して情報を引き出して、それを読んで判断する
どういう操作をしたいかという情報がマイクロフォーマットで回答文に埋め込まれている
https://gyazo.com/d2fad242e843c88d9718a872aae62a90
グループウェアに「AIのアカウント」があって、メンションやDMでやり取りできる未来
「チャットの見た目」だとユーザを1分待たせることがしにくいがグループウェアの通知の見た目だと「AI社員」に作業をお願いして、10分後に仕上がってくるのでも許容できそう
用途によって速いリアクションが欲しいものとそうでないものがある
現状でも「こういうことをしたいんだけど何を検索すればいい?」と聞けば検索キーワードが出てくる。これを進歩させて、機械的に扱える形で出力させる
例
nishio.iconメルロポンティとポランニーの関係についての考察を書こうと考えています。参考にする文献を見つけるためのキーワードをいくつか提案してください
GPT-4.iconメルロポンティとポランニーの関係について調査する際に参考になるキーワードを以下に示します。これらのキーワードを使用して、関連文献や論文を検索することができます。
メルロポンティ(Maurice Merleau-Ponty)
ポランニー(Michael Polanyi)
知覚(perception)
知識の個人性(personal knowledge)
存在論(ontology)
認識論(epistemology)
体験(experience)
身体性(embodiment)
知の根源(origin of knowledge)
知識の構造(structure of knowledge)
知識の暗黙性(tacit knowledge)
知識の社会性(social dimension of knowledge)
直観(intuition)
言語(language)
ジェスチャー(gesture)
意味論(semiotics)
目的論(teleology)
これらのキーワードを用いて、メルロポンティとポランニーの哲学的思想や彼らの関係に関する文献や研究を見つけることができます。また、彼らが関連する哲学的伝統や、他の哲学者(例えば、ハイデガーやハッサール)との関係性についても調べることができます。
こうやって出てきたキーワードで検索をして、その情報を元に要約をしたりするとBing AI的になる
この検索対象をインターネットではなく社内グループウェアにするのが最初の一歩か
一般的には地面が固まってない時に多種多様な要望を受け入れて肥大化したフレームワークは、耐震工事が困難になって地震で崩壊することが多いのだけど、After GPT-4の世界においてはGPT-4が改修工事を支援してくれちゃうかもしれない
そういう意味では「最もGPT4を使いこなしてる人たちによるソフトウェアプロジェクト」として注目に値する
使う場合は地面との間に何が挟まってるのか理解して使うべき
現状はChatGPTが話す相手が「主に人間である」という想定なわけだが、間に機械が挟まってマイクロフォーマットで書かれたコマンド列を読むのであれば、いっそ「人間に対して表示するコマンド」を用意したらいいよね、って近い未来になる
文法の定義された人工言語の方がLLMにとって容易
https://gyazo.com/3a1de274da1461bd7875f9685bffeaec
しばらくの間、この中間システムの操作のための言語やAPIはまちまちで乱立するだろう
そしてしばらくしてからデファクトスタンダード(C言語に相当するもの)が生まれる https://gyazo.com/9eb9249214f856b89965b028b29f3d79