🤖create-atomic-agent
- プラグイン
- atomic-agents
- ソース
- GitHub で見る ↗
説明
`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.md、prompts.md、memory.md を参照してください。
このスキルは、実践的な手順を示します: 明確化 → 実装 → 実行。
このスキルと汎用 framework スキルの使い分け
- このスキル: 特定のエージェントを作成・接続する場合 — 「プランナーエージェントを追加したい」「Q&A エージェントを作りたい」「チケットを分類するルーターを作りたい」など。
frameworkスキル: Atomic Agents 全般に関する質問、またはエージェントの作成以外の作業を行う場合。
フェーズ 1 — 明確化
以下の項目を一度のメッセージでまとめて確認します:
- エージェントは何をすべきか? 一文で説明してください。ペルソナ /
backgroundの記述になります。 - 入力と出力。 自由形式のチャットには
BasicChatInputSchema/BasicChatOutputSchemaを使用します。構造化されたもの(抽出・分類・計画・ルーティングなど)にはカスタムペアを使用します。カスタムの場合は、スキーマ作成のためにcreate-atomic-schemaスキルに分岐します。 - プロバイダー。 OpenAI / Anthropic / Groq / Ollama / Gemini / OpenRouter / MiniMax。デフォルト: プロジェクトで既に使用しているもの、なければ OpenAI。
- 会話型か? Yes →
ChatHistoryを接続します。No(シングルショットのトランスフォーマー)→ ステートレスな動作のために省略します。 - コンテキストプロバイダー。 実行時にプロンプトへ注入するもの(現在時刻・ユーザー情報・取得済みドキュメントなど)はありますか?ある場合は、後で
create-atomic-context-providerスキルも使用する計画を立てます。
コンテキスト上で既に決まっている項目はスキップします。
フェーズ 2 — 計画
以下の内容を簡潔なブロックで提示します:
- ファイル:
<project>/agents/<agent_name>.py(小規模プロジェクトでは直接main.py—../framework/references/project-structure.md参照)。 - スキーマ: 使用するペアと配置場所。
- プロバイダー + モデル + Instructor モード。 デフォルトモデル: OpenAI
gpt-5-mini、Anthropicclaude-haiku-4-5、Groqllama-3.3-70b-versatile、Ollamallama3.1、Geminigemini-2.5-flash。 SystemPromptGeneratorの内容 — 3つのセクション:background、steps、output_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 クラス属性には依存しないこと。
プロバイダー固有の設定(よくあるはまりどころ)
- Anthropic で
model_api_parametersにmax_tokensがない → すべての呼び出しが API に拒否される。 - Gemini で
assistant_role="model"がない → 毎ターン、ロールの不一致が発生する。 - Groq / Ollama / MiniMax で
Mode.TOOLSを使用 → プロバイダーが受け付けない形式でツールがフォーマットされる。Mode.JSONに切り替えること。 - 推論モデル(o シリーズ、GPT-5 推論バリアント)→ 多くの場合、
system_role=Noneとmodel_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_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 ファクトリーのモードと合っていない。- 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".
frameworkskill: questions about Atomic Agents in general, or the user is doing something other than authoring an agent.
Phase 1 — Clarify
Bundle into one message:
- What should the agent do? One sentence. Becomes the persona /
backgroundline. - Inputs and outputs. Use
BasicChatInputSchema/BasicChatOutputSchemafor free-form chat. Use a custom pair for anything structured (extraction, classification, planning, routing). When custom, branch to thecreate-atomic-schemaskill for the schema authoring. - Provider. OpenAI / Anthropic / Groq / Ollama / Gemini / OpenRouter / MiniMax. Default: whatever the project already uses; otherwise OpenAI.
- Conversational? Yes → wire a
ChatHistory. No (single-shot transformer) → omit it for stateless behavior. - 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-providerskill 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 inmain.pyfor 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, Anthropicclaude-haiku-4-5, Groqllama-3.3-70b-versatile, Ollamallama3.1, Geminigemini-2.5-flash. SystemPromptGeneratorcontent — 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_tokensinmodel_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 toMode.JSON. - Reasoning models (o-series, GPT-5 reasoning variants) → often want
system_role=Noneandreasoning_effortinmodel_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(...)(andrun_async,run_stream,run_async_streamwhen appropriate). - Which env var to set for the provider key.
- Optional next steps:
- Tools the agent should be able to invoke →
create-atomic-toolskill. - Dynamic data injected into the prompt →
create-atomic-context-providerskill. - Custom schemas →
create-atomic-schemaskill. - 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.
- Tools the agent should be able to invoke →
Anti-patterns
- Forgetting to wrap the client with
instructor.from_*— structured outputs silently stop working. BaseModelinstead ofBaseIOSchemafor the agent's input or output type.AgentConfig.modeout of sync with the Instructor factory mode.assistant_role="assistant"on Gemini — must be"model".- Missing
max_tokenson Anthropic — every call fails. - Hardcoded API keys in the source — read from env.
- Unbounded
ChatHistoryin a long-running service — monitoragent.get_context_token_count().utilizationor setmax_messages.
For deep material — streaming, async, token counting, hooks, multi-agent history — load ../framework/references/agents.md.
原文・著作権は Anthropic および各プラグイン作者に帰属します。日本語訳は Claude API による自動翻訳です。