以下の内容はhttps://blog.generative-agents.co.jp/entry/2024/10/15/141021より取得しました。


「AIエージェントキャッチアップ #5 - Aider」を開催しました

ジェネラティブエージェンツの大嶋です。

「AIエージェントキャッチアップ #5 - Aider」という勉強会を開催しました。

generative-agents.connpass.com

アーカイブ動画はこちらです。

youtube.com

Aider

今回は、The AI Scientistの中でも使われていた「Aider」を動かしたり、公式ドキュメントやソースコードを読んだりしてみました。

AiderのGitHubリポジトリはこちらです。

github.com

公式ドキュメントはこちらです。

aider.chat

勉強会の途中でコメントいただきましたが、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.chat

その他のコマンド

Aiderでは他にも様々なコマンドが実装されています。

たとえば、/web <URL>コマンドを実行すると、httpxやPlaywrightによってWebページの情報を取得してプロンプトに入れることができます。

また、こちらは試していませんが、/audioというコマンドで音声入力することもできるとのことです。

音声入力しながらコードを編集させられるというのは、かなり面白いと思います。

ちなみにAiderを起動して「/」と入力するとコマンドの補完が表示されます。

プロンプトに含めるファイル

Aiderのプロンプトには、Aiderの起動時にaider <ファイル名>のように指定したファイルや、/add <ファイル名>のようにして追加したファイルが含まれます。

これらのファイルの情報をもとにコードを記述したりするようです。

Repository map

Aiderでは、上記のようにプロンプトに含められたファイルと、ターミナル上でのチャットの履歴に加えて、Gitリポジトリのマップをプロンプトに入れる挙動になっているそうです。

aider.chat

公式ドキュメントの上記のページによると、コード内からクラスやメソッドのシグネチャが抜粋されてプロンプトに入れられるとのことです。

aider/coders/base_coder.py:
⋮...
│class Coder:
│    abs_fnames = None
⋮...
│    @classmethoddef 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のコードから呼び出せることが挙げられます。

aider.chat

公式ドキュメントの上記のページには、以下のようなサンプルコードが記載されています。

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」がテーマです!

github.com

generative-agents.connpass.com

ご興味・お時間ある方はぜひご参加ください!

また、その次の回以降のテーマも募集しているので、気になるエージェントのOSSなどあれば教えてください!




以上の内容はhttps://blog.generative-agents.co.jp/entry/2024/10/15/141021より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14