claude-skills/

Anthropic公式スキル・プラグインの日本語ディレクトリ

last sync 22h ago
スキルOfficialdevelopment

🤖create-atomic-agent

プラグイン
atomic-agents

説明

`AtomicAgent[InSchema, OutSchema]` を構築・結線します。対象となる要素は、スキーマ、`AgentConfig`、`SystemPromptGenerator`、プロバイダークライアント、履歴管理、フック、オプションのコンテキストプロバイダーです。 次のような場合に使用: - ユーザーが「エージェントを作成して」「別のエージェントを追加して」「`AtomicAgent` を構築して」「エージェントを結線して」「プランナー/ルーター/エクストラクターエージェントを作って」と依頼したとき - `/atomic-agents:create-atomic-agent` を実行したとき

原文を表示

Build and wire an `AtomicAgent[InSchema, OutSchema]` — schemas, `AgentConfig`, `SystemPromptGenerator`, provider client, history, hooks, optional context providers. Use when the user asks to "create an agent", "add another agent", "build an `AtomicAgent`", "wire up an agent", "make a planner/router/extractor agent", or runs `/atomic-agents:create-atomic-agent`.

ユースケース

  • AtomicAgentを構築・結線する
  • エージェントを新規作成する
  • 別のエージェントを追加する
  • プランナー/ルーター/エクストラクターを作成する

本文(日本語訳)

Atomic Agent の作成

エージェントとは、ある BaseIOSchema から別の BaseIOSchema へ変換を行う、LLM を基盤としたトランスフォーマーです。 作成手順は次のとおりです: スキーマの設計 → システムプロンプトの記述 → プロバイダークライアントの接続 → AgentConfig の構築 → AtomicAgent[In, Out] のインスタンス化。

ストリーミング・トークンカウント・フック・マルチエージェントメモリなどの詳細については、../framework/references/agents.md および providers.mdprompts.mdmemory.md を参照してください。 このスキルは、実践的な手順を示します: 明確化 → 実装 → 実行。


このスキルと汎用 framework スキルの使い分け

  • このスキル: 特定のエージェントを作成・接続する場合 — 「プランナーエージェントを追加したい」「Q&A エージェントを作りたい」「チケットを分類するルーターを作りたい」など。
  • framework スキル: Atomic Agents 全般に関する質問、またはエージェントの作成以外の作業を行う場合。

フェーズ 1 — 明確化

以下の項目を一度のメッセージでまとめて確認します:

  1. エージェントは何をすべきか? 一文で説明してください。ペルソナ / background の記述になります。
  2. 入力と出力。 自由形式のチャットには BasicChatInputSchema / BasicChatOutputSchema を使用します。構造化されたもの(抽出・分類・計画・ルーティングなど)にはカスタムペアを使用します。カスタムの場合は、スキーマ作成のために create-atomic-schema スキルに分岐します。
  3. プロバイダー。 OpenAI / Anthropic / Groq / Ollama / Gemini / OpenRouter / MiniMax。デフォルト: プロジェクトで既に使用しているもの、なければ OpenAI。
  4. 会話型か? Yes → ChatHistory を接続します。No(シングルショットのトランスフォーマー)→ ステートレスな動作のために省略します。
  5. コンテキストプロバイダー。 実行時にプロンプトへ注入するもの(現在時刻・ユーザー情報・取得済みドキュメントなど)はありますか?ある場合は、後で create-atomic-context-provider スキルも使用する計画を立てます。

コンテキスト上で既に決まっている項目はスキップします。


フェーズ 2 — 計画

以下の内容を簡潔なブロックで提示します:

  • ファイル: <project>/agents/<agent_name>.py(小規模プロジェクトでは直接 main.py../framework/references/project-structure.md 参照)。
  • スキーマ: 使用するペアと配置場所。
  • プロバイダー + モデル + Instructor モード。 デフォルトモデル: OpenAI gpt-5-mini、Anthropic claude-haiku-4-5、Groq llama-3.3-70b-versatile、Ollama llama3.1、Gemini gemini-2.5-flash
  • SystemPromptGenerator の内容 — 3つのセクション: backgroundstepsoutput_instructions
  • 履歴・フック・コンテキストプロバイダーの有無。

