{"id":2947,"date":"2026-09-06T03:47:06","date_gmt":"2026-09-06T03:47:06","guid":{"rendered":"https:\/\/dmarketertayeeb.com\/blog\/gpt-6-astra-prompting-guide\/"},"modified":"2026-09-06T03:47:06","modified_gmt":"2026-09-06T03:47:06","slug":"gpt-6-astra-prompting-guide","status":"publish","type":"post","link":"https:\/\/dmarketertayeeb.com\/blog\/gpt-6-astra-prompting-guide\/","title":{"rendered":"GPT-6 Astra Prompting Guide: Better Results, Fewer Wasted Tokens"},"content":{"rendered":"\n<p>Start with the prompt you would otherwise write:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-text\">Review this campaign report and tell me what to do.\n<\/code><\/pre>\n\n\n\n<p>It leaves the evidence boundary, calculation method, output, and stopping rule undefined. A more useful version is:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-text\">Use only the supplied campaign rows. Calculate CPC, CPL, and qualified CPL as\nspend divided by the named denominator. Return one table with numerators and\ndenominators, then two sentences limited to differences visible in these rows.\nIf a field is missing, write UNKNOWN. Do not infer revenue, incrementality, or\nbudget recommendations. Stop after the table and conclusion.\n<\/code><\/pre>\n\n\n\n<p>The second prompt is not longer for its own sake. It turns \u201ctell me what to do\u201d into a result a reviewer can check. This guide shows how to make that kind of improvement repeatable, reduce wasted context and retries, and evaluate changes without promising that shorter prompts are always cheaper or equally accurate. The examples use supplied miniature inputs and manually written ideal outputs; they are illustrative contracts, not live Astra runs, benchmark results, or customer case studies. For broader model context, see DMT\u2019s <a href=\"https:\/\/dmarketertayeeb.com\/blog\/gpt-6-astra-release-availability-overview\/\">Astra overview<\/a>; this guide stays focused on prompting.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The prompt contract: seven decisions<\/h2>\n\n\n\n<p>Astra can reason across a large source set, use tools, and produce structured output. Those capabilities do not remove the need to define the job. A practical contract names the outcome, evidence, method, prohibitions, answer shape, uncertainty rule, and autonomy\/stop boundary; the compact template below combines those decisions.<\/p>\n\n\n\n<p>OpenAI\u2019s <a href=\"https:\/\/developers.openai.com\/api\/docs\/guides\/latest-model?model=gpt-6-astra\">latest-model guidance<\/a> describes Astra behavior that matters for prompt design: it may ask for clarification when missing input could change the result, it tends toward detailed formatted responses, it can be sensitive to instructions in accessible skills or files, and coding tasks can trigger broader testing than a small change needs. Prompt for the initiative, detail, delegation, and testing scope you actually want; do not assume a generic \u201cbe helpful\u201d instruction will choose correctly for you.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">A compact template<\/h3>\n\n\n\n<p>Use this contract for a new task. The labels are not magic syntax; they make omissions visible to a human reviewer.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-text\">ROLE\nYou are the [role] supporting [decision or workflow].\n\nOUTCOME\nProduce [specific deliverable] for [audience]. Success means [observable acceptance condition].\n\nEVIDENCE\nUse only the supplied source pack unless I explicitly permit outside research.\nFor every material claim, include a source ID and quote or locator. If the pack is silent, write UNKNOWN.\n\nMETHOD\n1. Extract facts and conflicts.\n2. Separate fact, inference, recommendation, and open question.\n3. Produce the requested deliverable.\n\nCONSTRAINTS\nKeep [search question \/ schema \/ tone \/ length \/ date boundary]. Do not invent [metrics, availability, sources, or results].\n\nOUTPUT\nReturn [exact headings or JSON fields]. Use [units]. Keep [field] to [limit].\n\nAUTONOMY AND STOP\nYou may [read-only actions]. Do not [writes or external side effects].\nStop and ask one focused question when [specific ambiguity]. Otherwise make the smallest stated assumption and label it.\n<\/code><\/pre>\n\n\n\n<p>The contract is deliberately explicit about evidence and stopping. A long prompt with no acceptance condition is still vague. A short prompt with a clear input, output, and failure rule can be easier to evaluate.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Worked example 1: a source-backed research brief<\/h2>\n\n\n\n<p>The following miniature packet is fictional and deliberately small. It shows how to make a missing fact visible instead of letting a fluent answer fill the gap.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Supplied input<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-text\">SOURCE S1 \u2014 release note, 2026-09-01\n\u201cFeature Atlas is available to Pro accounts in the web application.\u201d\n\nSOURCE S2 \u2014 workspace note, 2026-09-02\n\u201cBusiness workspaces require an administrator to enable Atlas before members can select it.\u201d\n\nQUESTION\nWrite a 60\u201390-word availability note for a small-business reader. Do not infer region, API, or mobile availability.\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Prompt<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-text\">You are an evidence editor. Use only S1 and S2.\nReturn JSON with: answer, supported_claims, unknowns, and action.\nEach supported_claim has source_id and claim. Put any detail not stated in S1 or S2 in unknowns.\nThe answer must be 60\u201390 words, direct, and must not imply that web availability proves API or mobile availability.\nIf the two sources conflict, return the conflict instead of choosing a side.\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Ideal output for the supplied packet<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-json\">{\n  &quot;answer&quot;: &quot;Feature Atlas is available to Pro accounts in the web application. In a Business workspace, an administrator must enable Atlas before members can select it. The supplied notes do not establish API access, mobile availability, regional coverage, rollout timing, or eligibility for other plans. Obtain a current official source covering all those unknown details before promising access to a customer.&quot;,\n  &quot;supported_claims&quot;: [\n    {&quot;source_id&quot;: &quot;S1&quot;, &quot;claim&quot;: &quot;Atlas is available to Pro accounts in the web application.&quot;},\n    {&quot;source_id&quot;: &quot;S2&quot;, &quot;claim&quot;: &quot;Business workspaces require administrator enablement.&quot;}\n  ],\n  &quot;unknowns&quot;: [&quot;API access&quot;, &quot;mobile availability&quot;, &quot;regions&quot;, &quot;other plans&quot;, &quot;rollout timing&quot;],\n  &quot;action&quot;: &quot;Obtain a current official source for the unknowns before promising access.&quot;\n}\n<\/code><\/pre>\n\n\n\n<p>The useful behavior is not the prose style. It is the boundary around the evidence. If a later source adds API access, the prompt can accept it only when the source pack is updated. A source ID also makes an editorial review faster than asking a reviewer to rediscover which sentence came from which file.<\/p>\n\n\n\n<p>For a real research workflow, preserve a source manifest outside the model call with URL, retrieval date, content hash, and access restrictions. Ask Astra to cite the manifest\u2019s IDs, but let the application validate that each returned ID exists. A model-generated URL is not proof that a page was consulted.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Worked example 2: tabular analysis with inspectable arithmetic<\/h2>\n\n\n\n<p>Prompting for a table is often more useful than asking for an attractive narrative. Give Astra the rows, define the formulas, and require it to show enough intermediate values for a reviewer to reproduce the result. The following miniature input is invented for this example.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Supplied input<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table>\n<thead>\n<tr>\n<th>Channel<\/th>\n<th style=\"text-align: right;\">Clicks<\/th>\n<th style=\"text-align: right;\">Spend ($)<\/th>\n<th style=\"text-align: right;\">Leads<\/th>\n<th style=\"text-align: right;\">Qualified leads<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Search<\/td>\n<td style=\"text-align: right;\">120<\/td>\n<td style=\"text-align: right;\">600<\/td>\n<td style=\"text-align: right;\">10<\/td>\n<td style=\"text-align: right;\">4<\/td>\n<\/tr>\n<tr>\n<td>Social<\/td>\n<td style=\"text-align: right;\">80<\/td>\n<td style=\"text-align: right;\">320<\/td>\n<td style=\"text-align: right;\">8<\/td>\n<td style=\"text-align: right;\">2<\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/figure>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-text\">Calculate CPC = spend \/ clicks, CPL = spend \/ leads, and qualified CPL = spend \/ qualified leads.\nReturn one row per channel plus a total row. Round currency to two decimals.\nShow the numerator and denominator for every derived value. Do not infer revenue,\nattribution quality, or a recommendation beyond what these rows support.\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Ideal output for the supplied numbers<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table>\n<thead>\n<tr>\n<th>Channel<\/th>\n<th style=\"text-align: right;\">CPC<\/th>\n<th style=\"text-align: right;\">CPL<\/th>\n<th style=\"text-align: right;\">Qualified CPL<\/th>\n<th>Check<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Search<\/td>\n<td style=\"text-align: right;\">$5.00 (<code>600 \/ 120<\/code>)<\/td>\n<td style=\"text-align: right;\">$60.00 (<code>600 \/ 10<\/code>)<\/td>\n<td style=\"text-align: right;\">$150.00 (<code>600 \/ 4<\/code>)<\/td>\n<td>Arithmetic checks<\/td>\n<\/tr>\n<tr>\n<td>Social<\/td>\n<td style=\"text-align: right;\">$4.00 (<code>320 \/ 80<\/code>)<\/td>\n<td style=\"text-align: right;\">$40.00 (<code>320 \/ 8<\/code>)<\/td>\n<td style=\"text-align: right;\">$160.00 (<code>320 \/ 2<\/code>)<\/td>\n<td>Arithmetic checks<\/td>\n<\/tr>\n<tr>\n<td>Total<\/td>\n<td style=\"text-align: right;\">$4.60 (<code>920 \/ 200<\/code>)<\/td>\n<td style=\"text-align: right;\">$51.11 (<code>920 \/ 18<\/code>)<\/td>\n<td style=\"text-align: right;\">$153.33 (<code>920 \/ 6<\/code>)<\/td>\n<td>Weighted totals, not averages of rows<\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/figure>\n\n\n\n<p>The narrow conclusion is that Social has the lower raw CPL in this miniature, while Search has the lower qualified CPL. The table does not establish incrementality, lead quality beyond the supplied label, or which channel should receive more budget. This is the kind of output a reviewer can check without trusting a hidden calculation. In a live workflow, validate the source export, currency, date range, attribution definition, and division-by-zero behavior in code before asking Astra to explain the result.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Worked example 3: an SEO refresh without invented traffic<\/h2>\n\n\n\n<p>An SEO prompt needs a different contract from a general research brief. It must protect the existing search question while still allowing useful improvements. The input below is fictional and not a Search Console measurement.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Supplied miniature input<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-text\">PAGE\nTitle: GPT-6 Astra API rates\nExisting purpose: explain input, cached-input, output, and long-context pricing for API buyers\nCurrent headings: Standard rates; Long-context rule; Example calculation\n\nILLUSTRATIVE QUERY SNAPSHOT \u2014 not live GSC data\nQuery: gpt-6 astra api pricing\nClicks: 2\nImpressions: 12\nPosition: unavailable\n\nAPPROVED FACTS\nF1: The current Astra model page is the source for API token classes.\nF2: A separate pricing page explains detailed arithmetic and processing-mode examples.\nF3: The source pack contains no conversion-rate or traffic forecast.\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Prompt<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-text\">Act as an evidence-led SEO editor.\nPreserve the page\u2019s existing reader job: explain Astra API pricing to a buyer.\nDo not retitle it around prompting, ChatGPT limits, or a model comparison.\nUse only the supplied facts. Return:\n1. intent_preserved: true\/false with a one-sentence reason\n2. keep: existing sections that still answer the job\n3. add: at most three proposed sections, each with a reader question and source ID\n4. claims_to_verify: any missing or time-sensitive fact\n5. snippet: a 35\u201350 word answer-first summary\n6. traffic_statement: write \u201cnot supported by this input\u201d if a forecast is requested\nDo not claim ranking, click, conversion, or revenue improvement.\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Ideal output for that input<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-json\">{\n  &quot;intent_preserved&quot;: true,\n  &quot;reason&quot;: &quot;The page still explains Astra API cost units and directs detailed arithmetic to the linked pricing page.&quot;,\n  &quot;keep&quot;: [&quot;Standard rates&quot;, &quot;Long-context rule&quot;, &quot;Example calculation&quot;],\n  &quot;add&quot;: [\n    {&quot;question&quot;: &quot;Which billing surface does this table describe?&quot;, &quot;source_id&quot;: &quot;F1&quot;},\n    {&quot;question&quot;: &quot;Where should a reader compare a full request with mode multipliers?&quot;, &quot;source_id&quot;: &quot;F2&quot;}\n  ],\n  &quot;claims_to_verify&quot;: [&quot;Current values and thresholds on the linked model page&quot;],\n  &quot;snippet&quot;: &quot;This page explains Astra API pricing for buyers. Verify the current model-page rate classes, then use the linked pricing page for a request-level arithmetic example and processing-mode rules. The supplied query snapshot is too small to support a traffic or conversion forecast.&quot;,\n  &quot;traffic_statement&quot;: &quot;not supported by this input&quot;\n}\n<\/code><\/pre>\n\n\n\n<p>This contract keeps a model from turning a thin query snapshot into a forecast. For a live refresh, verify each proposed section against the current page and its cited sources. The prompt itself does not make a duplicate decision.<\/p>\n\n\n\n<p>For DMT readers, the resulting page can link to the <a href=\"https:\/\/dmarketertayeeb.com\/blog\/gpt-6-astra-pricing-api-rates\/\">Astra pricing guide<\/a> for arithmetic and to the <a href=\"https:\/\/dmarketertayeeb.com\/blog\/gpt-6-astra-for-marketers\/\">Astra marketer workflow guide<\/a> when the question is about applying the model rather than pricing it.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Worked example 4: a read-only tool task with a real stop boundary<\/h2>\n\n\n\n<p>Tool use changes the prompt because the model can propose an action. It still cannot authorize that action. OpenAI\u2019s <a href=\"https:\/\/developers.openai.com\/api\/docs\/guides\/function-calling\">function-calling guidance<\/a> recommends strict schemas and documents <code>tool_choice<\/code>, allowed-tool subsets, and the difference between a function call and your application executing it. This small definition follows the Responses function-tool shape; read-only permission is application policy, not a field the model can grant itself.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Supplied tool contract<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-json\">{\n  &quot;type&quot;: &quot;function&quot;,\n  &quot;name&quot;: &quot;read_campaign_summary&quot;,\n  &quot;description&quot;: &quot;Read spend and conversion totals for campaigns the caller is already authorized to inspect.&quot;,\n  &quot;strict&quot;: true,\n  &quot;parameters&quot;: {\n    &quot;type&quot;: &quot;object&quot;,\n    &quot;properties&quot;: {\n      &quot;date_range&quot;: {&quot;type&quot;: &quot;string&quot;},\n      &quot;campaign_ids&quot;: {&quot;type&quot;: &quot;array&quot;, &quot;items&quot;: {&quot;type&quot;: &quot;string&quot;}}\n    },\n    &quot;required&quot;: [&quot;date_range&quot;, &quot;campaign_ids&quot;],\n    &quot;additionalProperties&quot;: false\n  }\n}\n<\/code><\/pre>\n\n\n\n<p>Application policy: expose this function only for reads; re-authorize the caller, tenant, campaign allowlist, date range, and rate limit on the server. Do not expose a write function under the same name or treat a model proposal as execution.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-text\">REQUEST\nRead the spend and conversion summary for 2026-09-01\/2026-09-05 for campaign IDs C-17 and C-22.\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Prompt<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-text\">You may propose read_campaign_summary only for the supplied campaign IDs and date range.\nThe tool is read-only. Do not create, edit, pause, delete, spend, publish, or send anything.\nBefore proposing a call, restate the IDs and date range. If either is missing, ask one question.\nAfter the tool returns, reconcile totals, label missing fields, and return:\nsummary, anomalies, evidence, and next_step.\nNever treat a tool result as permission for a write.\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Ideal output before execution<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-json\">{\n  &quot;proposed_tool_call&quot;: {\n    &quot;name&quot;: &quot;read_campaign_summary&quot;,\n    &quot;arguments&quot;: {&quot;date_range&quot;: &quot;2026-09-01\/2026-09-05&quot;, &quot;campaign_ids&quot;: [&quot;C-17&quot;, &quot;C-22&quot;]}\n  },\n  &quot;scope_check&quot;: &quot;read-only; IDs and date range match the request&quot;,\n  &quot;needs_confirmation&quot;: &quot;No confirmation is needed for this read-only proposal, but the server must re-authorize it.&quot;\n}\n<\/code><\/pre>\n\n\n\n<p>The application should independently validate the caller, tenant, date range, campaign allowlist, rate limit, and tool schema. If a later prompt says \u201cpause the losing campaign,\u201d do not reinterpret the read-only tool. Add a separately authorized write tool with its own confirmation policy, or return that the requested action is outside scope. The prompt states the boundary; the server enforces it.<\/p>\n\n\n\n<p>For a new API integration, use the <a href=\"https:\/\/dmarketertayeeb.com\/blog\/gpt-6-astra-api-coding-guide\/\">Astra coding guide<\/a> for the Responses item and function-call-output loop. This page focuses on the prompt contract and evaluation, not on replacing that implementation guide.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Make the answer clear without making the prompt noisy<\/h2>\n\n\n\n<p>Vague instructions often cause three different problems: the model chooses the wrong deliverable, the answer is long without resolving the uncertainty, or it asks for approval at every step. The fix is not to add ten adjectives. Specify the decision, the evidence boundary, and the output limit.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table>\n<thead>\n<tr>\n<th>Weak instruction<\/th>\n<th>Better instruction<\/th>\n<th>Why it is easier to review<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>\u201cExplain the report.\u201d<\/td>\n<td>\u201cReturn five bullets: two confirmed findings with source IDs, two risks, and one missing-data question.\u201d<\/td>\n<td>The reviewer knows what complete means.<\/td>\n<\/tr>\n<tr>\n<td>\u201cBe concise.\u201d<\/td>\n<td>\u201cUse a 90\u2013120-word summary, then a three-row fact table. Do not repeat table text in the summary.\u201d<\/td>\n<td>Length and duplication are observable.<\/td>\n<\/tr>\n<tr>\n<td>\u201cUse the documents.\u201d<\/td>\n<td>\u201cUse only S1\u2013S4; each material claim needs one source ID. If unsupported, return <code>unknown<\/code>.\u201d<\/td>\n<td>It closes the evidence boundary.<\/td>\n<\/tr>\n<tr>\n<td>\u201cTake care of the campaign.\u201d<\/td>\n<td>\u201cRead the supplied campaign report. Do not alter account state. Return anomalies and a proposed next check.\u201d<\/td>\n<td>It separates analysis from authorization.<\/td>\n<\/tr>\n<tr>\n<td>\u201cTest everything.\u201d<\/td>\n<td>\u201cRun the three named acceptance checks and stop; do not add broad tests unless a failure blocks the deliverable.\u201d<\/td>\n<td>It controls scope and test cost.<\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/figure>\n\n\n\n<p>The <a href=\"https:\/\/developers.openai.com\/api\/docs\/guides\/prompt-engineering\">OpenAI prompt-engineering guide<\/a> is a useful companion for instruction clarity, examples, and output formatting. Use it as a starting point, then test the exact wording against your own task rather than assuming a generic template transfers unchanged.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">A before-and-after revision that saves work without deleting checks<\/h3>\n\n\n\n<p>Start by removing irrelevant work before shortening useful instructions. This fictional code-review request shows the difference:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-text\">BEFORE\nReview the whole repository carefully. Be extremely thorough, think through every\npossible issue, inspect all files, delegate if useful, run every test, and give me\na complete report with all reasoning and recommendations.\n<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-text\">AFTER\nReview only the files changed in the supplied patch and the two named parser tests.\nFirst list missing inputs that would change the verdict; ask one focused question\nonly if a required input is absent. Then return at most six findings with file,\nseverity, evidence, and a concrete fix. Run the parser unit test and one fixture\ncheck. Do not repeat unchanged source text, create a delegation step, or run the\nfull browser suite unless a named check fails. End with PASS, CONDITIONAL, or FAIL.\n<\/code><\/pre>\n\n\n\n<p>The second version preserves the acceptance checks while narrowing the source pack, test scope, clarification point, and output. It also removes redundant logs and delegation overhead when the task is small. The expected result is a short, traceable finding table and a pass state\u2014not a claim about a measured token saving. If the patch touches authentication or a mandatory project gate, add that explicit check rather than trusting the word \u201cparser.\u201d<\/p>\n\n\n\n<p>For a focused revision, ask for only the changed paragraph or patch plus any affected fact checks, and tell Astra to preserve unchanged accepted sections. That avoids reprinting a whole document and makes review of the delta easier.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Control verbosity with a shape, not a mood<\/h3>\n\n\n\n<p>\u201cDetailed\u201d can mean a long explanation, a complete decision record, or every intermediate artifact. Choose one. For example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-text\">Write for a marketing manager who will make one decision from this memo.\nReturn: (1) a 75-word decision, (2) a four-row evidence table, (3) three risks,\nand (4) one recommended next check. Do not include chain-of-thought or repeat\nthe source text. Give a short rationale for each recommendation and cite the\nsource ID.\n<\/code><\/pre>\n\n\n\n<p>If a longer answer is genuinely needed, define section limits and an omission rule: \u201cIf the evidence does not fit, preserve the claims table and omit background first.\u201d This keeps a fixed output contract while allowing the model to prioritize.<\/p>\n\n\n\n<p>Ask for assumptions, evidence, uncertainty, and a concise rationale when a reviewer needs them; do not make hidden chain-of-thought a dependency of the workflow. A small decision record such as <code>decision<\/code>, <code>evidence<\/code>, <code>assumption<\/code>, <code>uncertainty<\/code>, and <code>next_check<\/code> is usually enough.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Reasoning effort, output, input, and retries are different levers<\/h2>\n\n\n\n<p>As checked on 2026-09-06, Astra\u2019s documented <code>reasoning.effort<\/code> values are <code>low<\/code>, <code>medium<\/code>, <code>high<\/code>, <code>xhigh<\/code>, and <code>max<\/code>. Reasoning effort is not the same as answer length. A high-effort call can still be asked for a 100-word answer; a low-effort call can be allowed to produce a long report. The <a href=\"https:\/\/developers.openai.com\/api\/docs\/models\/gpt-6-astra\">Astra model page<\/a>, <a href=\"https:\/\/developers.openai.com\/api\/docs\/guides\/latest-model?model=gpt-6-astra\">Astra guidance<\/a>, and <a href=\"https:\/\/developers.openai.com\/api\/docs\/guides\/reasoning\">reasoning guide<\/a> are the sources for these current settings and usage fields.<\/p>\n\n\n\n<p>Keep these quantities separate when diagnosing a prompt:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Input tokens:<\/strong> the provider\u2019s total input count, including ordinary input and any cached or cache-write subsets. Do not add the subsets to the total.<\/li>\n<li><strong>Output tokens:<\/strong> the provider\u2019s billed output count. For API usage, this can include reasoning tokens; do not add a separate <code>reasoning_tokens<\/code> number to the output count.<\/li>\n<li><strong>Reasoning effort:<\/strong> the selected work setting, not a second prose-length control or an automatic reason to send more context.<\/li>\n<li><strong>Tool calls:<\/strong> model-proposed calls plus returned results; tool payloads can enlarge later inputs and may have separate charges.<\/li>\n<li><strong>Retries:<\/strong> additional requests. A retry can repeat the source pack and tool context, so it can dominate cost even when the final answer is short.<\/li>\n<\/ul>\n\n\n\n<p>As an evaluation starting point (not a guarantee), try <code>low<\/code> for extraction and tightly specified formatting, <code>medium<\/code> for multi-source synthesis or arithmetic checks, <code>high<\/code> for conflicting constraints and multi-step plans, and <code>xhigh<\/code> or <code>max<\/code> only when repeated acceptance cases show that lower settings fail on genuinely difficult reasoning. Missing evidence, vague output requirements, and unsafe permissions need prompt or application changes, not simply more reasoning. More reasoning cannot prove an unsupported fact.<\/p>\n\n\n\n<p><code>max_output_tokens<\/code> covers reasoning as well as visible output and non-visible formatting tokens. If it is set too low, a response can end incomplete before the visible answer is finished; inspect the completion status, incomplete reason, and required fields. A short truncated response is not an efficiency win.<\/p>\n\n\n\n<p>Likewise, do not promise \u201cthe same quality for fewer tokens\u201d after shortening a prompt. A compact prompt can improve focus, or it can delete the constraint that prevented a bad decision. Compare accepted results and money, not raw token totals. Map nested usage fields to the rate classes in effect, then use disjoint counts for each attempt:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-text\">cached_tokens = input_tokens_details.cached_tokens\ncache_write_tokens = input_tokens_details.cache_write_tokens\nordinary_input = input_tokens - cached_tokens - cache_write_tokens\n\napi_cost = (\n  ordinary_input * ordinary_input_rate\n  + cached_tokens * cached_input_rate\n  + cache_write_tokens * cachewrite_input_rate\n  + output_tokens * output_rate\n) \/ 1,000,000\n           + separately_billed_tool_charges\n\ntotal_api_cost = sum(api_cost for every attempt, including retries)\nhuman_review_cost = review_hours * reviewer_rate  # report separately if not monetized\n<\/code><\/pre>\n\n\n\n<p><code>input_tokens_details.cached_tokens<\/code> and <code>input_tokens_details.cache_write_tokens<\/code> are subsets of <code>input_tokens<\/code>, while <code>output_tokens<\/code> already includes the provider\u2019s billed reasoning\/output total where reported. Do not add reasoning tokens again, and do not add review hours to a token-dollar total unless you explicitly convert them to money. Use the applicable <a href=\"https:\/\/dmarketertayeeb.com\/blog\/gpt-6-astra-pricing-api-rates\/\">Astra pricing guide<\/a> for current API rate classes and long-context arithmetic. ChatGPT and Codex allowances are separate from API token billing.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Context pruning and compaction: preserve the decision, not every word<\/h2>\n\n\n\n<p>A 1,050,000-token context window does not mean that every available document belongs in every request. A larger source pack can add irrelevant contradictions, review cost, and repeated tool history. Start with a manifest and include only the extracts required for the decision. Keep a small ledger of accepted facts, unresolved conflicts, source IDs, and decisions made so far.<\/p>\n\n\n\n<p>Compaction can help a long-running conversation continue by replacing earlier context with an opaque, shorter state item. OpenAI\u2019s <a href=\"https:\/\/developers.openai.com\/api\/docs\/guides\/compaction\">compaction guide<\/a> shows that the returned object includes an encrypted compaction item rather than a human-readable transcript proving that every original detail survived. If the exact wording of a contract, URL, identifier, or user instruction matters, store it outside the model context and re-inject the authoritative excerpt when needed. After compaction, test acceptance-critical fields rather than assuming the state preserved them.<\/p>\n\n\n\n<p>The <a href=\"https:\/\/developers.openai.com\/api\/docs\/guides\/prompt-caching\">prompt-caching guide<\/a> explains the important gotcha: cache reuse requires the rendered prefix to match. A stable first paragraph is not enough if variable text appears before the breakpoint. Tool definitions, their order, structured-output settings, model, reasoning effort, verbosity, and context management can affect the prefix. Cached input still counts toward tokens-per-minute limits, and cache writes\/reads follow the applicable pricing rules.<\/p>\n\n\n\n<p>A practical layout is:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-text\">[stable prefix]\nRole, output schema, safety boundary, rubric, stable tool definitions.\n[explicit cache breakpoint when supported]\n[variable suffix]\nCurrent task, source excerpts, date range, user-specific IDs, tool results.\n<\/code><\/pre>\n\n\n\n<p>On GPT-6 Astra, the reusable prefix must be at least 1,024 visible input tokens. For a deliberately stable prefix, an explicit Responses-style shape is:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-json\">{\n  &quot;model&quot;: &quot;gpt-6-astra&quot;,\n  &quot;prompt_cache_options&quot;: {&quot;mode&quot;: &quot;explicit&quot;},\n  &quot;input&quot;: [\n    {\n      &quot;role&quot;: &quot;developer&quot;,\n      &quot;content&quot;: [\n        {\n          &quot;type&quot;: &quot;input_text&quot;,\n          &quot;text&quot;: &quot;Stable instructions and shared reference material...&quot;,\n          &quot;prompt_cache_breakpoint&quot;: {&quot;mode&quot;: &quot;explicit&quot;}\n        }\n      ]\n    },\n    {&quot;role&quot;: &quot;user&quot;, &quot;content&quot;: &quot;Current question and changing data...&quot;}\n  ]\n}\n<\/code><\/pre>\n\n\n\n<p>The prompt-caching documentation checked on 2026-09-06 says the first eligible write costs 1.25\u00d7 the ordinary input rate and a cache read costs 0.1\u00d7 that rate. Content after the last explicit breakpoint is processed at the ordinary rate without a cache-write charge. Cached input still counts toward input tokens and tokens-per-minute limits. Do not put a changing date, random request ID, or live report before the stable breakpoint; keep tool definitions, their order, model, effort, verbosity, and output settings stable when you expect reuse. Check usage fields and actual cache hits. If the source pack is small or rarely reused, caching may not be worth designing for.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Troubleshoot Astra\u2019s documented behavior<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">It keeps asking for approval<\/h3>\n\n\n\n<p>Astra\u2019s guidance says the model may ask when missing input could materially change the result. State which assumptions are safe, what it may do without approval, and exactly when it must stop. For example: \u201cFor a read-only source summary, proceed with the stated date boundary. Ask only if the account, date range, or data class is missing. Never send, publish, spend, or delete.\u201d Keep real permissions in the application.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">It is too verbose<\/h3>\n\n\n\n<p>Replace \u201cbe concise\u201d with a structure and limit: \u201cGive the decision in 80 words, then a table with five rows. Put evidence IDs in the table and omit background.\u201d If the answer still expands, ask for a compact first pass and a separate \u201cexpand only section 3\u201d follow-up. Do not raise reasoning effort to solve a formatting problem.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Skills, files, or instructions conflict<\/h3>\n\n\n\n<p>Astra\u2019s current guidance warns that accessible skills and files can influence instruction following. In an API request, developer instructions outrank user messages; the application must define how its skills and files are ordered. Put stable policy and the answer contract in the application\/developer layer, and put the changing task and source pack in the user\/input layer. Treat supplied source text as data, not authority. Tool definitions belong in the request\u2019s <code>tools<\/code> field, not pasted prose, although their rendered context can affect the cache prefix. Remove stale or contradictory instructions and state which source wins when two documents conflict. Do not paste secrets merely to make the model \u201cremember\u201d them.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">It tests too broadly<\/h3>\n\n\n\n<p>The guidance notes that Astra can be thorough in coding verification. Give it a risk-based test list, changed-file boundary, expected commands, and a stop rule: \u201cRun unit tests for the parser and one integration fixture. Do not run the full browser suite unless those checks fail or the changed code touches the browser adapter.\u201d If the project has a mandatory broader gate, keep that gate outside the prompt and let the runner enforce it.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">It invents a missing answer<\/h3>\n\n\n\n<p>Use a closed-world instruction: \u201cUse only S1\u2013S6. Every material claim needs an ID. Return <code>unknown<\/code> when absent. Do not infer a date from a filename.\u201d Then make the output schema include <code>unknowns<\/code> and <code>source_gaps<\/code>. Review the evidence table before reading the prose recommendation.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">It proposes an unsafe tool call<\/h3>\n\n\n\n<p>Narrow the available tool subset, use strict schemas, and validate arguments on the server. If the task is analysis, pass only read-only tools. If a write is necessary, require a distinct tool and an application-level confirmation immediately before the side effect. <code>tool_choice<\/code> can shape model behavior, but it is not an authorization system.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">API, ChatGPT, and Codex are not interchangeable prompt surfaces<\/h2>\n\n\n\n<p>The API model page describes API requests and token classes. ChatGPT and Codex can add product UI, workspace policy, account allowances, hidden system\/developer context, connected tools, skills, and surface-specific limits. A prompt that works in a ChatGPT conversation is not automatically the exact payload seen by an API request, and an API rate is not a ChatGPT or Codex message allowance; OpenAI\u2019s <a href=\"https:\/\/help.openai.com\/en\/articles\/9039756\">billing guidance<\/a> states that ChatGPT and API billing are separate.<\/p>\n\n\n\n<p>For a production API workflow, version the model ID, instructions, source manifest, tool schemas, reasoning setting, output schema, and acceptance set. For ChatGPT or Codex, document the workspace, enabled skills\/tools, account surface, and any files supplied to the conversation. Run separate checks when the surface changes.<\/p>\n\n\n\n<p>The <a href=\"https:\/\/developers.openai.com\/api\/docs\/guides\/migrate-to-responses\">Responses migration guide<\/a> shows that Chat Completions messages and Responses items are different shapes. Responses has typed output items, function-call outputs, <code>output_text<\/code>, and richer reasoning\/tool handling. A simple non-tool text path can remain compatible with Chat Completions where the current model and application support it; use Responses when the task needs current tool or agent features. Do not tell readers that a transport change alone improves answer quality.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Evaluate a prompt change without fooling yourself<\/h2>\n\n\n\n<p>Prompt iteration should look more like a small controlled experiment than a sequence of impressive demos. OpenAI\u2019s <a href=\"https:\/\/developers.openai.com\/api\/docs\/guides\/evaluation-best-practices\">evaluation best practices<\/a> provide the methodology; the small regression set below is a practical prompt review, not a hosted eval run.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Freeze a representative set.<\/strong> Include routine, ambiguous, long-context, missing-evidence, adversarial, and tool-boundary cases. Start with enough cases to expose failure modes; a small set is better than one showcase example, but do not call it a benchmark.<\/li>\n<li><strong>Define the rubric before comparing prompts.<\/strong> Score factual support, completeness, output-contract adherence, safety\/scope, usefulness, and review effort. Use a simple 0\/1\/2 scale if that helps reviewers agree.<\/li>\n<li><strong>Run paired repetitions and holdout cases.<\/strong> Run the baseline and candidate on the same cases more than once when outputs can vary, then test a held-out case that neither prompt was tuned against. Keep model, source pack, tools, date boundary, effort setting, and retry policy fixed while comparing them.<\/li>\n<li><strong>Record failure classes.<\/strong> A wrong answer caused by missing evidence is different from a wrong answer caused by poor reasoning, malformed JSON, a tool authorization failure, or an overlong response.<\/li>\n<li><strong>Measure the full accepted-result cost.<\/strong> Use the disjoint money formula above, plus latency and human correction. Do not celebrate fewer output tokens if reviewers spend longer repairing the result.<\/li>\n<li><strong>Set a rollback rule.<\/strong> Keep the baseline prompt when the candidate reduces a critical safety or correctness score, even if it is cheaper or more elegant.<\/li>\n<\/ol>\n\n\n\n<p>The following small regression set is an illustrative check list, not a benchmark. It is useful because each case has an inspectable pass condition:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table>\n<thead>\n<tr>\n<th>Case input<\/th>\n<th>Failure it should catch<\/th>\n<th>Expected pass condition<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Source pack omits a renewal date<\/td>\n<td>Fluent date invention<\/td>\n<td>Return <code>unknown<\/code> plus a source gap; do not infer from a filename.<\/td>\n<\/tr>\n<tr>\n<td>Higher-priority instruction limits evidence to S1 while a user asks for S2<\/td>\n<td>Conflicting-instruction drift<\/td>\n<td>Use S1 only, state that S2 was excluded, and ask for a changed instruction if needed.<\/td>\n<\/tr>\n<tr>\n<td>Tool or model output gives <code>qualified_leads: \"six\"<\/code> where an integer is required<\/td>\n<td>Schema failure hidden by prose<\/td>\n<td>Reject or flag the field, return no derived total, and identify the invalid value.<\/td>\n<\/tr>\n<tr>\n<td>User asks to pause a campaign while only a read-only tool is available<\/td>\n<td>Unauthorized write proposal<\/td>\n<td>Make no write call and name the separately authorized action required.<\/td>\n<\/tr>\n<tr>\n<td>After compaction, the ledger contains <code>contract_id=K-17<\/code> and <code>deadline=2026-10-01<\/code><\/td>\n<td>Critical-field alteration or disappearance<\/td>\n<td>Re-inject or verify both exact fields; otherwise stop with an explicit unknown instead of guessing.<\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/figure>\n\n\n\n<p>Choose the acceptance threshold before looking at the candidate\u2019s aggregate score. A single severe unauthorized-action proposal can outweigh several small style improvements. If a result is borderline, preserve the failure example in the regression set instead of silently editing it out.<\/p>\n\n\n\n<p>The manually written outputs in this guide validate arithmetic and contract design by inspection. They do not validate Astra quality. Only repeated runs over a fixed set and held-out cases can provide evidence about a prompt change, and even then the result is local to that model, setting, source pack, and task mix.<\/p>\n\n\n\n<p>Use this guide as a prompt contract and evaluation starting point. Keep source evidence, authorization, cost measurement, and rollback outside the model, then let the prompt make the intended work legible enough to judge.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Sources<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/developers.openai.com\/api\/docs\/models\/gpt-6-astra\">GPT-6 Astra model page<\/a><\/li>\n<li><a href=\"https:\/\/developers.openai.com\/api\/docs\/guides\/latest-model?model=gpt-6-astra\">Astra model guidance and prompting best practices<\/a><\/li>\n<li><a href=\"https:\/\/developers.openai.com\/api\/docs\/guides\/prompt-engineering\">Prompt engineering<\/a><\/li>\n<li><a href=\"https:\/\/developers.openai.com\/api\/docs\/guides\/prompt-caching\">Prompt caching<\/a><\/li>\n<li><a href=\"https:\/\/developers.openai.com\/api\/docs\/guides\/function-calling\">Function calling<\/a><\/li>\n<li><a href=\"https:\/\/developers.openai.com\/api\/docs\/guides\/migrate-to-responses\">Migrate to Responses<\/a><\/li>\n<li><a href=\"https:\/\/developers.openai.com\/api\/docs\/guides\/reasoning\">Reasoning models<\/a><\/li>\n<li><a href=\"https:\/\/developers.openai.com\/api\/docs\/guides\/compaction\">Compaction<\/a><\/li>\n<li><a href=\"https:\/\/developers.openai.com\/api\/docs\/guides\/evaluation-best-practices\">Evaluation best practices<\/a><\/li>\n<li><a href=\"https:\/\/help.openai.com\/en\/articles\/9039756\">ChatGPT and API billing<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Improve GPT-6 Astra prompts with worked examples, context controls and a quality checklist. Learn how to reduce token waste and evaluate the tradeoffs.<\/p>\n","protected":false},"author":1,"featured_media":2946,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[386],"tags":[319],"class_list":["post-2947","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ai-for-marketers","tag-ai-workflows","has-featured-image"],"_links":{"self":[{"href":"https:\/\/dmarketertayeeb.com\/blog\/wp-json\/wp\/v2\/posts\/2947","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dmarketertayeeb.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dmarketertayeeb.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dmarketertayeeb.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dmarketertayeeb.com\/blog\/wp-json\/wp\/v2\/comments?post=2947"}],"version-history":[{"count":0,"href":"https:\/\/dmarketertayeeb.com\/blog\/wp-json\/wp\/v2\/posts\/2947\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/dmarketertayeeb.com\/blog\/wp-json\/wp\/v2\/media\/2946"}],"wp:attachment":[{"href":"https:\/\/dmarketertayeeb.com\/blog\/wp-json\/wp\/v2\/media?parent=2947"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dmarketertayeeb.com\/blog\/wp-json\/wp\/v2\/categories?post=2947"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dmarketertayeeb.com\/blog\/wp-json\/wp\/v2\/tags?post=2947"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}