AIエージェントの作り方。道具と繰り返しの50行から

AIエージェントは、思ったより小さな部品でできています。中で回っている3つの部品から、Pythonで道具を1つ持つエージェントを作る最小の例、よくあるつまずき、作れる人に来る仕事まで、1頁で順に見ていきます。

文 ゆめさく ・ 2026年10月23日

AIエージェントとは

AIエージェントは、AI のモデルに「道具」を渡し、目的が済むまで「考える、道具を使う、結果を見る」を繰り返させる仕組みです。チャットの AI が 1 回答えて終わるのに対し、エージェントは自分で次の一手を選びます。

  • 1 回の頼みごと。チャットの AI は 1 回答えて終わり、エージェントは済むまで何度も回ります
  • 外の世界。チャットの AI は触れず、エージェントは渡された道具で触れます。道具はファイル、検索、社内の仕組みなどです
  • 作る人が書く物。チャットの AI は頼みの文だけ、エージェントは道具と繰り返しの決まりまで書きます

Claude Code や Codex も、中ではこの形で動いています。道具が「ファイルを読む」「コマンドを動かす」なので、コードを書くエージェントになっています。エージェントにコードを書かせて開発する進め方は、AI駆動開発の頁で手順にしています。

中で回っている 3 つの部品

  1. モデル。次に何をするかを決める頭です。道具を使うか、もう答えるかを選びます
  2. 道具。名前と説明と、受け取る値の形を渡します。モデルは説明を読んで使うかどうかを決め、実際に動かすのは自分のコードです
  3. 繰り返し。モデルが道具を使いたいと言う間は、結果を返してもう一度聞きます。止める条件を自分で決めます
ここが大事

モデルは道具を「動かす」のではなく、「この道具をこの値で使いたい」と頼むだけです。動かすのも、結果を渡すのも、止めるのも、作る人のコードです。だから危ない操作は、道具の側で断れます。

手を動かす最小の例

フォルダの中を見て「いちばん大きいファイルはどれか」を答えるエージェントを、Python で作ります。道具は 1 つ、繰り返しは最大 10 回です。

用意する物は Python (3.10 以上) と Anthropic の API の鍵です。鍵は Claude の開発者向けの管理画面で作り、環境変数に入れます。API は使った分だけ料金がかかります。

ターミナル

pip install anthropic
export ANTHROPIC_API_KEY="ここに自分の鍵"

agent.py という名前で保存します。

Python

import json
import os

import anthropic

client = anthropic.Anthropic()

# 1 道具の説明。AI はこれを読んで、使うかどうかを決める
tools = [{
    "name": "list_files",
    "description": "フォルダの中のファイル名とバイト数を返す",
    "input_schema": {
        "type": "object",
        "properties": {"folder": {"type": "string"}},
        "required": ["folder"],
    },
}]


# 2 道具の中身。実際に動かすのは自分のコード
def list_files(folder):
    names = [n for n in os.listdir(folder)
             if os.path.isfile(os.path.join(folder, n))]
    return {n: os.path.getsize(os.path.join(folder, n)) for n in names}


messages = [{"role": "user",
             "content": "このフォルダ (.) でいちばん大きいファイルは?"}]

# 3 繰り返し。道具を呼ぶ間は回し、10 回で止める
for turn in range(10):
    res = client.messages.create(
        model="claude-opus-5-5",
        max_tokens=16000,
        tools=tools,
        messages=messages,
    )
    messages.append({"role": "assistant", "content": res.content})
    if res.stop_reason != "tool_use":
        print("".join(b.text for b in res.content if b.type == "text"))
        break
    results = []
    for block in res.content:
        if block.type == "tool_use":
            print("道具を呼ぶ", block.name, block.input)
            out = list_files(**block.input)
            results.append({
                "type": "tool_result",
                "tool_use_id": block.id,
                "content": json.dumps(out, ensure_ascii=False),
            })
    messages.append({"role": "user", "content": results})
else:
    print("10 回で止めました。答えはまだ出ていません")

ターミナル

python agent.py

動くと、まず「道具を呼ぶ list_files」の行が出て、そのあとに答えの文が出ます。モデルが自分で list_files を使うと決め、自分のコードがフォルダを読み、その結果をモデルに返した、という 1 往復が見えます。

