Aller au contenu principal
Docs reporting
Caso d'uso Codex + Yield

Output planning leggibile dal LLM

Forecast key-values e order in JSON

Risolvi l'order GAM, risolvi gli ID di custom targeting, esegui un forecast vincolato e restituisci un oggetto JSON stabile che un altro LLM possa leggere senza indovinare.

Prompt utente

"Codex, prepara un forecast JSON leggibile dal LLM per l'order OR-2026-SUMMER. Trova l'order, risolvi le key-values audience=sports e hb_pb=20, forecastea le ad units Homepage/Sports dal 2026-07-01 al 2026-07-31 per 500000 impression con 300x250 e 728x90, separa la disponibilita per formato, poi restituisci solo il JSON decisionale."

Risultato atteso

Un oggetto forecastDecision normalizzato con metadata order, ID key/value risolti, numeri forecast, split per formato, rischio e prossima azione sicura.

Flusso agente

  1. 01

    Trovare l'order con list_orders, poi chiamare get_order per portare orderId, status, advertiserId e traffickerId nel JSON.

  2. 02

    Risolvere ogni key-value con search_custom_targeting e get_custom_targeting_values; non passare mai solo label come audience=sports al forecast.

  3. 03

    Eseguire get_standalone_forecast per un bisogno draft, get_delivery_forecast_by_line_item per un line item esistente, o get_prospective_delivery_forecast se piu line items pianificati devono essere simulati insieme.

  4. 04

    Aggiungere breakdownTargets per formato creative per far confrontare al LLM 300x250 e 728x90 invece di leggere una capacita miscelata.

  5. 05

    Mappare il forecast grezzo in un oggetto forecastDecision stretto prima di chiedere una raccomandazione al LLM.

Funzioni MCP

Chiamata MCP parent mostrata con l'azione reporting.

FunzioneCostoUso
reporting(action="list_orders")0 crTrova l'order GAM per nome.
reporting(action="get_order")0 crRecupera metadata completa dell'order.
reporting(action="search_custom_targeting")0 crRisolve nomi key in key ID.
reporting(action="get_custom_targeting_values")0 crRisolve value ID consentiti per key.
reporting(action="get_standalone_forecast")0 crForecastea il targeting risolto prima del booking.
reporting(action="get_delivery_forecast_by_line_item")0 crConfronta con forecast di un line item esistente.
reporting(action="get_prospective_delivery_forecast")0 crSimula piu line items pianificati insieme.

Payload JSON

{
  "objective": "forecast_key_values_order_json",
  "prerequisiteCalls": [
    {
      "tool": "orders",
      "arguments": {
        "action": "list",
        "params": {
          "q": "OR-2026-SUMMER",
          "limit": 5
        }
      }
    },
    {
      "tool": "orders",
      "arguments": {
        "action": "get",
        "params": {
          "orderId": "9482"
        }
      }
    },
    {
      "tool": "targeting",
      "arguments": {
        "action": "search_custom_targeting",
        "params": {
          "q": "audience",
          "limit": 10
        }
      }
    },
    {
      "tool": "targeting",
      "arguments": {
        "action": "get_custom_targeting_values",
        "params": {
          "keyId": "1871",
          "limit": 200
        }
      }
    }
  ],
  "forecastCall": {
    "tool": "reporting",
    "arguments": {
      "action": "get_standalone_forecast",
      "params": {
        "adUnitIds": [
          "1234567",
          "1234568"
        ],
        "startDate": "2026-07-01T00:00:00",
        "endDate": "2026-07-31T23:59:59",
        "primaryGoalUnits": 500000,
        "lineItemType": "STANDARD",
        "priority": 8,
        "keyValues": [
          {
            "keyId": 1871,
            "valueIds": [
              9912
            ]
          },
          {
            "keyId": 2450,
            "valueIds": [
              3301
            ]
          }
        ],
        "geoTargeting": [
          "2250"
        ],
        "creativeSizes": [
          {
            "width": 300,
            "height": 250
          },
          {
            "width": 728,
            "height": 90
          }
        ],
        "breakdownTargets": [
          {
            "name": "format_300x250",
            "creative": {
              "width": 300,
              "height": 250
            }
          },
          {
            "name": "format_728x90",
            "creative": {
              "width": 728,
              "height": 90
            }
          }
        ],
        "frequencyCaps": [
          {
            "maxImpressions": 3,
            "numTimeUnits": 1,
            "timeUnit": "DAY"
          }
        ],
        "includeTargetingCriteriaBreakdown": true
      }
    }
  },
  "llmJsonContract": {
    "forecastDecision": {
      "order": [
        "id",
        "name",
        "status",
        "advertiserId",
        "traffickerId"
      ],
      "targeting": [
        "adUnitIds",
        "keyValues",
        "geoTargeting",
        "creativeSizes"
      ],
      "forecast": [
        "availableUnits",
        "matchedUnits",
        "deliveredUnits",
        "utilizationPercent",
        "formatSplit",
        "contendingLineItems"
      ],
      "decision": [
        "riskLevel",
        "status",
        "relaxFirst",
        "nextAction"
      ]
    }
  }
}

