パスワードを忘れた? アカウント作成
16539070 journal
日記

yumeの日記: ChatGPTで自己進化するリポジトリ

日記 by yume

を書いた。

Pythonは全く触ったこともなく、事前知識もほぼゼロ(機械学習に使えるとかなんとか?)だが、webのChatGPTに聞きながらコードをコピペして、Github Copilotで補完してたら意外と動くものができた。

「なんなのこれ」というと:
ChatGPTはテキストで通信できるらしい。となると、特定の形式のテキストを「コマンド」として受け取ることでPythonのモジュールを.pyファイルとして生成したり、それを上書きしたりすることを繰り返すことができるのでは? そうしたら自己進化するリポジトリが作れるんじゃね?というシロモノ。

現状で、とりあえず「~~という内容のコードを書いて。ファイル名はhoge.pyで」と言えば、注文通りの(まぁそれなりの品質の)モジュールをmodulesディレクトリ下にほんとに生成してくれる。なんのことはない。文字列を検索して一致してたらsplitしてファイル名指定して保存するだけのことである。

で、「read: hoge.py」と発言すればhoge.pyのコードの内容をChatGPTに伝えることができるので、その後「このコードのこれこれこういうところを直して」と言えば改善してくれる。「read: fuga.py」と加えて「fuga.pyのこの機能に連携するように直して」という注文でも(多分)通る。

この時点でもうすげー楽しいんだけど、もっと改良したい。

まず、目下の課題はトークン数の消費が結構でかくて、わりとすぐに上限に達するところ。gpt-3.5-turboは最大トークン数が4kで、大体2つのソースコードを議題にあげて少し議論して、修正案を提示された後にもう一度修正を要求する、くらいのとこで上限で会話が続けられなくなる。

うまいこと文脈を消していけばもっと会話を続けられるだろうけど、どこを削るのかという問題は残る。定期的に「要約」コマンドを要求して、要約されたテキスト以外の文脈をさっぱり消すという方法はわりとありそう。

現状では、対話するAIはコードを書く上に議論にも付き合ってくれるというマルチプレイヤーなので、責務を切り分けて「マネージャー」と「コーダー」に分割してみたい。その上で、マネージャーは「要件を定義する役。要件は必ず1個のモジュールの追加か修正まで最小化する」という役割を負う。コーダーは要約を聞いてコードを生成するだけ。

更に将来的には、このマネージャーと議論をする役、つまり俺に相当する「クライアント」役のAIも登場させて、完全自動でどこまで進化できるか見てみたい。

--

トークンの課題は結構深刻で、こいつらができることのスケールをかなり制限してる。方針は2つあって:
・技術がさらに進歩するのを待つ
それなりに現実的。トークンが1000倍くらい使えるようになったら、それだけスケールできるようになる。後はサイフとの相談である。
・ファインチューニングを試してみる
これ全然わかってなくて言うけど、なんかモデルを微調整することがOpenAIのAPIでもできるらしい。使えるモデルは今のところ4つしかなくて、実質1択くらいの感じではあるが(しかも1応答しかできないモデルらしいが)。
となると
「PlayWithGPTのモジュールリストは?」>「fuga.pyとhoge.pyとpiyo.pyと……」
「fuga.pyの中身は?」>「#def なんたらかたら……」
みたいな学習をさせれば、そのモデルはPlayWithGPTについて全部知ってる上で議論やコード生成をできるわけだから、トークンの大幅な圧縮になる。かもしれん。
リポジトリが更新されたら、またファインチューニングを行う必要はあるが……。そのあたりも自動化するコードは生成してもらえるわけだから、後はサイフとの相談である。

トークンが短期記憶に相当するとしたら、学習は長期記憶に相当する部分で、ファインチューニングは追加の学習って感じなのかな。ちょうどこの間をとりもつ何かがあればいいんだけどなぁ。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
typodupeerror

アレゲは一日にしてならず -- アレゲ研究家

読み込み中...