どこを変えると何が変わるか

  • 道具を足す。 tools に 1 つ足し、中身の関数を書きます。たとえばファイルの中身を読む道具を足すと、「いちばん大きいファイルの中身を要約して」にも答えられます
  • 頼みの文を変える。 messages の最初の文を変えます。道具で答えられない頼みには、モデルは道具を使わずに答えます
  • 道具を共通の形で渡す。道具をエージェントごとに書かず、共通の規格でつなぐのが MCP です。作り方は MCP サーバーの作り方にまとめています
  • 止める条件を変える。 range(10) が上限で、使い切ると最後の else に入ります。道具が外の仕組みに書き込むなら、上限は小さく保ちます

よくあるつまずき

よくあるエラーと解決法

繰り返しが止まらず、料金が膨らむ

止める条件を書かないと、モデルが道具を呼び続ける間ずっと回ります。回数の上限をコードに書き、はじめは小さな数で試します。

よくあるエラーと解決法

道具の説明があいまいで、使われない、または違う場面で使われる

モデルは説明の文だけを見て決めます。「何を返すか」と「どんなときに使うか」を 1 文ずつ書くと、呼ばれ方がそろいます。

よくあるエラーと解決法

道具の結果を返し忘れて、エラーになる

モデルが道具を使いたいと言ったら、その呼び出しの id を付けた結果を、次の頼みで返します。道具が失敗したときも、失敗したことを結果として返します。

よくあるエラーと解決法

危ない操作を、確かめなしで道具にする

削除や送信のような戻せない操作は、道具の中で人の確認を挟むか、はじめは道具にしません。モデルは頼まれていない手を選ぶことがあります。

よくあるエラーと解決法

鍵をコードに書いて、そのまま公開する

API の鍵は環境変数から読み、リポジトリに入れません。鍵が漏れると、他人の利用分まで料金がかかります。

作れる人に来る仕事

エージェントの仕組みが分かり、小さな物を確かめながら作れると、次のような仕事の入り口が見えてきます。ここに並べるのは仕事の種類と公開の数字で、だれかが受け取れる額の約束ではありません。

  • 社内の問い合わせに答える仕組み。エージェントは社内の資料を探して答え、人は答えてよい範囲と、間違えたときの窓口を決めます
  • 書類の下書きと振り分け。エージェントは読んで分け、下書きを作ります。最後に出すかどうかは人が決めます
  • 決まった調べものを任せる仕組み。エージェントは検索して表にまとめ、人は調べる元と確かめ方を決めます
  • いまある道具への組み込み。エージェントは道具を呼んで手順を進め、人は任せる操作と止める条件を決めます

公開の数字

クラウドワークスの公開の仕事検索で、2026 年 10 月 23 日に次の語を調べた件数です。語が募集の文に入っている物の数で、講師やインタビューの募集も混じります。報酬は募集ごとの幅が大きく、1 つの相場にはまとまりません。

検索した語件数
AIエージェント672 件
業務自動化546 件
生成AI10,096 件

会社に雇われて働く人の数字もあります。厚生労働省の「令和6年賃金構造基本統計調査」(2025 年 3 月 17 日公開) で、仕組みの設計を受け持つ職種「システムコンサルタント・設計者」の平均は、毎月の給与 (残業代を含む) が 48.1 万円、年間の賞与などが 175.7 万円でした。平均年齢は 41.4 歳、平均の勤続は 14.5 年です。経験の長い人を中心にした平均で、学び始めた人や副業の人の額ではありません。

最初の一歩は、作ったエージェントを人に見せられる形にすることです。何を頼むと、どの道具を使い、どこで止まるか。それを動く形で見せられると、話が速く進みます。

よくある質問

Q. ノーコードの道具で作るのと何が違いますか

ノーコードの道具も、中では同じ「モデル、道具、繰り返し」で動いています。コードで一度組むと、どこで何が起きているかが見えるので、道具の選び方や直し方が分かるようになります。

Q. 1 回動かすといくらかかりますか

モデルと、読み書きした文字の量で決まります。最新の料金は公式の料金の頁で確かめてください。はじめは繰り返しの上限を小さくして試します。

Q. コードを書くエージェントを自分で作れますか

この例の道具を「ファイルを読む」「ファイルに書く」「テストを動かす」に替えると、同じ形になります。ただ、書き込む道具は危ないので、まずは Claude Code のような既にある物で、エージェントと開発する感覚をつかむのが近道です。

出典

あわせて見る

ゆめさくコードでできること

最終確認繰り返しと道具の受け渡しを確認済み

最小の例は 2026年10月23日に Python と anthropic 2.1.0 で、道具の呼び出しと結果の返し方の形を SDK の型に当てて確かめました。モデルの名前と料金は変わるので、公式の文書を正としてください。件数と賃金の数字は、頁に書いた日付の時点の物です。