スクラッチから基本的なAIエージェントを構築する:ツール
この記事では、基本的なAIエージェントにツールを追加してコンピュータ環境と対話できるようにする方法を説明します。ツールの定義、エージェントの使用方法、およびbashコマンド実行、ファイル読み取り、ファイル検索、grep、ファイル書き込み、ファイル編集、ウェブフェッチの7つの必須ツールのPython実装を網羅しています。
以前の記事では、最も基本的なAIエージェントのフレームワークを構築しました。これは内部知識に基づいてユーザー入力に応答するだけのものでした。しかし、エージェントを真に有用にするには、環境内でアクションを実行する能力を与える必要があります。その鍵となるのがツール(Tools)です。ツールとは、大規模言語モデル(LLM)に公開する関数やプログラムであり、エージェントが自律的に呼び出せるようにするものです。この記事では、基本エージェントを拡張して7つの実用的なツールを追加します。
ツールは単純なPython関数から、MCPサーバーのような複雑なものまであります。最新のLLMはネイティブのツール呼び出し機能を備えており、JSON形式でツールリクエストを生成するため、信頼性が高まっています。最初に実装するツールはrun_bashで、エージェントがBashコマンドを実行できるようにします。これは最も強力なツールですが、システムへの完全なアクセス権を与えるため、最も危険でもあります。今後の記事でセキュリティ対策について説明します。
次にファイル操作ツールです。read_fileはファイルの内容を行番号付きで読み取り、オフセットと行数制限をサポートします。glob_filesはパターンに一致するファイルを検索し、grepは正規表現でファイル内容を検索して一致行とファイルパスを返します。write_fileはファイルを作成または上書きし、親ディレクトリを自動的に作成します。edit_fileは文字列の正確な置換を行い、全量書き込みよりも安全です。最後にwebfetchツールはウェブページを取得してプレーンテキストに変換し、HTTP/HTTPSに制限され最大2MBです。
すべてのツールはLLMが認識できるようにスキーマを定義する必要があります。コードではget_tool_schemas関数を使用して、各ツールの名前、説明、パラメータ構造を返します。エージェントループでは、TOOL_REGISTRYでツール名と実際の関数をマッピングし、LLMがツール呼び出しを返したときに関数を実行して結果を会話に追加します。システムプロンプトでは、エージェントが利用可能なツールを認識できるようにします。
これら7つのツールは、AIエージェントがコンピュータと対話するための基盤を形成します。組み合わせて使用することで、エージェントはファイルシステムの探索、ファイルの読み書き、コマンドの実行、ウェブ情報の取得が可能になります。今後の記事では、さらに高度な機能とセキュリティ強化を追加していきます。このようにして、強力な自律エージェントシステムを段階的に構築できます。