Execution Contract Architecture
Structure -> Generation -> Polish のフェーズ境界と、各フェーズ間を接続する契約を定義する。
1. Purpose
従来の LLM アプリケーション(LangChain 等)では、単一プロンプトで「考える」「書く」「整える」を同時実行するため、表現(文体・装飾)が推論(論理構造)を歪める問題が発生しやすい。
AIKernel はこれらを物理的なフェーズとして分離し、フェーズ境界に Contract を配置することで次を実現する。
- 推論出力と表現出力の物理的隔離: 表現の品質が論理の正しさを汚染(Attention Pollution)することを防ぐ。
- フェーズ越境の防止: 「書きながら考える」非決定的挙動を排除する。
- 監査性の向上: 論理確定フェーズと表現付与フェーズを追跡可能にする。
2. Phase Definition and Flow
2.1 Structure Phase(推論・構造化)
- 責務: 入力情報から論理骨子と解決策データ構造のみを生成する。
- 制約: 装飾的自然言語の出力を禁止し、スキーマ準拠の構造データ(Thought Artifact)のみを出力する。
- 契約:
IThoughtProcess
2.2 Generation Phase(生成・具体化)
- 責務: 承認済み Structure 出力を入力として、Markdown/HTML/PlainText 等に具体化する。
- 制約: 独自推論を追加してはならない。構造の翻訳に限定する。
- 契約:
IExecutionOutput
2.3 Polish Phase(研磨・調整)
- 責務: 文体統一、トーン適用、禁止語チェック、書式微調整を行う。
- 制約: 推論内容と事実関係を変更してはならない。
- 契約:
IOutputPolisher
3. Core Contracts (Interface Definitions)
AIKernel.Core では次の抽象を中心に定義する。
IThoughtProcessThoughtArtifact Execute(OrchestrationContext context)- 推論結論を導出する契約。出力は必ずスキーマ検証される。
IExecutionOutputRawOutput Materialize(ThoughtArtifact artifact, ExpressionContext context)- 論理構造を表現形式へ変換する契約。
IOutputPolisherFinalResult Polish(RawOutput raw)- 最終品質(可読性・規約順守)を整える契約。
ExecutionResult- 各フェーズ出力、使用モデルのメタデータ、署名情報を保持する不変コンテナ。
4. Boundary Rules
- 一方向性原則: データフローは常に
Structure -> Generation -> Polish。逆流とスキップは禁止。 - State-Isolation: Generation フェーズは
OrchestrationContext(生データ)を直接参照してはならない。ThoughtArtifact経由を必須とする。 - No-Inference in Polish: Polish フェーズで LLM を使う場合は低 temperature の決定論設定を必須とし、追加推論を誘発するプロンプトを禁止する。
5. Fail-Closed Rule
AIKernel は不確実な継続より安全停止を優先する。
- Schema Validation Failure: Structure 出力が定義 JSON Schema に不適合なら即時停止し、後続 Generation を実行しない。
- Integrity Breach: フェーズ間受け渡しデータのハッシュ署名不一致(改ざん検知)時は停止する。
- Mandatory Field Missing:
ReasoningPathやConclusionなど必須項目欠落時は、見かけ上妥当な出力でも Fail とする。
6. Implementation Guidance (C# / .NET)
// DIによるパイプライン合成のイメージ\npublic class ExecutionPipeline\n{\n private readonly IThoughtProcess _planner;\n private readonly IExecutionOutput _generator;\n private readonly IOutputPolisher _polisher;\n\n public async Task<ExecutionResult> RunAsync(InputData data)\n {\n // 1. Structure: 論理の確定\n var artifact = await _planner.ExecuteAsync(data);\n\n // 2. Generation: 表現への変換\n var raw = await _generator.MaterializeAsync(artifact);\n\n // 3. Polish: 最終調整\n return await _polisher.PolishAsync(raw);\n }\n}
変更履歴
- v0.0.0 / v0.0.0.0: 初期ドラフト
- v0.0.1 (2026-05-06): ドキュメント規約に基づくバージョン更新
Source:
architecture/8.EXECUTION_CONTRACT_ARCHITECTURE-jp.md