A chatbot with "your website" as the brain will answer with whatever marketing page ranks first. A first-line library is smaller and meaner: the replies you already send, cleaned, approved, and the only text a model may use.
This is not a 24/7 agent. It is a drawer of answers a human still sends.
What good looks like
A useful library has 15 to 40 intents, not 400. Each card has:
- Intent name a tired agent will recognize
- When to use / when not to use
- The approved reply (the words you would send)
- Slots the model may fill (order number, date the customer already gave)
- Escalation: who, and what the model must not say while waiting
If you cannot fit an intent on one page, it is two intents or it is a judgment call. Judgment stays human.
Step 1: Mine a month, not a vision
Export or copy the last 20 to 40 real threads. If you cannot export, sit with the inbox for one hour and write titles.
Cluster by what the customer wanted, not by department:
- Where is my order
- Change the ship-to
- This arrived damaged
- How do I return
- Your price does not match the site
- Cancel
- A human, please
Ignore one-off novels. If it happened once, it is not first-line.
Step 2: Write the card from a real send
Do not ask a model to invent your voice from a brand adjective. Take a reply a good agent already sent. Strip the name and the unique facts. That is the approved text.
Then write the fences:
- Use when
- Do not use when (the exception that needs a person)
- Allowed slots
- Forbidden adds (refunds, credits, legal admissions, "I have processed")
Step 3: The only job the model gets
The model selects a card and fills slots. It does not compose policy.
You are a first-line draft assistant. You may use only the LIBRARY. You may fill slots with facts that appear in TICKET. You may not add a promise, a number, a policy, or an apology that is not in the selected card.
>
Steps:
1. Name the top intent, or NONE.
2. If NONE or if two cards fit and the ticket is an exception, output ESCALATE: [why] and a one-line hold reply from the ESCALATION card only.
3. If one card fits, output: intent, card id, draft with slots filled, and UNFILLED: [list].
4. If a slot is missing, ask for it. Do not guess.
>
Eval:
- Every sentence is from the card or a slot value present in TICKET.
- I would send this.
>
LIBRARY:
[paste the relevant cards, not the whole company]
>
TICKET:
[redacted thread]
Start with five cards in the prompt, not the whole drawer. Add cards when the NONE rate is high.
Step 4: Hold and escalate on purpose
Write one ESCALATION card. Everyone uses the same hold language.
Example hold: "I am passing this to [team]. I do not have a decision on the exception. I will not guess a timeline."
That sentence has saved more brand trust than a confident wrong refund.
Worked mini-library (three cards)
Card R1 — Where is my order
Use when they give an order number and ask for status. Do not use when they say it was stolen from the porch (R3 / escalate).
Approved: "Order [ORDER] is in [STATUS]. Tracking: [URL]. If tracking is stale more than [N] business days, reply here and I will open a carrier trace."
Slots: ORDER, STATUS, URL, N — all must come from the ticket or the live system the human pasted.
Forbidden: promising a delivery date the carrier did not give.
Card R2 — Standard return start
Use when the item is unopened and inside the window in the ticket. Do not use for opened electronics if your policy forbids it.
Approved: "If [ITEM] is unopened and the purchase date is within [WINDOW] days, I will send a prepaid label. Reply with the order number if it is not already in this thread."
Forbidden: "I have issued the refund."
Card R3 — Damaged on arrival
Use when they report damage and can send a photo. Escalate if injury or a safety issue.
Approved: "Send one photo of [ITEM] and the packaging. Once I have those, I will follow the damage card — replacement or return label — I will not guess which until I see the photo."
Decision rules
- Fewer than 10 repeating intents? Write the cards. You may not need a model yet. A shared doc plus search is a library.
- Agent edits every draft heavily? The card is wrong, or you put a J step in an M job.
- Model keeps blending two cards? Your intents overlap. Split or add a "do not use when."
- You want this on the website as a bot: not until a human has used the library for two weeks and the NONE/ESCALATE reasons are boring.
Failure modes
- Novelist model: no library in the prompt, just "be our support team."
- Stale cards: policy changed, library did not. Date every card. Review monthly in the weekly ops cadence.
- Slot fiction: the model invents STATUS because the ticket had no tracking. That is an eval fail, not a wording issue.
- Infinite FAQ: 200 cards, no one can update them. Cap the first-line set. Everything else is escalate.
Download
Card template and intake sheet: /downloads/faq-reply-library-template.md
You are done when
A second agent can pick a card without you, and a model draft that leaves the card language is an automatic no-ship.