フェーズ 3 — 実装

標準インポート(変更しないこと)

from atomic_agents import (
    AtomicAgent, AgentConfig,
    BasicChatInputSchema, BasicChatOutputSchema,
)
from atomic_agents.context import ChatHistory, SystemPromptGenerator
from instructor import Mode

プロバイダークライアントの接続(常に Instructor でラップする)

プロバイダーごとの詳細な対応表は ../framework/references/providers.md にあります。主要なものの概要:

# OpenAI — デフォルトモードは Mode.TOOLS
import os, instructor, openai
client = instructor.from_openai(openai.OpenAI(api_key=os.environ["OPENAI_API_KEY"]))
model = "gpt-5-mini"
api_params: dict = {}

# Anthropic — Mode.TOOLS、model_api_parameters に max_tokens が必須
import anthropic
client = instructor.from_anthropic(anthropic.Anthropic(api_key=os.environ["ANTHROPIC_API_KEY"]))
model = "claude-haiku-4-5"
api_params = {"max_tokens": 4096}

# Gemini — Mode.GENAI_TOOLS、assistant_role="model"
from google import genai
client = instructor.from_genai(genai.Client(api_key=os.environ["GEMINI_API_KEY"]), mode=Mode.GENAI_TOOLS)
model = "gemini-2.5-flash"
api_params = {}

# Groq / Ollama / MiniMax — ファクトリーと AgentConfig の両方で Mode.JSON を使用

エージェントの構築

from atomic_agents import AtomicAgent, AgentConfig
from atomic_agents.context import ChatHistory, SystemPromptGenerator

agent = AtomicAgent[MyInput, MyOutput](
    config=AgentConfig(
        client=client,
        model=model,
        history=ChatHistory(),  # ステートレスの場合は省略
        system_prompt_generator=SystemPromptGenerator(
            background=["You are a concise research assistant."],
            steps=[
                "Read the question carefully.",
                "Decide what minimum information answers it.",
                "Produce the answer in the required schema.",
            ],
            output_instructions=[
                "Reply under 100 words.",
                "If unsure, set status='error' and explain why.",
            ],
        ),
        # プロバイダー固有の設定 — Instructor ファクトリーと合わせること
        # mode=Mode.TOOLS,                         # OpenAI / Anthropic / OpenRouter
        # mode=Mode.JSON,                          # Groq / Ollama / MiniMax
        # mode=Mode.GENAI_TOOLS, assistant_role="model",  # Gemini
        model_api_parameters=api_params or {"temperature": 0.2},
    )
)

ジェネリクスが型の真実を保持する

AtomicAgent[MyInput, MyOutput] — 型パラメーターを必ず明示的に記述してください。 フレームワークはクラス定義時にこれらを読み取ります。 サブクラスレベルの input_schema / output_schema クラス属性には依存しないこと

プロバイダー固有の設定(よくあるはまりどころ)

  • Anthropicmodel_api_parametersmax_tokens がない → すべての呼び出しが API に拒否される。
  • Geminiassistant_role="model" がない → 毎ターン、ロールの不一致が発生する。
  • Groq / Ollama / MiniMaxMode.TOOLS を使用 → プロバイダーが受け付けない形式でツールがフォーマットされる。Mode.JSON に切り替えること。
  • 推論モデル(o シリーズ、GPT-5 推論バリアント)→ 多くの場合、system_role=Nonemodel_api_parameters 内の reasoning_effort が必要。

フェーズ 4 — 実行と検証

out = agent.run(MyInput(...))
print(out)

実際の API 呼び出しを行わない簡易スモークテスト:

uv run python -c "from <project>.agents.<agent_name> import agent; print(type(agent).__name__, '->', agent.input_schema.__name__, '/', agent.output_schema.__name__)"

出力バリデーションが繰り返し失敗する場合は、parse:error フックに詳細が記録されています — 登録方法は ../framework/references/hooks.md を参照してください。


フェーズ 5 — 引き渡し

