概要
- AIコーディングアシスタントの本質は約200行のシンプルなPythonコード
- LLMとツールボックスの連携による会話ベースの実行フロー
- 必要なツールは「ファイル読み込み」「ファイル一覧取得」「ファイル編集」の3つ
- 実装の流れと各ツールの詳細な説明
- 実践例や本格的なツールとの違い、拡張のヒント
AIコーディングエージェントの仕組みと実装
- AIコーディングアシスタント の本質は「魔法」ではなく、 LLMとツールの連携 による会話型エージェント
- ユーザーが要件を入力し、 LLMが必要なツール呼び出しを指示
- プログラムがツールを実行し、結果をLLMへ返却
- LLM自身はファイルシステムへ直接アクセスしない 設計
- このループがエージェントの全体構造
必須ツール3種
-
ファイル読み込み LLMがプロジェクトコードを確認するための機能
-
ファイル一覧取得 ディレクトリ内ファイルを一覧表示し、プロジェクトをナビゲート
-
ファイル編集 コードの生成・修正・新規作成を指示
- Claude Code等の本格的なエージェントではgrepやbash、websearch等の追加機能も搭載
基本的なセットアップ
- 必要な インポート (inspect, json, os, anthropic, dotenv, pathlib, typing)
- APIクライアント の初期化(例:AnthropicのClaude利用)
- ターミナル出力の色分け による可読性向上
- ファイルパス解決ユーティリティ で絶対パスを取得
ツールの実装
-
各ツール関数には 詳細なdocstring を付与し、LLMが自律的にツール選択できるよう設計
- read_file_tool ファイル名を受け取り、中身を返却する辞書を生成
- list_files_tool ディレクトリ内のファイルと種類(ファイル/ディレクトリ)を返却
- edit_file_tool
old_strが空なら新規作成、それ以外はold_strをnew_strに置換
- old_str未検出時の挙動も明確化
ツールレジストリとLLMへの知識伝達
- TOOL_REGISTRY で関数名と実体を紐付け
- get_tool_str_representation でdocstringとシグネチャを抽出し、LLMにツール一覧を提示
- SYSTEM_PROMPT でツールの使い方・呼び出しフォーマットを指示
- LLMは「tool: TOOL_NAME({JSON_ARGS})」形式でツール呼び出しを返却
ツール呼び出しのパース
- extract_tool_invocations でLLMの出力からツール呼び出しを抽出
- 「tool: name({...})」行をパースし、関数名と引数辞書のリストを生成
LLM呼び出しラッパー
- execute_llm_call で会話履歴とシステムプロンプトを渡し、LLMの応答を取得
エージェントループ全体像
- 外側ループ :ユーザー入力を取得し、会話履歴に追加
- 内側ループ :LLM応答を解析し、ツール呼び出しがあれば実行
- ツール呼び出しがなければ応答を表示し、内側ループ終了
- ツール実行結果を会話履歴に追加し、再度LLMへ
- 複数ツールの連続呼び出し にも対応する構造
実行例
- 新規ファイル作成指示:「hello.pyにHello Worldを実装して」
- edit_fileツールで新規作成、LLMが完了報告
- 複数ステップ:「hello.pyに掛け算関数を追加して」
- read_fileで内容確認→edit_fileで関数追加
本格的なツールとの違い
- 本実装は 約200行 のシンプル構成
- Claude Code等の製品では
- 例外処理やフォールバック
- ストリーミング応答
- 長大ファイルの要約等の文脈管理
- 追加ツールや破壊的操作の承認フロー
- しかし 基本構造は同じ で、LLMが判断し、コードが実行、結果を返却
拡張と学習のヒント
- LLMプロバイダの差し替え やプロンプトの調整、ツール追加も容易
- シンプルなパターンながら高い拡張性
- AIソフトウェア開発の先端技術 を学ぶ教材やコースも紹介
このパターンを理解し、拡張することで自作のAIエージェント開発が可能