コンテンツにスキップ

1. 分析レポートエージェント

データを分析して、スライド(PPTX)のレポートを作ってくれるエージェントを作ります。uvと認証のセットアップは3. SDKでエージェントを作成と同じ前提で、このページ用に新しいプロジェクトを作って進めます。

このページでは、Managed Agentsの次の要素を新しく使います。

要素役割
ビルトインツール(agent_toolset)サンドボックス内でbash・ファイル操作・Web検索などを実行するツール一式
環境のpackagesサンドボックスにaptやpip、npmのパッケージを事前インストールする設定
スキル(skills)ドキュメント作成などの専門ワークフローをエージェントに教える仕組み
セッションアウトプットエージェントが/mnt/session/outputs/に保存したファイルを手元にダウンロードする仕組み

プロジェクトを作成し、そのフォルダーに移動して、Claude SDKをインストールします。

Terminal window
uv init report-agent
cd report-agent
uv add anthropic
  1. プロジェクトのフォルダーにsetup_report.pyを作成し、以下の内容を保存します。

    setup_report.py
    import json
    from anthropic import Anthropic
    client = Anthropic()
    ###############################
    # 1. 環境を作成(pptxスキルの依存関係を事前インストール)
    ###############################
    environment = client.beta.environments.create(
    name="Report-environment-adv",
    config={
    "type": "cloud",
    "packages": {
    "apt": ["libreoffice-impress", "poppler-utils", "fonts-noto-cjk"],
    "pip": ["markitdown[pptx]", "Pillow"],
    "npm": ["pptxgenjs"],
    },
    "networking": {"type": "unrestricted"},
    },
    )
    print(f"environment: {environment.id}")
    ###############################
    # 2. エージェントを作成(ビルトインツール一式 + pptxスキル)
    ###############################
    agent = client.beta.agents.create(
    name="Report Agent ADV",
    model="claude-sonnet-5",
    description="データ分析とスライドレポート作成を行うエージェント。",
    system="あなたはデータ分析とレポート作成のアシスタントです。分析にはサンドボックスのbashとPythonを使い、スライドの作成にはpptxスキルに従ってください。成果物は必ず /mnt/session/outputs/ に保存してください。日本語で応答してください。",
    tools=[{"type": "agent_toolset_20260401", "default_config": {"enabled": True}}],
    skills=[{"type": "anthropic", "skill_id": "pptx"}],
    )
    print(f"agent: {agent.id}")
    with open("ids_report.json", "w") as f:
    json.dump({"environment_id": environment.id, "agent_id": agent.id}, f, indent=2)
    print("IDをids_report.jsonに保存しました")

    設定のポイントは3つです。

    • packages ・・・ pptxスキルの定義が必要とする依存関係(LibreOffice、Poppler、markitdown、pptxgenjs)と日本語フォントを事前インストールしています。apt・cargo・gem・go・npm・pipに対応し、同じ環境を使うセッション間でキャッシュされます
    • agent_toolset_20260401 ・・・ bash、read/write/edit、glob/grep、Web検索・取得というビルトインツールの一式です。これまでのMCPツールと違い、サンドボックスの中で実行されます
    • skills ・・・ Anthropicが提供する事前構築スキル(pptxのほかxlsxdocxpdf)は、skill_idを書くだけで使えます
  2. スクリプトを実行します。

    Terminal window
    uv run setup_report.py
  1. プロジェクトのフォルダーにreport.pyを作成し、以下の内容を保存します。

    report.py
    import json
    import pathlib
    from anthropic import Anthropic
    client = Anthropic()
    with open("ids_report.json") as f:
    ids = json.load(f)
    # セッションを作成
    session = client.beta.sessions.create(
    agent=ids["agent_id"],
    environment_id=ids["environment_id"],
    )
    print(f"session: {session.id}")
    # ストリームを開いてからタスクを送信
    stream = client.beta.sessions.events.stream(session_id=session.id)
    client.beta.sessions.events.send(
    session.id,
    events=[
    {
    "type": "user.message",
    "content": [
    {
    "type": "text",
    "text": (
    "架空のたこ焼き店の1年分の月別売上データ(販売数と売上金額)をCSVで作成し、"
    "傾向を分析してください。その結果を、タイトル・売上推移グラフ・分析まとめの"
    "3枚のスライドからなる日本語のPPTXレポートにして、"
    "/mnt/session/outputs/report.pptx に保存してください。"
    ),
    }
    ],
    }
    ],
    )
    print("タスクを送信しました。完了まで数分かかります...\n")
    for event in stream:
    if event.type == "agent.tool_use":
    print(f"[ツール: {event.name}]")
    elif event.type == "agent.message":
    for block in event.content:
    if block.type == "text":
    print(block.text)
    elif event.type == "session.status_idle":
    if event.stop_reason.type != "requires_action":
    break
    elif event.type == "session.status_terminated":
    break
    stream.close()
    # 成果物をダウンロード
    print("\n成果物を確認しています...")
    files = client.beta.files.list(
    scope_id=session.id,
    betas=["managed-agents-2026-04-01"],
    )
    for f in files.data:
    print(f"- {f.filename} ({f.size_bytes} bytes)")
    content = client.beta.files.download(f.id)
    out = pathlib.Path(f.filename).name
    content.write_to_file(out)
    print(f" -> {out} に保存しました")

    最後のブロックが成果物のダウンロードです。エージェントが/mnt/session/outputs/に保存したファイルは、Files APIでscope_idにセッションIDを指定すると一覧・ダウンロードできます。

  2. スクリプトを実行します。初回はサンドボックスの準備(LibreOfficeなどのインストール)とスライド作成で5〜10分ほどかかります。

    Terminal window
    uv run report.py
    session: sesn_016pxZpFV5ny8Wj14fU2wVgD
    タスクを送信しました。完了まで数分かかります...
    [ツール: bash]
    良いデータができました。次に分析を行います。
    [ツール: bash]
    pptxgenjsが利用可能です。たこ焼き店にふさわしいカラーパレットでスライドを作成します。
    [ツール: write]
    [ツール: bash]
    コンテンツQAとビジュアルQAを実施します。
    ...
    線グラフの補間(lineSmooth)がデータを誇張している点と、スライド3の金色テキストのコントラストが弱い点を修正します。
    [ツール: edit]
    ...
    以下の成果物を作成しました。
    ...
    成果物を確認しています...
    - report.pptx (26240 bytes)
    -> report.pptx に保存しました
    - takoyaki_monthly_sales.csv (344 bytes)
    -> takoyaki_monthly_sales.csv に保存しました
  3. ダウンロードされたreport.pptxをPowerPointなどで開いて、仕上がりを確認してみましょう。

  • 環境のpackagesで、apt・pip・npmのパッケージをサンドボックスに事前インストールできます(同じ環境を使うセッション間でキャッシュされます)。
  • ビルトインツール(agent_toolset)を有効にすると、エージェントがサンドボックス内でbashやファイル操作を実行できます。
  • スキルskill_idを書くだけで、スライド作成のような専門ワークフローをエージェントに教えられます。
  • エージェントが/mnt/session/outputs/に保存した成果物は、Files APIにscope_id(セッションID)を指定して一覧・ダウンロードできます。

おつかれさまでした!ここまでの感想を、ぜひXにポストしてください。

感想をXにポストする