エージェント
まずエージェントが本当に必要かを考え、それからゼロから手書きします。ツールの設計、計画と自己チェック、記憶、マルチエージェント、MCP とセキュリティ。最後に RepoBot が自分でソースコードを調べられるようにします。
レッスン一覧
- 01エージェントとワークフロー:本当にエージェントが必要か先に考える
エージェントとは、次に何をするかをモデル自身に決めさせることです。同じ三つの質問に、固定のワークフローは 1 回の呼び出しで正解し、エージェントは 3~4 回かかりました。両者の違い、エージェントのコスト、そしてエージェントを使うべきか判断するチェックリストを説明します。
30 分 · 中級 - 02エージェントループを手書きする
フレームワークを一切使わず、百数十行のコードでエージェントを書きます。ツールの登録、呼び出しのループ、停止条件、エラー処理。まず台本どおりに動く偽のモデルでオフラインにテストし、それから本物のモデルに替えて、何を調べるかを自分で決める様子を見ます。
50 分 · 中級 - 03ツールの設計
同じ三つのツールでも、名前と説明があいまいだとモデルは 30 回中 14 回しか正しく選べず、はっきり書くと 30 回すべて正解しました。ツールの名前、説明、引数、戻り値、エラーメッセージをそれぞれどう書くべきかを説明します。
35 分 · 中級 - 04計画と自己チェック
同じ複数ステップのタスクで、そのままやる、先に計画を立ててからやる、やり終えてから自己チェックする、の三つのやり方を比べます。先に計画を立てるとお金は倍かかって効果はほぼ同じ。自己チェックは本当に出典の誤りを二つ見つけましたが、4 倍のお金がかかりました。
40 分 · 中級 - 05記憶
エージェントの短期記憶はメッセージのリストで、長期記憶は自分で保存しておき、必要なときに取り出す必要があります。エージェントに「覚える」と「思い出す」の二つのツールを与え、まったく新しい会話で前回覚えた事実を使う様子を示します。
35 分 · 中級 - 06複数のエージェントで協力する
監督役のエージェントにタスクを分割させ、コンテキストが独立した三つの作業役のエージェントに並行して任せ、結果をまとめます。単一のエージェントと比べてトークンは 3 分の 1 少なくなり、監督役のコンテキストはわずか 472 トークンでした。マルチエージェントの本当の価値と代償を説明します。
40 分 · 中級 - 07MCP:エージェントにツールをつなぐ標準コンセント
公式の Python SDK で最小限の MCP サーバーを書き、httpx のドキュメントを調べる二つのツールを入れます。さらにそれに接続するクライアントを書き、DeepSeek に MCP 経由でこれらのツールを呼び出させて質問に答えさせます。
45 分 · 中級 - 08エージェントのセキュリティ
本当に再現できる間接プロンプトインジェクションの実験をします。Web ページに AI 向けの「指示」が隠されています。一方のモデルは一度もだまされず、もう一方はプロンプトではっきり禁止していても 4 回だまされました。すべてを止めたのは、プログラムのレベルでの確認の仕組みだけでした。
45 分 · 中級 - 09プロジェクト:ソースコードを調べる Q&A アシスタント
RepoBot をエージェントにします。まずドキュメントを調べ、ドキュメントになければ httpx のソースコードを調べます。v2 が答えられなかった既定値や例外のロジックに、v3 は正しく答え、ソースコードのファイル名と行番号を明記します。
60 分 · 中級
エージェントとは一つのループです。モデルが次に何をするかを決め、プログラムがそれを実行し、結果をモデルに返す。これを、モデルが答えられると判断するまで繰り返します。このモジュールはフレームワークを一切使わず、このループから出発して、本物のシステムに必要なものを少しずつ加えていきます。
どの課にも比較実験があり、結果はいつも「より高度な方法がよい」とは限りません。同じ質問に、固定のワークフローは 1 回の呼び出しで正解したのに、エージェントは 4 倍のお金を使いました。先に計画を立てるとお金は倍になったのに、結論は変わりませんでした。そしてツールの説明をはっきり書くと、正しいツールを選ぶ割合が 47% から 100% に上がりました。
なぜこの順番なのか
第 1 課ではまず「使うべきか」に答えます。これが最も重要な判断です。第 2 課でループを手書きし、この後のすべての課はこのループに何かを加えていきます。第 3 課から第 5 課では、エージェントの効果を最も左右する三つのことをそれぞれ扱います。ツール、仕事の進め方(計画とチェック)、記憶とコンテキストです。第 6 課では一つのエージェントから複数へと広げます。第 7 課は MCP を扱い、あなたが書いたツールをさまざまなエージェントで使えるようにします。第 8 課はセキュリティです。エージェントが手を動かせる以上、セキュリティの話は欠かせません。第 9 課でこれらを RepoBot に組み込みます。
修了の目安
- 要件を渡されたら、1 回の呼び出し、ワークフロー、エージェントのどれを使うべきかを判断し、理由を説明できる。
- フレームワークを使わずに、ツールの登録、エラー処理、ステップ数の上限を備えたエージェントループを書き、スクリプト化したモデルでオフラインにテストできる。
- 一組のツールにはっきりした説明書を書き、モデルが正しいツールを選ぶ割合を実験で検証できる。
- 最小限の MCP サーバーを書き、自分のエージェントにそのツールを接続できる。
- 間接的なプロンプトインジェクションがどう起きるのか、そしてなぜ「プロンプトでモデルに言い聞かせる」だけでは足りず、プログラムのレベルで制限する必要があるのかを説明できる。
- RepoBot v3 が、ソースコードにしか答えのない質問に答え、ソースコードのファイル名と行番号を明記できる。
このモジュールのコード
コードと実行結果は実際に動かしたときのまま載せているため、コメントと出力は中国語です。
- code/05-agents/agent_loop.py
- code/05-agents/agent_security.py
- code/05-agents/mcp_client.py
- code/05-agents/mcp_server.py
- code/05-agents/memory.json
- code/05-agents/memory.py
- code/05-agents/multi_agent.py
- code/05-agents/planning_reflection.py
- code/05-agents/tool_design.py
- code/05-agents/workflow_vs_agent.py
- projects/repobot/v3/agent.py
- projects/repobot/v3/eval_agent.py
- projects/repobot/v3/eval_qa.jsonl
- projects/repobot/v3/llm.py
- projects/repobot/v3/README.md
- projects/repobot/v3/repobot.py
- projects/repobot/v3/requirements.txt
- projects/repobot/v3/retrieval.py
- projects/repobot/v3/tools.py