AIエージェントキャッチアップ #70 - tree-sitterを開催
Generative Agentsは、AIエージェント実装でよく使われるパーサージェネレーター「tree-sitter」をテーマにした第70回勉強会「AIエージェントキャッチアップ」を開催した。
キーポイント
勉強会の開催
Generative Agentsが「AIエージェントキャッチアップ #70 - tree-sitter」という勉強会を開催し、アーカイブ動画が公開されている。
テーマの内容
今回の勉強会では、AIエージェントの実装でよく使われるパーサージェネレーター「tree-sitter」についてキャッチアップ(情報収集・学習)が行われた。
関連リソースの紹介
記事内でtree-sitterのGitHubリポジトリへのリンクが紹介されている。
影響分析・編集コメントを表示
影響分析
この記事は特定の開発者コミュニティの活動報告であり、業界全体に直接的な影響を与えるニュースではない。しかし、AIエージェント実装における具体的な技術(tree-sitter)への関心の高まりや、実践的な知識共有の場が存在することを示している。
編集コメント
技術的な深掘りというよりは、コミュニティ活動の告知・報告が主な内容。AIエージェント開発における実装技術の一つに焦点を当てた勉強会が行われた点は、現場のニーズを反映している。
ジェネラティブエージェンツの大嶋です。
「AIエージェントキャッチアップ #70 - tree-sitter」勉強会を開催しました。
イベントページ: https://generative-agents.connpass.com/event/387534/
アーカイブ動画はこちら: www.youtube.com
今回は、AIエージェントの実装でよく使われるパーサージェネレーター「tree-sitter」について学びました。
tree-sitterのGitHubリポジトリはこちら: github.com
今回…
原文を表示
ジェネラティブエージェンツの大嶋です。
「AIエージェントキャッチアップ #70 - tree-sitter」という勉強会を開催しました。
https://generative-agents.connpass.com/event/387534/generative-agents.connpass.com
アーカイブ動画はこちらです。
www.youtube.com
今回は、AIエージェントの実装でよく使われるパーサージェネレーター「tree-sitter」をキャッチアップしました。
tree-sitterのGitHubリポジトリはこちらです。
github.com
今回のポイント
tree-sitterとは
tree-sitterはパーサージェネレーターであり、ソースコードの編集時に効率的に構文木を構築するようになっているそうです。
tree-sitterは、各種プログラミング言語から使用するためのバインディングが提供されています。
また、パースする対象としても任意のプログラミング言語を指定可能で、多くのプログラミング言語のパーサーが提供されています。
tree-sitterのコーディングエージェントでの活用
tree-sitterはAIエージェントのために作られたものではありませんが、コーディングエージェントの実装でよく使われています。
Aider、Codex、Cline、OpenCodeなど、多くのコーディングエージェントがtree-sitterを使用しています。
コーディングエージェントにおけるtree-sitterの主な使い方として、以下の2つが挙げられます。
リポジトリマップ・シンボル抽出
リント
リポジトリマップ・シンボル抽出
AiderやClineでは、tree-sitterをリポジトリマップの作成やシンボルの抽出に使用しています。
たとえばAiderでは、以下のようなリポジトリマップがコンテキストとして提供されるようになっています。
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):
⋮...
引用元:https://aider.chat/docs/repomap.html
リポジトリマップの作成のためのクラス名・関数名などの抽出にtree-sitterが使われています。
シェルコマンドの安全判定
Codexでは、tree-sitterを使ってBashのシェルコマンドを構文解析し、コマンドの実行可否を判定しています。
単なる前方一致や正規表現での判定よりも、構文解析して判定したほうが詳細な判定が可能となります。
仮想的なシェルコマンドの提供
面白い実装として、Codexのapply_patchコマンドがあります。
Codexはapply_patchというコマンドが使える想定で動作しますが、実際にapply_patchというコマンドが存在しない環境でも動きます。
apply_patchコマンドが存在しなくても動作するのは、tree-sitterでシェルコマンドを構文解析してapply_patchコマンドが呼び出されたことを確認して、apply_patchコマンドが呼び出されている場合はRustの関数を実行する実装になっているためです。
この実装のため、apply_patchコマンドはシェルの|などとは組み合わせられないといった制約があります。
AIエージェントに実際には存在しないコマンドを提供するのは、おもしろい発想ですね。
その他の用途
コーディングエージェントでのtree-sitterのその他の用途としては、構文バリデーションやセマンティックチャンキングが挙げられます。
構文バリデーション:コーディングエージェントが出力したコードが構文的に正しいかチェック
セマンティックチャンキング:コードをクラスや関数で分割して検索可能にする
また、UI上でのシンタックスハイライトなどに使われる例もあるようです。
次回のご案内
以上、今回は「tree-sitter」をキャッチアップしました。
次回は「AIエージェントキャッチアップ #71 - OpenShell」ということで、NVIDIAが公開したAIエージェントのためのランタイム「OpenShell」がテーマです!
https://generative-agents.connpass.com/event/388576/generative-agents.connpass.com
ご興味・お時間ある方はぜひご参加ください!
また、その次の回以降のテーマも募集しているので、気になるエージェントのOSSなどあれば教えてください!
関連記事
今日のまとめ
AI日報で今日の重要ニュースをまとめ読み