Writing profiles and guidelines
The two free-text fields you pass on almost every call do different jobs: the profile describes the customer to the judge; the guidelines describe your commercial guardrails to the proposer. Both work best short and factual.
Profiles
A profile is a one-line sketch of how this person shops:
"shops fortnightly, small baskets, coupon-led, buys confectionery" "weekly family shop, rarely uses vouchers"
The judge is grounded in the customer's actual transaction history; the profile rides alongside it as a compact summary. Good profiles state observable behaviour:
- Frequency — shops fortnightly, weekly family shop
- Basket shape — small baskets, median basket ฿241
- Price sensitivity — coupon-led, rarely uses vouchers, uses a coupon on 14% of trips
- Category habits — buys confectionery now and then, buys fresh produce most weeks
Avoid speculation and demographics-as-personality ("price-conscious millennial mum"). The model answers as a person, not a segment — give it the person's behaviour, not a marketing archetype.
If you have transaction data onboarded, profiles can be generated from it; ask your EGGai team about profile export. For the Survey Response SDK's drawn panels you write one description for the whole panel instead ("shoppers aged 18-55 who buy fresh produce most weeks").
Guidelines
Guidelines are the search space. The proposer opens at the stingiest version they allow and never goes outside them; if they run out before the judge accepts, the run returns no offer rather than breaking them.
discount caps at 12%, min spend above 300. the produce section is fixed. the tagline may be reworded, but never promise free delivery.
State three kinds of thing, plainly:
- Hard caps — discount caps at 12%, min spend above 300.
- What is fixed — the produce section is fixed, hold the 15%.
- What may move, and how — the aisle may change, the tagline may be reworded.
Add explicit prohibitions for anything a clever rewording must never do: never promise free delivery.
Constraints: the numeric backstop
Guidelines are honoured by a language model; constraints are enforced by the
harness. For the numbers you cannot breach, pass both:
guidelines = "discount caps at 12%, min spend above 300"
constraints = {"max_depth": 12, "min_spend_min": 300}
Whatever the models do, terms outside the constraints never come back. Available:
max_depth, min_depth, min_spend_max,
min_spend_min. Lock intent ("keep the category unchanged") stays in the
guidelines — it is not expressible as a number, and the proposer honours it there.
Guidelines per SDK
- Offer Optimization — the full guardrail set above; this is where guidelines matter most, because the whole run is a search inside them.
- Lead Generation — only read when tailoring is on; scope what tailoring may vary: "hold the 15%, the aisle may change".
- Survey Response — behavioural instructions for the panel rather than commercial caps: "let the unsure stay unsure".
- Assortment Optimization — takes no guidelines at all, on purpose. There is nothing to steer: you set the shelf, prices hold, nothing is on promotion, and the model only says who follows the change. The scenario fields are the whole input.
Tips
- Write them like you would brief a junior campaign manager. Plain sentences beat rule syntax.
- One run, one set: in batch runs the guidelines apply to every row.
- Tight guidelines returning "no offer" for many customers is information, not failure — those customers cost more than they are worth at your caps.