🤪

ChatGPTをWebフレームワークにしたら、未来が見えた

2023/03/21に公開6

ChatGPTを文字通りWebフレームワークにしてみました。
何を言っているかわからないと思うので、次のコードを見てください。

index.ts
import { initChatGptGenerator } from "gpt-as-api";
import { Hono } from "hono";
import { cache } from "hono/cache";

const gpt = initChatGptGenerator(
  "これからTODOアプリとしてふるまってください。\n今からリクエストを行うので、そのアプリレスポンスを次の指示に従って返却してください。\n\n{{Domain}}"
);
const app = new Hono();

app.get("/", gpt("TODOの管理ができるページをHTMLで適切に返してください。", "html"));
app.all("/api/*", gpt("TODOのAPIとしてレスポンスをJSONで返してください。", "json"));

export default app;

なんと、ChatGPTそのものをTODOアプリにさせることで全く新しいWebフレームワークを作ることができました!!()
世間ではChatGPTにコードを書かせたりしていますが、そんな難しいことをする必要はなく、ChatGPTにアプリになってもらえばいいのです?!

成果物

今回作成したものは全て下記のリンクとリポジトリで公開しています!!ぜひ新時代?のアプリケーションを試してみてください。
レスポンスはとても悪いですが、毎回違うページが生成されて面白いと思います!
※APIの使用制限を設けています。リミットにかかるとアプリにはアクセスできなくなります

https://github.com/inaridiy/gpt-as-api
デプロイ先

スクショ




からくり

TwitterなどでChatGPTにShellやTODOアプリとしてふるまわせているツイートを見たことはあるでしょうか?
このフレームワーク?はそれらを自動化していい感じに使えるようにしたものです。
具体的には設定したPromptに以下のようなコードで届いたHTTPリクエストを追加して、ChatGPTを呼び出しています。

const [path, query, body] = [c.req.path, c.req.query(), c.req.parseBody()];
const httpReqString = `
    path:
    ${path}

    method:
    ${c.req.method}

    query:
    ${JSON.stringify(query, null, 2)}

    body:
    ${JSON.stringify(body, null, 2)}`;

※アプリに関係ない情報が多かったのでheaderは省いています

このように生成したPromptでChatGPTを呼び出すことで、任意の自然言語からそれっぽいふるまいをするアプリケーションを作っています。
他にもChatGPTからのレスポンスをパースしたりはしていますが、大まかな流れはこんな感じです。

圧倒的問題点

ここまで勢いでごまかしてきましたが、今のままでは致命的な問題点がいくつかあるので紹介します。

安定性に欠ける

さきほどしれっとアクセスすたびにレスポンスが変わるってい言いましたが、普通にこれは致命的です。
Promptである程度縛ることはできても、常に同じフォーマットでレスポンスを返すのはなかなか難しいでしょう。また、Promptが長くなるほど金銭的なダメージも大きいです。

レスポンスが遅い

実際にアクセスしていただければわかると思いますが、レスポンスが非常に遅いです。まぁそりゃそうですね。

高い

毎回ChatGPTを呼び出しているので当然です。

データを永続化できない

これについては後で詳しく書きますが、APIを叩いてTODOを使いしても、それは反映されません。

複雑なことはできない

複雑なことをすればするほどレスポンスが遅くなり高くなります。

プロンプトインジェクション

この方法でアプリケーションをすべてくみ上げた場合、何かしら悪意あるPromptで管理者権限などを盗まれるかもしれません。

データの永続化

現段階で作成したものはデータの永続化はできません。SQLiteをつないでいるわけでも、チャットを永続化しているわけでもないので当然ですね。
これらには以下の解決策があると思っています。

Langchainのような方式でDBを接続する

この方法をとれば一定の確度でデータを読み書きできるようになると思います。
ですが最低で二回ChatGPTを呼び出す必要が出てくるので、レスポンスも最低二倍になり現段階では使い物にならない可能性が高いです。
ですが、ChatGPTのレスポンスが大幅に改善されれば、DBのほかにも様々なツールを接続できる可能性はあります。

チャットを永続化する

以前に行ったインタラクションをすべてチャットとして記録することで、DBすら使わずに完全にChatGPTのみでアプリケーションを完結させる方法です。
この方法はまさに未来だと思います。そもそもDBなどは汎用的に設計されているため、実際は要件によって最適なDB構造などは異なるはずです。
なので、究極的にはChatGPTが最適なDB構造をチャットに保存してはるかに効率よくデータを扱うことができるかもしれません(笑)

まぁ今はトークン制限も相まってほとんどデータを保存できなさそうです。

これら問題点と今後

先ほどから問題点ばかり上げていますが、これは今だけのことかもしれません。
ここ数か月、LLMは、いや人類は大幅な進化を遂げています。このままのペースですべてが進化すれば完全にLLMアプリケーションとして使える日が来るかもしれません。
実際、問題点の多くはChatGPTが高速化、低廉化、高性能化すれば解決します。

3月現在の使い道

適当なAPIのモックサーバーなどとしては一定使えるかもしれません。
他にもなにか革新的な使い方などありましたらコメントなどください!

おわりに

今日書いた内容は当然今は使えません。ですが、これを思いついたとき僕は、今後のアプリケーションがこの形態になる可能性は十分にあると思いました。
今あなたが使っているプログラミング言語も将来はアセンブリのような扱いになるかもしれませんね。
新たな時代、世界に向かってレッツChatGPTライフ!!!

Discussion

naoyo4.btcnaoyo4.btc

あいかわらず、ぶっ飛んでいて良い感じ。

その才能は単純に羨ましい。今後とも期待しています。いいな〜

才能あるものが、きちんと認められる世の中になれば、もっといいな〜
( まあ、既に認められてはいるが、不充分だぜ!! )

SakuraSakura

クローンしたけどts関連に疎くて動かせなかったw

KRTKRT

これらのコードを貼り付けるところすら知らない。(おっさんです)

iharuyaiharuya

検索とか相性いいかも知れないですね。
app.get("/search", gpt("Googleのような検索エンジンとして検索結果を返してください。", "json"));

KunihiroSKunihiroS

このままのペースですべてが進化すれば完全にLLMをアプリケーションとして使える日が来るかもしれません。

ThirdPartyPluginのサードパーティアプリケーション実装開放が予定されてるのでそれが本命でしょうね