Skip to main content
このガイドは Content Standards プロトコルの実装パターンを 3 つの視点で説明します:
  1. Sales agents - ブランド適合性スタンダードの受け入れと適用
  2. Orchestrators - パブリッシャー横断でのコンテンツスタンダードの調整
  3. Governance agents - コンテンツ評価サービスの提供

役割の整理

まず役割分担を把握します:
RoleExamplesResponsibilities
OrchestratorDSP, トレーディングデスク、代理店プラットフォームメディアバイを調整し、スタンダード参照をセラーへ渡し、検証用アーティファクトを受領
Sales Agentパブリッシャー Ad サーバー、SSPスタンダード受領、ローカルモデルのキャリブレーション、配信時の適用、アーティファクト送付
Governance AgentIAS, DoubleVerify, ブランドセーフティサービススタンダードをホストし、calibrate_contentvalidate_content_delivery を実装
典型的なフロー:
1. ブランドがガバナンスエージェントでスタンダードを設定(オーケストレーター経由)
2. オーケストレーターが get_products/create_media_buy に standards_ref を含めて送信
3. セラーが能力に応じて受諾または拒否
4. セラーがガバナンスエージェントとキャリブレーション
5. セラーが配信時にスタンダードを適用
6. セラーがアーティファクトを提供(webhook でのプッシュ、または get_media_buy_artifacts でのプル)
7. オーケストレーターがアーティファクトをガバナンスエージェントへ転送して検証

Sales Agent 向け

Sales Agent(パブリッシャー Ad サーバー、SSP 等)は、オーケストレーターのポリシーを受け入れ配信時に適用します。

コアモデル

オーケストレーターが content_standards_ref を含めてきたら、次を行います:
  1. ガバナンスエージェントからスタンダードを 取得し、実行可能かを評価します
  2. 能力に応じて買い付けを 受諾または拒否 します
  3. ガバナンスエージェントの期待に合わせて評価モデルを キャリブレーション します
  4. 配信時にスタンダードを 適用 します
  5. 検証用にオーケストレーターへ アーティファクトを提供 します
要件を満たせない場合は 買い付けを拒否 してください。順守できないキャンペーンを受けないこと。

実装すべきこと

1. get_productscreate_media_buy で content standards の参照を受ける オーケストレーターは参照経由でスタンダードを渡します:
{
  "content_standards_ref": {
    "standards_id": "nike_emea_brand_safety",
    "agent_url": "https://brandsafety.ias.com"
  }
}
受け取ったら:
  • agent_url のガバナンスエージェントからスタンダード文書を取得します
  • 要件を満たせるか評価します
  • 満たせない場合はリクエストを拒否します
  • 満たせる場合は受諾し、メディアバイとの関連付けを保存します
2. 実行可能か判断する スタンダード文書には次が含まれます:
  • Policy(許容/非許容コンテンツの自然言語記述)
  • Calibration exemplars(エッジケース解釈のための合否例)
  • Floor(外部基準となるベースラインセーフティスタンダードへの参照)
要件と自社の能力を突き合わせます。パブリッシャーごとに「adjacency」の定義は異なります(Reddit はコメント、YouTube は関連動画、ニュースサイトは記事本文など)。ブランド意図を実質的に担保できるなら受け入れて問題ありません。 対応できない場合(例: 屋外など adjacency が成立しないチャネルを要求された場合)は拒否します。 3. 評価機構を構築する スタンダード文書を使ってコンテンツ評価システムをトレーニングまたは設定します。方法は:
  • ルールをシステムプロンプトとした LLM
  • キャリブレーション例でトレーニングしたクラシファイア
  • 確定的評価のためのルールエンジン
  • サードパーティのブランド適合性ベンダー
プロトコルは実装方法を規定しません。スタンダードを順守することが求められます。 4. ガバナンスエージェントとキャリブレーションする 買い付け受諾後、ガバナンスエージェントの calibrate_content を呼び出してローカルモデルをキャリブレーションします。自社インベントリのサンプルアーティファクトを送ると、ガバナンスエージェントがどう評価するかを返してくれます:
// インベントリのサンプルをガバナンスエージェントへ送信
{
  "standards_id": "nike_emea_brand_safety",
  "artifacts": [
    {
      "property_id": { "type": "domain", "value": "espn.com" },
      "artifact_id": "article_123",
      "assets": [{ "type": "text", "role": "title", "content": "Marathon Runner Collapses at Finish Line" }]
    }
  ]
}

