ジェネラティブエージェンツの大嶋です。
「AIエージェントキャッチアップ #5 - Aider」という勉強会を開催しました。
generative-agents.connpass.com
アーカイブ動画はこちらです。
Aider
今回は、The AI Scientistの中でも使われていた「Aider」を動かしたり、公式ドキュメントやソースコードを読んだりしてみました。
公式ドキュメントはこちらです。
勉強会の途中でコメントいただきましたが、Aiderは「エイダー」と読む方が多いようです。
今回のポイント
Aiderのインストール・起動
Aiderは「aider-chat」というPythonパッケージとして提供されているため、pipなどでインストールして使うことができます。
インストール後、aiderコマンドで起動して、ターミナルでインタラクティブに指示してコードを書かせることができます。
たとえば「fizz buzzのファイルを作成してください。」と指示すると、fizzbuzz.pyというファイルを作成してGitにコミットし、実行してみるか質問されました。

Aiderではこのようにコードの差分(diff)を出力するため、既存のファイルに対する編集を指示することもできます。
チャットモード
Aiderは4つの「チャットモード」をサポートしています。
- 「code」モード:単純にコードを実装する
- 「architect」モード:まず解決策を推論して、次にコードを実装する
- 「ask」モード:コードについて質問できる
- 「help」モード:Aiderについて質問できる
たとえば/architect Can we make this simpler?のように入力すると、LLMが2回呼び出され、1度目で解決策の推論、2度目でコードの実装が行われます。
その他のコマンド
Aiderでは他にも様々なコマンドが実装されています。
たとえば、/web <URL>コマンドを実行すると、httpxやPlaywrightによってWebページの情報を取得してプロンプトに入れることができます。
また、こちらは試していませんが、/audioというコマンドで音声入力することもできるとのことです。
音声入力しながらコードを編集させられるというのは、かなり面白いと思います。
ちなみにAiderを起動して「/」と入力するとコマンドの補完が表示されます。

プロンプトに含めるファイル
Aiderのプロンプトには、Aiderの起動時にaider <ファイル名>のように指定したファイルや、/add <ファイル名>のようにして追加したファイルが含まれます。
これらのファイルの情報をもとにコードを記述したりするようです。
Repository map
Aiderでは、上記のようにプロンプトに含められたファイルと、ターミナル上でのチャットの履歴に加えて、Gitリポジトリのマップをプロンプトに入れる挙動になっているそうです。
公式ドキュメントの上記のページによると、コード内からクラスやメソッドのシグネチャが抜粋されてプロンプトに入れられるとのことです。
aider/coders/base_coder.py: ⋮... │class Coder: │ abs_fnames = None ⋮... │ @classmethod │ def create( │ self, │ main_model, │ edit_format, │ io, │ skip_model_availabily_check=False, │ **kwargs, ⋮... │ def abs_root_path(self, path): ⋮... │ def run(self, with_message=None): ⋮... aider/commands.py: ⋮... │class Commands: │ voice = None │ ⋮... │ def get_commands(self): ⋮... │ def get_command_completions(self, cmd_name, partial): ⋮... │ def run(self, inp): ⋮...
Aiderのコード内では、aider/queriesディレクトリに、Tree-sitterというパーサージェネレータのための各言語の構文の定義が書かれており、おそらくこれを使って構文解析したうえで必要な箇所のみプロンプトに入れているのだと思われます。
Pythonコードからの利用
最後に、そもそもAiderに注目した理由として、Pythonのコードから呼び出せることが挙げられます。
公式ドキュメントの上記のページには、以下のようなサンプルコードが記載されています。
from aider.coders import Coder from aider.models import Model # This is a list of files to add to the chat fnames = ["greeting.py"] model = Model("gpt-4-turbo") # Create a coder object coder = Coder.create(main_model=model, fnames=fnames) # This will execute one instruction on those files and then return coder.run("make a script that prints hello world") # Send another instruction coder.run("make it say goodbye") # You can run in-chat "/" commands too coder.run("/tokens")
aiderからCoderやModelというクラスをimportして初期化し、coder.runとするだけでAiderにコードを実装させることができます。
The AI Scientistのようにコードを実装・実行するようなエージェントを実装したい場合、このようにPythonライブラリとして使えるのはかなり便利そうだと感じました。
ただし、サンドボックス環境でコードを実行するような機能はなさそうなので、その点は注意が必要そうです。
次回のご案内
Aiderは個人的にかなり面白いと感じました。 実際に動かして試してみることができてよかったです。
次回は「AIエージェントキャッチアップ #6 - Swarm (OpenAI)」ということで、OpenAI社が公開した実験的なマルチエージェントフレームワーク「Swarm」がテーマです!
generative-agents.connpass.com
ご興味・お時間ある方はぜひご参加ください!
また、その次の回以降のテーマも募集しているので、気になるエージェントのOSSなどあれば教えてください!