ユーザーに以下を伝えます:

  • agent.run(...) の呼び出し方(必要に応じて run_asyncrun_streamrun_async_stream も含む)。
  • プロバイダーキーに設定すべき環境変数名。
  • オプションの次のステップ:
    • エージェントが呼び出せるツール → create-atomic-tool スキル。
    • プロンプトへの動的データの注入 → create-atomic-context-provider スキル。
    • カスタムスキーマ → create-atomic-schema スキル。
    • 複数エージェントの連携 → ../framework/references/orchestration.md
    • テレメトリ・リトライ・ロギング → ../framework/references/hooks.md
    • 会話の永続化・要約・マルチエージェントメモリ → ../framework/references/memory.md

アンチパターン

  • クライアントを instructor.from_* でラップし忘れる → 構造化出力が暗黙的に動作しなくなる。
  • エージェントの入出力型に BaseIOSchema ではなく BaseModel を使用する。
  • AgentConfig.mode が Instructor ファクトリーのモードと合っていない。
  • Gemini で assistant_role="assistant" を指定する → 必ず "model" にすること。
  • Anthropic で max_tokens が欠落している → すべての呼び出しが失敗する。
  • API キーをソースコードにハードコードする → 環境変数から読み取ること。
  • 長時間稼働するサービスで ChatHistory を無制限にする → agent.get_context_token_count().utilization を監視するか、max_messages を設定すること。

ストリーミング・非同期処理・トークンカウント・フック・マルチエージェント履歴などの詳細は、../framework/references/agents.md を参照してください。

原文(English)を表示

Create an Atomic Agent

An agent is an LLM-backed transformer from one BaseIOSchema to another. Building one means: design the schemas, write the system prompt, wire the provider client, build the AgentConfig, instantiate AtomicAgent[In, Out].

For deep material (streaming, token counting, hooks, multi-agent memory), the authority is ../framework/references/agents.md plus providers.md, prompts.md, and memory.md. This skill is the action-oriented path: clarify → write → run.

When this fires vs the umbrella framework skill

  • This skill: the user is creating or wiring a specific agent — "add a planner agent", "build a Q&A agent", "make a router that classifies tickets".
  • framework skill: questions about Atomic Agents in general, or the user is doing something other than authoring an agent.

Phase 1 — Clarify

Bundle into one message:

  1. What should the agent do? One sentence. Becomes the persona / background line.
  2. Inputs and outputs. Use BasicChatInputSchema / BasicChatOutputSchema for free-form chat. Use a custom pair for anything structured (extraction, classification, planning, routing). When custom, branch to the create-atomic-schema skill for the schema authoring.
  3. Provider. OpenAI / Anthropic / Groq / Ollama / Gemini / OpenRouter / MiniMax. Default: whatever the project already uses; otherwise OpenAI.
  4. Conversational? Yes → wire a ChatHistory. No (single-shot transformer) → omit it for stateless behavior.
  5. Context providers. Anything to inject into the prompt at runtime (current time, user identity, retrieved docs)? If yes, plan to also use the create-atomic-context-provider skill afterwards.

Skip anything already settled in context.

Phase 2 — Plan

State the plan in one short block:

  • File: <project>/agents/<agent_name>.py (or directly in main.py for a tiny project — see ../framework/references/project-structure.md).
  • Schemas: which pair, where they live.
  • Provider + model + Instructor mode. Default models: OpenAI gpt-5-mini, Anthropic claude-haiku-4-5, Groq llama-3.3-70b-versatile, Ollama llama3.1, Gemini gemini-2.5-flash.
  • SystemPromptGenerator content — three sections: background, steps, output_instructions.
  • History? Hooks? Context providers?

Phase 3 — Implement

Canonical imports (do not deviate)

from atomic_agents import (
    AtomicAgent, AgentConfig,
    BasicChatInputSchema, BasicChatOutputSchema,
)
from atomic_agents.context import ChatHistory, SystemPromptGenerator
from instructor import Mode

Wire the provider client (always Instructor-wrapped)

The full per-provider matrix lives in ../framework/references/providers.md. Quick recap:

# OpenAI — default mode is Mode.TOOLS
import os, instructor, openai
client = instructor.from_openai(openai.OpenAI(api_key=os.environ["OPENAI_API_KEY"]))
model = "gpt-5-mini"
api_params: dict = {}