Output rappresentativo

  • {"order":{"id":"9482","name":"OR-2026-SUMMER","status":"DRAFT","advertiserId":"7712","traffickerId":"4431"},"targeting":{"adUnitIds":["1234567","1234568"],"keyValues":[{"keyId":1871,"keyName":"audience","valueIds":[9912],"valueNames":["sports"]},{"keyId":2450,"keyName":"hb_pb","valueIds":[3301],"valueNames":["20"]}]}}
  • {"forecast":{"availableUnits":612400,"matchedUnits":544900,"deliveredUnits":184200,"utilizationPercent":81.6,"formatSplit":[{"format":"300x250","availableUnits":388100,"matchedUnits":352900,"riskLevel":"LOW"},{"format":"728x90","availableUnits":224300,"matchedUnits":192000,"riskLevel":"REVIEW"}],"contendingLineItems":[{"lineItemId":"90031","name":"Summer Roadblock","priority":6}]}}
  • {"decision":{"riskLevel":"LOW","status":"safe_to_review","relaxFirst":null,"nextAction":"regenerate_before_booking"},"llmSummary":"Order risolto, targeting esplicito, forecast read-only."}

Dimensioni e metriche

Dimensioni
NameFonteDescrizione
ORDER_IDGAMIdentificativo order
ORDER_NAMEGAMNome order
AD_UNIT_IDGAMID inventory target
CREATIVE_TARGET_AD_UNIT_SIZEGAMSplit per formato
KEY_VALUES_IDGAMID key-value risolti
KEY_VALUES_NAMEGAMLabel key-value leggibili
Metriche
NameFonteDescrizione
availableUnitsDerivedDisponibilita forecast
matchedUnitsDerivedUnita che matchano il targeting
deliveredUnitsDerivedUnita gia deliverate nel contesto
utilizationPercentDerivedIndicatore pressione inventory
formatSplitDerivedDisponibilita per formato creative
riskLevelDerivedLivello di rischio

Limiti

  • La disponibilita futura non e un report REST HISTORICAL; non usare run_custom_report per questa domanda.
  • Il contesto order e descrittivo: non riserva inventory e non muta l'order.
  • Le key-values devono essere salvate come keyId/valueIds nel JSON cosi un altro agente puo ripetere lo stesso forecast.
  • I forecast vanno rigenerati vicino al booking, soprattutto dopo cambi di priority, sizes, caps o targeting.
La cosa importante non e la prosa; e il contratto JSON ripetibile che tiene il LLM ancorato.
Leggi la guida Academy

Usa la guida editoriale per il contesto audience, poi torna qui per azioni MCP, campi e payload esatti.

Leggi la guida Academy
Reference campi