🧑‍🍳

LLMに面倒なことをやらせるソフト「Code Cooker」の紹介

2024/07/14に公開

LLMに面倒なことをやらせたい

面倒なことはChatGPTにやらせようという本の著者のからあげです。

書籍では、様々な面倒なことをChatGPTにやらせています。ChatGPT単体(コアの部分)は、基本的にテキスト(言葉)を生成することしかできないので、どうやって面倒なことをやらせているかというと、ChatGPTの生成したテキストで、拡張機能を操作することで、実現しています。イメージ的には以下のように、ChatGPTの手足のように拡張機能を使う感じです。拡張機能としては、色々ありますがChatGPTが生成したコードを実行できるAdvanced Data Analysis(Code Interpreter)が重要かつ代表的な機能となります。


面倒なことはChatGPTにやらせよう(講談社)より引用

この機能はChatGPT独自のものだったのですが、最近はGeminiのGoogle AI Studioでもコード実行するAdvanced Data Analysis的な機能が使えるようになったり、ClaudeがArtifactsという機能で、似たように様々なことができるようになってきました。イメージ的には上の図と同様なのですが、恐らく内部的にはChatGPTはバックエンドの技術をメインにつかっているのに対して、Artifactsはフロントエンドの機能をメインに使っているといった違いがあるように感じています(中身は公開されていないので、挙動からの想像です)。

正直、使う分には何でもよいのですが、この機能はChatGPTでしかできない、この機能はClaudeでしかできない…といったようになると不便ですし、特定のサービスに囲い込まれるのも課金的につらいですよね。

そういうわけで、いろんなLLMでClaudeのArtifactsやChatGPTのAdvanced Data Analysis(Code Interpreter)的なことが実験できるソフトを作ってみました。

実は以下記事でも紹介しているのですが、色々ソフトもアップデートしたので、本記事ではあらためて簡単に使い方を紹介したいと思います。
https://zenn.dev/karaage0703/articles/f6a1df0b2eabf4

ちなみに、ChatGPT/Claude/GeminiいずれかのAPI Keyが必要です。そしてあらかじめ言っておくと、ChatGPTやClaudeに比べるとめっちゃ不便であまり実用的でないです。開発者向けというか、完全に自分の実験用ですのでその点は注意ください。

特徴(メリット/デメリット)としては、以下です。

  • APIさえあればArtifacts的なこともAdvanced Data Analysis的なことが手軽にできる
    • 自分で好きなライブラリをインストールして使うこともできる
  • LLMを簡単に切り替えられる
    • GPT-4, GPT-4o, GPT-4o mini, Claude 3.5 Sonnet, Gemini 1.5 Pro, Gemini 1.5 Flashに対応
    • GeminiのAPIの無料分を使えばある程度無料で使える
  • Google Colabで手軽に使うこともできる
  • UIがいまいち

Code Cooker使い方

ソフトは以下です。

https://github.com/karaage0703/code-cooker

ローカルでもGoogle Colabでも動かせます。初心者はGoogle Colabを使うのが手軽でよいと思います。

READMEに簡単なセットアップ方法と使い方は書いてあるのですが、少し丁寧に説明します。

Google Colabでのセットアップ方法

以下のNotebookの上のOpen in Colabをクリックして、上から実行していくだけです。

code_cooker_on_colab.ipynb

途中API Keyを入力するところがあるので、そこには手持ちのAPI Keyを入力してください。お金を使いたくない人は、GeminiのAPIに無料分があるのでそれを使うのがよいと思います。もしくは、頑張ってソフトを改造してローカルLLMに対応すれば無料で使えます。

最後まで実行すると Running on public URL: https://xxxx.gradio.liveというウェブリンクが発行されるので、クリックするとソフトが起動します。

ローカルでのセットアップ方法

OSはMacでもLinuxでもWindows(WSL2)でも動くと思います(Windowsは未テスト)

まずDockerをセットアップしてください。Docker知らない人は、以下記事参照ください。

https://zenn.dev/mkj/articles/33befbaf38c693

以下コマンドでソフトをダウンロードします。

$ cd && git clone https://github.com/karaage0703/code-cooker

ダウンロードしたディレクトリ以下の./cooker/.configというファイルにAPIを書き込んでください。以下のxxxの部分に自分のAPIキーを入力します。自分が使うLLMのAPI KeyだけでOKです。

[claude_api_key]
key = sk-xxx

[openai_api_key]
key = sk-xxx

[gemini_api_key]
key = xxx

以下コマンドでソフトを起動します。

$ cd ~/code-cooker
$ docker compose up -d base
$ docker exec -it code-cooker-base python3 app.py

ブラウザ(Google Chrome推奨)で以下アドレスにアクセスするとソフトが使えます。

http://localhost:7860/

以下コマンドでDockerコンテナを停止できます。ソフトを起動できないときは、一旦以下を実行してください。

$ cd ~/code-cooker
$ docker compose down

使い方

Google Colabでもローカルでも、起動したら以下のように表示されます。

データ分析・コード実行(Code Interpreter的使い方)

好きなLLMを選択して、システムプロンプトに「Data Analytics」を選択します。
あとは好きなプロンプトを入力してSubmitしてください。

以下のようにコードが実行されます。

以下のような結果画像もブラウザの右下に出てきます。

続けて会話したいときは、Operationを「Continute」にしてください。新たに会話したいときは「new」を選択しましょう。

なお、LLMを途中で変更したら、強制的に新しい会話からになります。

Webアプリ生成(Artifacts的使い方)

システムプロンプトに「Web App Creator」を選択します。あとは上記と同じです。

実行後は、ひと手間かかります。ClaudeのArtifactsのように右側に結果はでてきません。

Code Cookerのディレクトリ直下に「index.html」が生成されるので、自分の好きなブラウザでindex.htmlを開いてください。

以下のようにシューティングゲームがブラウザで遊べます。

作り直すたびにブラウザはリロードしてください。

システムプロンプトについて

システムプロンプトに「Empty」を選択すると、空のシステムプロンプトになります。LLMの比較をしたいときに便利かもしれません。

システムプロンプトはcooker/system_prompt.pyに書かれているので、プロンプトを変えたいときは、自分で好きに書き換えてください。

Code Cookerを使って作ってみたもの

最近は、LLMで新しい楽器を作って遊んだりしています。Web MIDIを使うと、ブラウザでMIDIデバイスにも対応できるので楽しいです。AIで作った楽器のセッションとかやってみたいですね。

https://x.com/karaage0703/status/1807400709589237848

https://x.com/karaage0703/status/1809531420039057526

https://x.com/karaage0703/status/1810715551238602906

まとめ

LLMに面倒なことをやらせる自作ソフト「Code Cooker」の紹介でした。

完全に自分の実験用で、車輪の再発明的なところはあるのですが、実際に自分でソフト作ってみるとLLMのプロンプトエンジニアリングや、複数のLLMに対応したソフトをどう構成するのがよいかといったことを考えるきっかけになってよかったです。

LLM使って、面倒なことでなく、色々新しいものを作ったりするのも楽しいなと感じています。よかったらぜひ使ってみたり、ソフトの不便なところを修正Pull Requestしてもらえると嬉しいです。

https://github.com/karaage0703/code-cooker

関連記事

https://karaage.hatenadiary.jp/entry/2023/01/11/073000

変更履歴

  • 2024/07/23 GPT-4o miniに対応

Discussion