// ガバナンスエージェントが解釈を返す
{
  "evaluations": [{
    "artifact_id": "article_123",
    "suitable": true,
    "confidence": 0.9,
    "explanation": "Sports injury coverage in athletic context - aligns with brand's sports marketing positioning"
  }]
}
返却結果を使ってローカルモデルを調整します。判定に異議があれば理由を確認し、追加質問で擦り合わせます。 5. アーティファクトをオーケストレーターへ送る 配信後、ガバナンスエージェントによる検証ができるようアーティファクトをオーケストレーターへプッシュします。メディアバイの artifact_webhook で設定します:
// アーティファクト webhook ペイロード(オーケストレーターへ送信)
{
  "media_buy_id": "mb_nike_reddit_q1",
  "batch_id": "batch_20250115_001",
  "timestamp": "2025-01-15T11:00:00Z",
  "artifacts": [
    {
      "artifact": {
        "property_id": { "type": "domain", "value": "reddit.com" },
        "artifact_id": "r_fitness_abc123",
        "assets": [{ "type": "text", "role": "title", "content": "Best protein sources" }]
      },
      "delivered_at": "2025-01-15T10:30:00Z",
      "impression_id": "imp_abc123"
    }
  ]
}
ポーリングを好むオーケストレーター向けに get_media_buy_artifacts もサポートします。

実装チェックリスト

  • get_productscreate_media_buycontent_standards_ref をパース
  • ガバナンスエージェントからスタンダード文書を取得して評価
  • 実行できない買い付けは拒否 — 順守できないキャンペーンを受け入れない
  • スタンダード文書に基づくコンテンツ評価を構築
  • ガバナンスエージェントの calibrate_content を呼び出して解釈を合わせる
  • オーケストレーターが検証用コンテンツを取得できるよう get_media_buy_artifacts を実装
  • プッシュ型アーティファクト配信のために artifact_webhook をサポート
  • 配信メトリクスのために reporting_webhook をサポート

オーケストレーター向け

オーケストレーター(DSP、トレーディングデスク、代理店プラットフォーム)は、ブランド・ガバナンスエージェント・パブリッシャー間でコンテンツスタンダードを調整します。

オーケストレーションパターン

Brand → Orchestrator → Governance Agent (setup)
                    → Sales Agent (buying)
                    ← Sales Agent (artifacts)
                    → Governance Agent (validation)
                    → Brand (reporting)
1. ブランドがガバナンスエージェントでスタンダードを設定するのを支援 ブランドはガバナンスエージェントを通じてコンテンツスタンダードを作成します。あなたが仲介するか、ブランドが直接行う場合があります:
// ガバナンスエージェントに保存されるスタンダード
{
  "standards_id": "nike_emea_brand_safety",
  "name": "Nike EMEA Brand Suitability Policy",
  "brand_id": "nike",
  "policy": "Sports and fitness content is ideal. Avoid violence, adult themes, drugs.",
  "calibration_exemplars": {
    "pass": [
      { "type": "url", "value": "https://espn.com/nba/story/_/id/12345/lakers-win", "language": "en" }
    ],
    "fail": [
      { "type": "url", "value": "https://tabloid.example.com/celebrity-scandal", "language": "en" }
    ]
  }
}
2. 購入時にスタンダード参照を渡す プロダクト探索やメディアバイ作成時に、ガバナンスエージェント参照を含めます:
{
  "product_id": "espn_sports_display",
  "packages": [...],
  "content_standards_ref": {
    "standards_id": "nike_emea_brand_safety",
    "agent_url": "https://brandsafety.ias.com"
  },
  "artifact_webhook": {
    "url": "https://your-platform.com/webhooks/artifacts",
    "authentication": {
      "schemes": ["HMAC-SHA256"],
      "credentials": "your-shared-secret-min-32-chars"
    },
    "delivery_mode": "batched",
    "batch_frequency": "hourly",
    "sampling_rate": 0.25
  }
}
パブリッシャーが基準を満たせない場合は買い付けを拒否します。拒否を適切に扱い、代替在庫を探してください。 3. Sales Agent からアーティファクトを受け取る Sales Agent は artifact_webhook にアーティファクトをプッシュします。これをガバナンスエージェントに転送して検証します:
# Sales Agent からの artifact webhook を受信
@app.post("/webhooks/artifacts")
async def receive_artifacts(payload: ArtifactWebhookPayload):
    # ガバナンスエージェントへ転送して検証
    validation_result = await governance_agent.validate_content_delivery(
        standards_id=get_standards_id(payload.media_buy_id),
        records=[
            {"artifact": a.artifact, "record_id": a.impression_id}
            for a in payload.artifacts
        ]
    )

    # 失敗を記録
    for result in validation_result.results:
        if any(f.status == "failed" for f in result.features):
            log_suitability_incident(payload.media_buy_id, result)

    return {"status": "received", "batch_id": payload.batch_id}
