次のようなスキーマ、`AgentConfig`、`SystemPromptGenerator`、プロバイダークライアント、履歴、フック、およびオプションのコンテキストプロバイダーを使って、`AtomicAgent[InSchema, OutSchema]`を構築し、配線する(つまり、各種コンポーネント同士を接続して動作するようにする)。 次のような場合に使用: ユーザーが「エージェントを作成する」「別のエージェントを追加する」「`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`.
エージェントとは、ある BaseIOSchema から別の BaseIOSchema へ変換を行う、LLM を基盤としたトランスフォーマーです。
作成手順は次のとおりです: スキーマの設計 → システムプロンプトの記述 → プロバイダークライアントの接続 → AgentConfig の構築 → AtomicAgent[In, Out] のインスタンス化。
ストリーミング・トークンカウント・フック・マルチエージェントメモリなどの詳細については、../framework/references/agents.md および providers.md、prompts.md、memory.md を参照してください。
このスキルは、実践的な手順を示します: 明確化 → 実装 → 実行。
framework スキルの使い分けframework スキル: Atomic Agents 全般に関する質問、またはエージェントの作成以外の作業を行う場合。以下の項目を一度のメッセージでまとめて確認します:
background の記述になります。BasicChatInputSchema / BasicChatOutputSchema を使用します。構造化されたもの(抽出・分類・計画・ルーティングなど)にはカスタムペアを使用します。カスタムの場合は、スキーマ作成のために create-atomic-schema スキルに分岐します。ChatHistory を接続します。No(シングルショットのトランスフォーマー)→ ステートレスな動作のために省略します。create-atomic-context-provider スキルも使用する計画を立てます。コンテキスト上で既に決まっている項目はスキップします。
以下の内容を簡潔なブロックで提示します:
<project>/agents/<agent_name>.py(小規模プロジェクトでは直接 main.py — ../framework/references/project-structure.md 参照)。gpt-5-mini、Anthropic claude-haiku-4-5、Groq llama-3.3-70b-versatile、Ollama llama3.1、Gemini gemini-2.5-flash。SystemPromptGenerator の内容 — 3つのセクション: background、steps、output_instructions。from atomic_agents import (
AtomicAgent, AgentConfig,
BasicChatInputSchema, BasicChatOutputSchema,
)
from atomic_agents.context import ChatHistory, SystemPromptGenerator
from instructor import Mode
プロバイダーごとの詳細な対応表は ../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 クラス属性には依存しないこと。
model_api_parameters に max_tokens がない → すべての呼び出しが API に拒否される。assistant_role="model" がない → 毎ターン、ロールの不一致が発生する。Mode.TOOLS を使用 → プロバイダーが受け付けない形式でツールがフォーマットされる。Mode.JSON に切り替えること。system_role=None と model_api_parameters 内の reasoning_effort が必要。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 を参照してください。
ユーザーに以下を伝えます:
agent.run(...) の呼び出し方(必要に応じて run_async、run_stream、run_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 ファクトリーのモードと合っていない。assistant_role="assistant" を指定する → 必ず "model" にすること。max_tokens が欠落している → すべての呼び出しが失敗する。ChatHistory を無制限にする → agent.get_context_token_count().utilization を監視するか、max_messages を設定すること。ストリーミング・非同期処理・トークンカウント・フック・マルチエージェント履歴などの詳細は、../framework/references/agents.md を参照してください。
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.
framework skillframework skill: questions about Atomic Agents in general, or the user is doing something other than authoring an agent.Bundle into one message:
background line.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.ChatHistory. No (single-shot transformer) → omit it for stateless behavior.create-atomic-context-provider skill afterwards.Skip anything already settled in context.
State the plan in one short block:
<project>/agents/<agent_name>.py (or directly in main.py for a tiny project — see ../framework/references/project-structure.md).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.from atomic_agents import (
AtomicAgent, AgentConfig,
BasicChatInputSchema, BasicChatOutputSchema,
)
from atomic_agents.context import ChatHistory, SystemPromptGenerator
from instructor import Mode
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
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},
)
)
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.
max_tokens in model_api_parameters → API rejects every call.assistant_role="model" → role mismatch on every turn.Mode.TOOLS → tools formatted in a way the provider does not accept; flip to Mode.JSON.system_role=None and reasoning_effort in model_api_parameters.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.
Tell the user:
agent.run(...) (and run_async, run_stream, run_async_stream when appropriate).create-atomic-tool skill.create-atomic-context-provider skill.create-atomic-schema skill.../framework/references/orchestration.md.../framework/references/hooks.md.../framework/references/memory.md.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".max_tokens on Anthropic — every call fails.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 による自動翻訳です。