Platform teams drown in interrupt questions whose answers exist in TechDocs, runbooks, and old Slack threads.
Tier: Core · Hands-on time: ~90 minutes
A RAG assistant over your platform docs deflects a real share of those tickets — but only if it behaves like a good platform engineer: cites its sources, says "I don't know" instead of inventing a kubectl command, and never answers from stale docs. This playbook builds that bot, puts refusal behavior and corpus freshness in from day one, and measures deflection honestly. DORA's AI Capabilities Model calls this capability "AI-accessible internal data" — it is one of the seven things that make org-level AI adoption actually pay off.
Do not build this if your docs are thin or mostly wrong — RAG amplifies your corpus, including its rot. Fix the top-20 documents first (this playbook's corpus audit shows you which ones).
Audit and stamp the corpus first. Before embedding anything, run runbook-rot detection: for each doc, extract commands/versions/URLs and check them against current reality (does the CLI flag still exist, does the linked dashboard resolve, is the cluster name current?). AI does the extraction and comparison lists; you confirm. Tag every doc with last-verified date and an owner. Docs failing the audit get fixed or excluded — an authoritative-sounding bot serving stale runbooks is worse than no bot.
Ingest with metadata that enables refusal. Chunk by heading; store source path, section anchor, last-verified, and doc owner with each chunk. These fields power citations ("per docs/deploy.md#canary, verified 2026-06") and staleness warnings at answer time.
Constrain generation to retrieved context.
You answer internal platform questions ONLY from the provided context
chunks. Rules:
- Every answer must cite source file + section for each claim.
- If the context does not contain the answer, reply exactly:
"I don't have this in the platform docs" + the 2 closest docs +
"ask #platform-help". Never construct commands or config from
general knowledge.
- If any cited chunk has last-verified older than 90 days, append a
staleness warning naming the doc owner.
- Prefer quoting exact commands from docs over paraphrasing them.
The refusal string is a feature, not a failure: a wrong-but-confident helm upgrade command costs more than ten "I don't know"s.
Build the eval set before launch: 20 questions, 5 unanswerable. From real ticket history: 15 questions your docs do answer (with expected source), and 5 your docs genuinely do not. Score: answer accuracy, citation correctness (the cited section really supports the answer), and refusal correctness (all 5 unanswerables refused). Gate launch on refusal correctness — it is the trust-critical metric, and re-run the set on every corpus or prompt change.
Ship narrow, then widen. Launch to the platform team, then one friendly product team, in the channel where questions already arrive. Log every question, answer, citation, and a thumbs-up/down. Weekly triage of thumbs-down: wrong retrieval → chunking/metadata fix; wrong docs → docs fix (with the owner from step 1); should-have-refused → prompt fix. Each is a different repair; the logs tell you which.
Wire the deflection loop and measure honestly. Connect to your ticket intake: classify incoming platform tickets, auto-answer only above a confidence threshold and always with citations, route everything else to a human with the retrieved context attached (making the human faster too). Report deflection as "tickets resolved by bot answer with no human follow-up" — not "tickets the bot replied to".
Refusal behavior is the product. An internal bot earns trust by the questions it declines to answer as much as the ones it answers with citations.
RAG over confidential docs moves the compliance question from "what did you paste?" to "where do the embeddings and logs live?" — answer it before ingestion, not after.