マルチエージェントシステムの統合と受け入れ検証契約¶
このテンプレートは、「複数の Agent を呼び出せる」段階から「1 つのシステムとしてリリースできる」段階へ進めるために使用します。ビジネス Owner、Agent プラットフォーム、ドメインチーム、セキュリティ、SRE、評価責任者が共同で記入することを推奨します。
すべての項目を一度に埋める必要はありません。まず、実際の垂直業務フローを 1 つ選び、契約と受け入れ検証エビデンスを確立してから、チームと能力を拡張します。
1. ドキュメントのメタデータ¶
document:
system_id: ""
version: "0.1.0"
status: draft
owner: ""
reviewers:
business: ""
architecture: ""
security: ""
sre: ""
created_at: ""
updated_at: ""
related_adrs: []
repositories: []
2. システムミッション¶
mission:
user_problem: ""
target_users: []
business_outcome: ""
in_scope:
- ""
out_of_scope:
- ""
forbidden_outcomes:
- unauthorized_side_effect
- cross_tenant_data_access
success_definition:
- ""
必ず次の問いに答えてください。
- なぜ決定論的ワークフローではないのですか。
- なぜ単一 Agent ではないのですか。
- マルチエージェントによる効果を評価できますか。
- 単一 Agent または読み取り専用モードに縮退した場合でも、どのビジネス価値が維持されますか。
3. レイヤー分割の判断¶
| 判断軸 | エビデンス | 独立した境界が必要か | Owner |
|---|---|---|---|
| ドメインエンティティとルール | |||
| データとテナント | |||
| ツールと副作用 | |||
| 権限と承認 | |||
| スケーリングとデプロイ | |||
| リリースライフサイクル | |||
| 障害影響範囲 | |||
| レイテンシ予算 |
architecture_decision:
selected_shape: single_agent | deterministic_workflow | hierarchical_multi_agent
reasons: []
rejected_options: []
expected_benefits: []
added_costs: []
rollback_shape: ""
4. レイヤー/チームレジストリ¶
| レイヤー/チーム | 担当すること | 明示的に担当しないこと | 入力契約 | 出力契約 | デプロイ Owner |
|---|---|---|---|---|---|
| Access API | |||||
| Central Supervisor | |||||
| Team Supervisor A | |||||
| Worker A1 | |||||
| MCP Server A |
境界テスト:
- Central Supervisor はビジネスデータベースへ直接アクセスしません。
- Team Supervisor はユーザーまたは親タスクの Scope を拡大しません。
- Worker は名前付き能力のみを実行します。
- Tool は自由形式のビジネス目標を解釈しません。
- 計画、認可、実行、受け入れ検証を 1 つの Prompt に集中させません。
5. 能力契約¶
5.1 A2A AgentCard の出所¶
agent_card_source:
agent_name: ""
discovery_url_ref: ""
protocol_versions: ["1.0"]
interfaces: []
signature:
required: true
verified: false
key_ref: ""
access:
public_card: false
extended_card_requires_auth: true
owner: ""
last_reviewed_at: ""
5.2 内部能力スナップショット¶
capability_snapshot:
snapshot_id: ""
derived_from_agent_card_digest: ""
generated_at: ""
expires_at: ""
filters:
tenant: ""
environment: ""
purpose: ""
risk_ceiling: ""
skills:
- skill_id: ""
input_schema: ""
artifact_schema: ""
risk: read_only | reversible | high_impact
latency_slo_ms: 0
required_scopes: []
approval_policy: ""
rejected_skills: []
検証:
- 能力スナップショットは AgentCard をそのまま複製したものではありません。
- Planner に渡すフィールドは最小化されています。
- Card に静的な Secret は含まれていません。
- Endpoint、バージョン、署名、ヘルス状態は Dispatch 時に再確認されます。
6. Goal 契約¶
goal:
goal_id: ""
owner_subject: ""
tenant_id: ""
purpose: ""
natural_language_request_ref: ""
structured_outputs: []
constraints: []
forbidden_actions: []
evidence_requirements: []
completion_criteria: []
max_risk: ""
deadline: ""
不変条件:
- Goal の作成後、下流で暗黙的に書き換えてはなりません。
- 禁止アクションは Prompt 内だけでなく、構造化フィールドにも格納します。
- Goal を改訂するたびに、バージョンとイベントを生成します。
7. 実行計画契約¶
plan:
plan_id: ""
version: 1
goal_id: ""
generated_by: ""
validated_by: ""
steps:
- id: ""
team: ""
skill: ""
depends_on: []
input_map: {}
required: true
side_effect: none
risk: read_only
estimated_cost: 0
minimum_runtime_ms: 0
contract_version: ""
join:
strategy: ""
required_steps: []
optional_steps: []
budget:
max_steps: 0
max_model_tokens: 0
max_tool_calls: 0
max_concurrency: 0
deadline_ms: 0
7.1 Plan Validator¶
- Schema が有効です。
- Step ID が一意です。
- Team / Skill が存在します。
- プロトコルと契約のバージョンに互換性があります。
- 依存先が存在し、循環がありません。
- 必須入力をマッピングできます。
- 予算、並行実行数、Deadline が有効です。
- 各 Step の実効権限が有効です。
- 高リスクの Step に承認が宣言されています。
- Join はすべての結果ステータスを区別できます。
- Evidence Requirement を満たせます。
- Replan の回数に上限があります。
8. A2A Dispatch 契約¶
a2a_dispatch:
dispatch_id: ""
request_id: ""
goal_id: ""
plan_id: ""
plan_version: 1
step_id: ""
a2a_context_id: ""
a2a_task_id: ""
target_agent: ""
skill_id: ""
protocol_version: "1.0"
interface_binding: ""
message_schema: ""
artifact_schema: ""
subject:
user_id: ""
tenant_id: ""
delegation:
audience: ""
scopes: []
purpose: ""
issued_at: ""
expires_at: ""
nonce: ""
deadline: ""
trace_id: ""
受信側の検証:
- プロトコルのバージョンがサポートされています。
- 呼び出し元の ID が有効です。
- Audience が現在の Agent システムを指しています。
- Expiry の期限が切れていません。
- Nonce がリプレイされていません。
- Subject / Tenant が自然言語内だけでなく、構造化されています。
- Skill が存在し、現在利用できます。
- 受信側でリソースレベルの認可を再実行します。
- 下流の Scope は縮小のみ可能です。
- Task / Context の可視性が ACL に準拠しています。
9. MCP Tool 契約¶
mcp_tool:
tool_name: ""
server_id: ""
protocol_version: "2025-11-25"
input_schema: ""
output_schema: ""
description_digest: ""
side_effect: none | reversible | irreversible
required_scopes: []
resource_binding: []
purpose_allowlist: []
timeout_ms: 0
idempotency:
required: false
key_fields: []
retention: ""
expected_version:
required: false
field: ""
evidence:
source_field: ""
anchor_field: ""
observed_at_field: ""
task_support: forbidden | optional | required
approval_policy: ""
audit_event: ""
検証:
- Tool Description は権限を付与しません。
- パラメーターには構造化された Schema を使用します。
- Resource を Tenant にバインドします。
- Tool Result は State に取り込む前に検証します。
- 副作用には Idempotency と Expected Version を使用します。
- MCP Tasks を使用する前に Capability Negotiation を完了します。
- HTTP 認可は現在の MCP 認可フレームワークに準拠しています。
10. Result および Artifact 契約¶
result:
step_id: ""
plan_version: 1
status: completed | no_data | partial | degraded | blocked | failed | cancelled
data_schema: ""
artifact_refs: []
evidence_refs: []
warnings: []
missing_items: []
side_effects: []
trace_ref: ""
content_hash: ""
produced_at: ""
Artifact:
artifact:
artifact_id: ""
name: ""
media_type: ""
schema: ""
storage_ref: ""
content_hash: ""
classification: ""
tenant_id: ""
created_by_step: ""
retention: ""
ルール:
- A2A タスクの出力には Artifact を使用し、一時的な Message には依存しません。
-
completedには契約を完全に満たす Result があります。 -
no_dataとfailedを区別します。 -
partial/degradedには不足項目と影響を列挙します。 - Result には Plan Version と Hash を付与します。
- Artifact には不変の参照、分類、保持ポリシーがあります。
11. エビデンス契約¶
evidence:
evidence_id: ""
source_type: database_record | document_chunk | api_response | human_decision
source: ""
anchor: ""
source_version: ""
content_hash: ""
observed_at: ""
valid_time:
from: ""
to: ""
tenant_id: ""
classification: ""
allowed_claims: []
access_policy_ref: ""
artifact_ref: ""
検証:
- Anchor を再現可能な形で特定できます。
- Source Version / Hash を検証できます。
- Evidence の権限は Context に取り込まれた後も失われません。
- 高リスクの Claim にはすべて Evidence があります。
- 推論と事実を分離します。
12. 状態所有権カタログ¶
| フィールド/オブジェクト | 正規情報源 | 唯一の書き込み主体 | Reducer/マージ | 保持 | 復旧戦略 |
|---|---|---|---|---|---|
| Goal | |||||
| Plan | |||||
| StepResult | |||||
| Evidence | |||||
| Error | Append-only | ||||
| Budget | |||||
| Approval | |||||
| FinalAnswer |
システム不変条件:
- 完了した Step には Result または No Data が必ずあります。
- 強い依存関係が完了していない場合、下流を開始しません。
- Final Claim から Evidence までたどれます。
- 副作用から認可、承認、冪等キーまでたどれます。
- 古い Plan の Result が新しい Plan を汚染しません。
- 重複した Result の Hash が異なる場合は処理をブロックします。
13. Join 契約¶
join:
join_id: ""
required_steps: []
optional_steps: []
completion_rule: all_required_terminal
success_rule: all_required_completed
deadline: ""
on_required_no_data: ""
on_required_failure: ""
on_optional_failure: ""
on_timeout: ""
late_result_policy: record_but_do_not_merge
conflict_policy: block_and_escalate
テスト:
- Required は Success、Optional は Timeout。
- Required が No Data。
- Required が Failure。
- 同一 Hash の Duplicate。
- 異なる Hash の Duplicate。
- 古い Plan からの Late Result。
- Evidence の Conflict。
- Join 中の Cancel。
14. Context Graph Schema¶
14.1 ノード¶
| ノードタイプ | 必須フィールド | 正規情報源 | 保持期間 |
|---|---|---|---|
| Goal | |||
| Plan | |||
| Step | |||
| Agent | |||
| Tool | |||
| Result | |||
| Artifact | |||
| Evidence | |||
| Claim | |||
| Decision | |||
| Approval | |||
| Error |
14.2 エッジ¶
| エッジタイプ | 接続元 | 接続先 | 多重度 | 必須エビデンス |
|---|---|---|---|---|
| DECOMPOSED_INTO | Goal | Step | ||
| DEPENDS_ON | Step | Step | ||
| ROUTED_TO | Step | Agent | ||
| EXECUTED_BY | Step | Worker | ||
| CALLED | Worker | Tool | ||
| PRODUCED | Step | Artifact | ||
| SUPPORTS | Evidence | Claim | ||
| DERIVED_FROM | Claim | Evidence | ||
| AUTHORIZED_BY | Action | Approval | ||
| BLOCKED_BY | Step | Error | ||
| CANCELLED_BY | Task | Actor |
14.3 コピーではなく参照¶
- 大きなオブジェクトには Artifact Ref のみを保存します。
- Trace には Trace / Span Ref のみを保存します。
- Knowledge Entity には Versioned Ref を使用します。
- グラフクエリで ACL と Tenant を強制します。
- 削除リクエストをインデックスと派生プロジェクションへ伝播できます。
15. ストレージ責任マップ¶
| メカニズム | 正規データ | 書き込みタイミング | 一貫性 | 障害時の戦略 |
|---|---|---|---|---|
| Checkpoint | ||||
| Event Log | ||||
| State Store | ||||
| Context Graph | ||||
| Artifact Store | ||||
| Trace Backend | ||||
| Audit Store |
16. Error 契約¶
error:
error_code: ""
category: validation | authorization | transient | dependency | model | business | side_effect_unknown | systemic
retryable: false
safe_to_retry: false
side_effect_state: not_started | unknown | completed | partially_completed
step_id: ""
plan_version: 1
agent_id: ""
tool_name: ""
details_ref: ""
user_message: ""
occurred_at: ""
デフォルト戦略:
| カテゴリ | 自動再試行 | デフォルトアクション |
|---|---|---|
| Validation | いいえ | 入力の修正または有界な Replan |
| Authorization | いいえ | 拒否または承認の申請 |
| Transient | 条件付き | 有界バックオフ |
| Dependency | いいえ | 強く依存する下流処理をブロック |
| Model | 条件付き | 構造の修復または限定的な Replan |
| Business | いいえ | ビジネス結果として返却 |
| Side Effect Unknown | いいえ | Reconcile |
| Systemic | 条件付き | Circuit Breaker / Failover |
17. 復旧契約¶
recovery:
checkpoint_boundary: ""
event_replay_from: ""
reconcile_queries: []
credentials:
reauthenticate: true
reauthorize: true
reuse_old_token: false
revalidate:
plan_version: true
resource_version: true
deadline: true
budget: true
approval: true
max_retries: 0
max_replans: 0
manual_escalation: ""
復旧訓練:
- Tool の実行前にクラッシュ。
- Tool の実行後、State への反映前にクラッシュ。
- State への反映後、Context Graph への反映前にクラッシュ。
- A2A Task の実行中に Client が再起動。
- MCP Task の実行中に接続が切断。
- 古い Token / Approval の期限切れ。
- リソースのバージョン変更。
- Parent Task がすでにキャンセル済み。
18. キャンセル契約¶
cancellation:
initiators: [user, parent_goal, operator, policy, deadline]
stop_new_steps: true
propagate_to_a2a: true
propagate_to_mcp_tasks: true
worker_poll_interval_ms: 0
side_effect_reconcile: true
late_result_policy: record_only
unresolved_action_owner: ""
- Cancel Accepted と Execution Stopped を分けて記録します。
- Terminal Task を誤って再度キャンセルしません。
- 実行中の Side Effect には Reconcile / Compensation があります。
- Context Graph にキャンセル理由と Actor を記録します。
19. コンテキスト圧縮契約¶
compression:
boundary: session_to_central | central_to_team | tool_to_result
preserved_fields:
- goals
- constraints
- negations
- entities
- amounts
- dates
- evidence_anchors
- unresolved_errors
removable_fields: []
compressor_version: ""
source_hash: ""
output_hash: ""
max_tokens: 0
quality_tests: []
品質ゲート:
- 事実保持率。
- 制約保持率。
- 否定保持率。
- Evidence Anchor 保持率。
- 下流タスク成功率。
- 機密情報の最小化。
20. オブザーバビリティ契約¶
correlation:
required:
- goal.id
- request.id
- plan.id
- plan.version
- task.id
- step.id
- agent.id
- trace.id
optional:
- artifact.id
- evidence.id
| プレーン | メトリクス | アラート | ダッシュボード | Owner |
|---|---|---|---|---|
| Business | ||||
| Agent | ||||
| Model | ||||
| Tool / Infra | ||||
| Security | ||||
| Cost |
slo:
goal_success_rate: ""
evidence_coverage: ""
p95_critical_path_latency_ms: 0
recovery_success_rate: ""
degraded_response_rate: ""
cost_per_successful_goal: ""
security_invariants:
unauthorized_side_effects: 0
cross_tenant_leaks: 0
duplicate_high_risk_actions: 0
21. デプロイと Readiness¶
21.1 デプロイの依存関係¶
deployment_order:
- secrets_identity_config
- state_event_artifact
- observability_audit
- mcp_servers
- a2a_team_services
- central_supervisor
- access_api
- canary_and_rollback_gate
21.2 Readiness¶
- 設定、証明書、鍵が有効です。
- Migration のバージョンが一致しています。
- State / Event / Artifact を読み書きできます。
- Context Graph が利用可能、または制御されたバッファリングが成立しています。
- Audit と Trace に書き込めます。
- 依存先の AgentCard、A2A、MCP、ビジネス契約に互換性があります。
- モデルの Provider と Fallback が利用できます。
- Policy / Approval / Kill Switch が利用できます。
- Synthetic Golden Path に合格しています。
22. Golden Scenario Manifest¶
scenario:
scenario_id: ""
description: ""
goal: ""
fixtures: []
expected_plan_shape: []
required_steps: []
optional_steps: []
expected_claims: []
expected_evidence: []
forbidden_actions: []
expected_status: completed
max_latency_ms: 0
max_cost: 0
audit_complete: true
23. 障害訓練マトリクス¶
| ID | 注入ポイント | 障害 | 期待する状態 | 再試行/縮退 | 不変条件 | エビデンスの場所 | Owner |
|---|---|---|---|---|---|---|---|
| F1 | Planner | 循環依存 | Tool Call なし | ||||
| F2 | A2A Team | Timeout | |||||
| F3 | MCP Tool | 不正な Schema | Result を State に取り込まない | ||||
| F4 | Worker | Tool 実行後にクラッシュ | 副作用の重複なし | ||||
| F5 | Auth | Token の期限切れ | 古い Token を再利用しない | ||||
| F6 | Context Graph | 利用不可 | |||||
| F7 | Scheduler | Cancel Race | 下流を開始しない | ||||
| F8 | Model Provider | 5xx | バージョンを追跡可能 |
24. システム受け入れ検証レポート¶
acceptance:
release: ""
commit: ""
environment: ""
evaluated_at: ""
dataset_version: ""
scenario_count: 0
scope:
teams: []
skills: []
tools: []
quality:
goal_success_rate: ""
plan_valid_rate: ""
routing_precision: ""
evidence_coverage: ""
p95_latency_ms: 0
reliability:
recovery_success_rate: ""
failure_drills_passed: ""
duplicate_side_effects: 0
security:
unauthorized_side_effects: 0
cross_tenant_leaks: 0
replay_block_rate: ""
cost:
cost_per_successful_goal: 0
decision: go | go_with_guardrails | no_go
guardrails: []
known_limits: []
rollback_trigger: ""
owners:
business: ""
engineering: ""
security: ""
sre: ""
approvals: []
25. リリースゲート¶
| ゲート | Go | No-Go | 現在の結論 | エビデンス |
|---|---|---|---|---|
| 契約 | 互換性があり、Migration の訓練済み | バージョン未設定/後方互換性を破壊 | ||
| ビジネス | Golden Scenario が基準を達成 | Goal / Evidence が基準未達 | ||
| 復旧 | 訓練に合格し、アクションの重複なし | Unknown の処置なし | ||
| セキュリティ | 最小権限、承認、監査に合格 | 権限逸脱/リプレイ/テナント横断が可能 | ||
| 運用 | SLO、Alert、Runbook の準備完了 | 人手による監視に依存 | ||
| コスト | 予算内で帰属先を特定可能 | 成功した Goal あたりのコストが制御不能 | ||
| ロールバック | バージョンとデータをロールバック可能 | 不可逆で補償なし |
26. 最終承認¶
signoff:
business:
name: ""
decision: ""
date: ""
engineering:
name: ""
decision: ""
date: ""
security:
name: ""
decision: ""
date: ""
sre:
name: ""
decision: ""
date: ""
テンプレート内の不明項目が、明確なリスク、Owner、期限、リリース判断に置き換わった時点で、初めてシステムのアーキテクチャレビューが完了します。空欄は「後で記入する」という意味ではなく、ゲートをまだ通過していないことを意味します。