# Anthropic — Mode.TOOLS, max_tokens REQUIRED in model_api_parameters
import anthropic
client = instructor.from_anthropic(anthropic.Anthropic(api_key=os.environ["ANTHROPIC_API_KEY"]))
model = "claude-haiku-4-5"
api_params = {"max_tokens": 4096}

# Gemini — Mode.GENAI_TOOLS, assistant_role="model"
from google import genai
client = instructor.from_genai(genai.Client(api_key=os.environ["GEMINI_API_KEY"]), mode=Mode.GENAI_TOOLS)
model = "gemini-2.5-flash"
api_params = {}

# Groq / Ollama / MiniMax — Mode.JSON in both factory and AgentConfig

Build the agent

from atomic_agents import AtomicAgent, AgentConfig
from atomic_agents.context import ChatHistory, SystemPromptGenerator

agent = AtomicAgent[MyInput, MyOutput](
    config=AgentConfig(
        client=client,
        model=model,
        history=ChatHistory(),  # omit for stateless
        system_prompt_generator=SystemPromptGenerator(
            background=["You are a concise research assistant."],
            steps=[
                "Read the question carefully.",
                "Decide what minimum information answers it.",
                "Produce the answer in the required schema.",
            ],
            output_instructions=[
                "Reply under 100 words.",
                "If unsure, set status='error' and explain why.",
            ],
        ),
        # Provider-specific knobs — match the Instructor factory
        # mode=Mode.TOOLS,                         # OpenAI / Anthropic / OpenRouter
        # mode=Mode.JSON,                          # Groq / Ollama / MiniMax
        # mode=Mode.GENAI_TOOLS, assistant_role="model",  # Gemini
        model_api_parameters=api_params or {"temperature": 0.2},
    )
)

Generics carry the truth

AtomicAgent[MyInput, MyOutput] — write the type parameters explicitly. The framework reads them at class-definition time. Do not rely on subclass-level input_schema / output_schema class attributes.

Provider-specific knobs (most common gotchas)

  • Anthropic without max_tokens in model_api_parameters → API rejects every call.
  • Gemini without assistant_role="model" → role mismatch on every turn.
  • Groq / Ollama / MiniMax with Mode.TOOLS → tools formatted in a way the provider does not accept; flip to Mode.JSON.
  • Reasoning models (o-series, GPT-5 reasoning variants) → often want system_role=None and reasoning_effort in model_api_parameters.

Phase 4 — Run and verify

out = agent.run(MyInput(...))
print(out)

Quick smoke test without paying for a real call:

uv run python -c "from <project>.agents.<agent_name> import agent; print(type(agent).__name__, '->', agent.input_schema.__name__, '/', agent.output_schema.__name__)"

If output validation fails repeatedly, the parse:error hook has the details — see ../framework/references/hooks.md for registration.

Phase 5 — Hand off

Tell the user:

  • How to call agent.run(...) (and run_async, run_stream, run_async_stream when appropriate).
  • Which env var to set for the provider key.
  • Optional next steps:
    • Tools the agent should be able to invoke → create-atomic-tool skill.
    • Dynamic data injected into the prompt → create-atomic-context-provider skill.
    • Custom schemas → create-atomic-schema skill.
    • Multiple agents working together → ../framework/references/orchestration.md.
    • Telemetry / retries / logging → ../framework/references/hooks.md.
    • Conversation persistence, summarization, multi-agent memory → ../framework/references/memory.md.

Anti-patterns

  • Forgetting to wrap the client with instructor.from_* — structured outputs silently stop working.
  • BaseModel instead of BaseIOSchema for the agent's input or output type.
  • AgentConfig.mode out of sync with the Instructor factory mode.
  • assistant_role="assistant" on Gemini — must be "model".
  • Missing max_tokens on Anthropic — every call fails.
  • Hardcoded API keys in the source — read from env.
  • Unbounded ChatHistory in a long-running service — monitor agent.get_context_token_count().utilization or set max_messages.

For deep material — streaming, async, token counting, hooks, multi-agent history — load ../framework/references/agents.md.

原文・著作権は Anthropic および各プラグイン作者に帰属します。日本語訳は Claude API による自動翻訳です。