News 2026.04.20

Claude Codeのサブエージェントで請求書2,000件/日を自動処理する構成を解説

タグ:ClaudeCode / AI / 自動化 / 請求書処理 / サブエージェント / 生成AI / 開発

TL;DR

  • Claude Codeのサブエージェント(副エージェント)機能を活用し、1日2,000件の請求書を自動処理する構成が公開された
  • メインエージェントが指示を出し、複数のサブエージェントが並列で請求書を読み取り・分類・データ出力まで担う設計
  • 処理の信頼性を上げるために、エラー処理・検証ステップをエージェントごとに組み込むのがポイント

変更内容の詳細

サブエージェントとは何か

Claude Codeでは、1つのメインエージェント(主な指示を出す役割)が、複数のサブエージェント(個別の作業を担う役割)を呼び出して並列に処理させる構成を組むことができます。これにより、単一のAIプロセスでは時間がかかる大量の繰り返し作業を、複数の処理に分割して効率よくこなせるようになります。

dev.toに投稿された事例(@automate-archit)では、この仕組みを請求書処理に応用し、1日あたり2,000件の請求書を自動で読み取り・分類・出力する構成を実現したとされています。

全体の構成

紹介されている構成は大きく3つの役割に分かれています。

1. オーケストレーター(指揮役)エージェント

メインエージェントは「オーケストレーター」として機能します。受け取った請求書のリストを確認し、各サブエージェントに処理を割り振ります。並列処理の管理や、エラーが起きたときの再試行(リトライ)指示もここで行います。

2. 請求書読み取りサブエージェント

各請求書ファイル(PDF・画像など)を受け取り、金額・日付・取引先名・品目などの構造化データを抽出します。Claude Codeの自然言語理解能力を活かし、フォーマットが異なる請求書にも対応できる点が特徴です。

3. 検証・出力サブエージェント

抽出されたデータの整合性チェック(金額の合計が合っているか、必須フィールドが埋まっているかなど)を行い、最終的にCSVやJSONなど指定の形式で出力します。

コード構成の例

投稿で紹介されている構成をもとにした、エージェント呼び出しのイメージは以下の通りです。

# メインエージェントからサブエージェントを呼び出すイメージ
import anthropic

client = anthropic.Anthropic()

def process_invoice(invoice_path: str) -> dict:
    """1件の請求書を処理するサブエージェント相当の関数"""
    with open(invoice_path, "rb") as f:
        content = f.read()

    message = client.messages.create(
        model="claude-opus-4-5",  # ※使用モデルはソースに明記なし。環境に合わせて変更してください
        max_tokens=1024,
        messages=[
            {
                "role": "user",
                "content": f"以下の請求書データから、取引先名・日付・金額・品目を抽出してJSONで返してください。\n\n{content.decode('utf-8', errors='replace')}"
            }
        ]
    )
    return message.content[0].text

# オーケストレーター側: 複数ファイルを順番に(または並列に)処理
invoice_files = ["invoice_001.txt", "invoice_002.txt"]  # 実際はリスト全体を渡す
results = [process_invoice(f) for f in invoice_files]

※上記コードはソースの構成説明をもとにした参考例です。実際のサブエージェント並列化にはスレッド処理やキュー管理の追加が必要になる場合があります(一般的な実装として)。

1日2,000件を実現するための工夫

投稿によれば、大量処理を安定させるために以下の点が重視されています。

  • バッチ(まとめ処理)サイズの調整: 一度に投げる請求書数を適切に区切ることで、APIのレート制限(1分間あたりの呼び出し上限)に引っかかりにくくする
  • エラー時の自動リトライ: 読み取りに失敗した請求書は、オーケストレーターが検知して再処理キューに戻す
  • 出力の検証ステップを必ず挟む: AIが抽出したデータをそのまま使うのではなく、必須フィールドの有無や数値の妥当性を確認するステップを自動で入れる

既存ユーザーへの影響と対応

APIコストへの注意

1日2,000件の処理となると、Anthropic APIの利用コストが積み上がります。特に大きなファイルや長い請求書テキストを1件ずつ送る場合、トークン数(AIが読み取る文字数の単位)が多くなるため、処理前にテキストの前処理(不要な空白や記号の除去)を行うことでコストを抑えられる可能性があります。

レート制限への対応

Anthropic APIにはプランごとに呼び出し回数・トークン数の上限があります。大量処理を行う場合は、公式ドキュメントでレート制限を確認し、必要に応じてEnterprise(大企業向け)プランへの移行や、上限引き上げ申請を検討することになるでしょう(※プラン詳細は公式サイトで要確認)。

データの取り扱いに注意

請求書には取引先名・金額・振込先など機密性の高い情報が含まれます。Claude APIに送信する前に、自社のデータ管理ポリシーや取引先との契約内容を確認することが大切です。


試し方(手順)

前提

  • Python 3.9以上がインストールされていること
  • Anthropic APIキーを取得済みであること

手順

# 1. Anthropicライブラリをインストール
pip install anthropic

# 2. APIキーを環境変数に設定
export ANTHROPIC_API_KEY="your_api_key_here"
# 3. 最小限の動作確認スクリプト
import anthropic

client = anthropic.Anthropic()

sample_invoice_text = """
請求書
取引先: 株式会社サンプル
日付: 2026-04-20
品目: Webシステム開発費
金額: 500,000円
"""

message = client.messages.create(
    model="claude-opus-4-5",  # ※モデル名はソースに明記なし。利用可能なモデルに置き換えてください
    max_tokens=512,
    messages=[
        {
            "role": "user",
            "content": f"以下の請求書から情報を抽出し、JSONで返してください。\n{sample_invoice_text}"
        }
    ]
)

print(message.content[0].text)
# 4. 実行
python invoice_agent.py

出力例(AIの返答):

{
  "取引先": "株式会社サンプル",
  "日付": "2026-04-20",
  "品目": "Webシステム開発費",
  "金額": 500000
}

小規模なテストで動作を確認してから、バッチ処理へ拡張していくのが安全です。


関連リンク

参考ソース