4. ブランドへ報告 検証結果をブランドに提示します:
  • Incidents: 基準を満たさなかったコンテンツ
  • Coverage: 配信のうち検証された割合
  • Trends: コンテンツセーフティの経時変化

実装チェックリスト

  • ガバナンスエージェントでのブランドセットアップを支援
  • get_productscreate_media_buy リクエストに content_standards_ref を含めます
  • Sales Agent からアーティファクトを受信するために artifact_webhook を設定
  • スタンダードを満たせないパブリッシャーからの拒否を処理
  • validate_content_delivery を通じてガバナンスエージェントへアーティファクトを転送
  • ブランド向けレポートを構築

ガバナンスエージェント向け

ガバナンスエージェント(IAS、DoubleVerify など)はコンテンツ評価をサービスとして提供します。

実装するもの

1. コンテンツスタンダードをホストし提供する スタンダード設定を保存し、get_content_standards で公開します:
// get_content_standards へのレスポンス
{
  "standards_id": "nike_emea_brand_safety",
  "version": "1.2.0",
  "name": "Nike EMEA - all digital channels",
  "policy": "Sports and fitness content is ideal. Lifestyle content about health is good...",
  "calibration_exemplars": {
    "pass": [...],
    "fail": [...]
  }
}
2. calibrate_content を実装する Sales Agent はキャンペーン実行前にローカルモデルを合わせるためにこれを呼び出します。サンプルアーティファクトを送り、ブランドがどう評価するかを返します:
def calibrate_content(standards_id: str, artifacts: list) -> dict:
    standards = get_standards(standards_id)
    evaluations = []

    for artifact in artifacts:
        # ブランドのポリシーに照らして評価
        result = evaluate_against_policy(artifact, standards)
        evaluations.append({
            "artifact_id": artifact["artifact_id"],
            "suitable": result.suitable,
            "confidence": result.confidence,
            "explanation": result.explanation  # 判断理由を伝える
        })

    return {"evaluations": evaluations}
キャリブレーションは対話的です。追加質問やエッジケースに対応できるようにしてください。 3. validate_content_delivery を実装する オーケストレーターが配信後にアーティファクトを検証するために呼び出します。大規模なバッチ評価:
def validate_content_delivery(standards_id: str, records: list) -> dict:
    standards = get_standards(standards_id)
    results = []

    for record in records:
        features = []
        for feature in ["brand_safety", "brand_suitability"]:
            evaluation = evaluate_feature(record["artifact"], standards, feature)
            features.append({
                "feature_id": feature,
                "status": "passed" if evaluation.passed else "failed",
                "value": evaluation.value,
                "message": evaluation.message if not evaluation.passed else None
            })
        results.append({
            "record_id": record["record_id"],
            "features": features
        })

    return {
        "summary": compute_summary(results),
        "results": results
    }

実装チェックリスト

  • ブランドがポリシーを設定するために create_content_standards を実装
  • Sales Agent がポリシーを取得するために get_content_standards を実装
  • Sales Agent がモデルを合わせるために calibrate_content を実装
  • オーケストレーターが配信を検証するために validate_content_delivery を実装
  • キャリブレーションでの対話をサポート(追加質問、エッジケース)

Content Access Pattern

3 つの役割すべてでコンテンツを安全にやり取りする必要がある場合があります。content_access パターンは URL 名前空間への認証付きアクセスを提供します:
{
  "content_access": {
    "url_pattern": "https://cache.example.com/*",
    "auth": {
      "type": "bearer",
      "token": "eyJ..."
    }
  }
}
  • url_pattern: このパターンにマッチする URL にこの認証を使用
  • auth.type: 認証方式(bearer, api_key, signed_url
  • auth.token: 認証情報
以下に含めます:
  • get_content_standards レスポンス(ガバナンスエージェント → Sales Agent: 「ここから例を取得してください」)
  • get_media_buy_artifacts レスポンス(Sales Agent → オーケストレーター: 「ここからコンテンツを取得してください」)
これによりアセット単位のトークンを避け、安全なコンテンツ交換を可能にしながらペイロードを小さく保てます。