Fintech

How to Build a Support Knowledge Base That Agents Can Search

Antonio Evans9 min read

A split scene: on the left, a support agent at a desk searching a knowledge base on screen; on the right.
Key points

Key points

  1. 1Write each article around one topic and split it into headed sections of roughly 150 to 400 words, so retrieval systems can lift the right paragraph instead of an oversized block.
  2. 2Put a short summary paragraph at the top of every article, because it matches the natural-language queries people and AI assistants type.
  3. 3Add synonyms and alternate phrasings inside the body text, since retrieval depends on the words that actually appear in the document.
  4. 4Attach metadata fields (product, version, audience, intent) so searches can be filtered before ranking, which narrows results and reduces how often the index needs rebuilding.

Start with chunk design, not with the index

Most teams treat knowledge base search as an indexing problem: pick an embedding model, point it at the help center, tune the score threshold. Then results stay mediocre and the instinct is to reindex more often. The more durable fix is upstream. Retrieval quality is largely decided by how the source documents are shaped, and you control that.

Retrieval systems do not read an article the way a person does. They split it into chunks, convert each chunk into a vector, and compare the query vector against them. The chunk is the unit of retrieval, so a badly shaped chunk cannot be rescued by a better model. The chunking survey from SurrealDB puts it directly: split in the wrong place and you sever a sentence mid-thought or lump unrelated ideas together, and any of these degrades the embeddings you produce, which means worse retrieval (chunking strategies compared).

AWS documents a menu of chunking modes for its knowledge bases, including standard fixed-size splitting, hierarchical chunking, semantic chunking and handling of tables and figures (AWS chunking documentation). Each mode is trying to guess where one idea ends and the next begins. When your articles announce those boundaries explicitly with headings, every one of those strategies guesses correctly. That is the cheapest retrieval improvement available to a support team, and it needs no pipeline work at all.

A practical target: a support article of 600 to 1,200 words should carry four to eight headings, each followed by a section that answers one question completely. A reader should be able to land on any single section and solve something without reading above it.

A worked example with numbers

Suppose an article called "Card declines" runs 1,500 words with no subheadings. A fixed-size splitter at 500 tokens with no overlap produces roughly three chunks, each a slice cut wherever the token count ran out. A query like "why was my card declined for a subscription renewal" matches whichever chunk happens to contain those words, possibly a chunk that mostly covers fraud freezes. The agent reads three uncertain results and rephrases the search.

Rewrite the same content as five headed sections: "Declines on recurring subscription charges", "Declines caused by an expired card", "Declines from a fraud hold", "Declines from insufficient funds", and "How to retry a failed payment". A splitter that respects headings now yields five chunks, each internally coherent and each titled. The renewal query lands on the first chunk with high confidence and the answer is one click away. Same word count, same product, and no reindexing involved.

Make headings descriptive, not decorative

A heading is not just navigation for humans; it becomes part of the chunk text and often part of the chunk's title. "Troubleshooting" tells a retrieval system nothing. "Why a renewal payment fails when the card is still valid" carries the query vocabulary itself.

Three rules make headings do retrieval work:

  1. State the problem in the user's words, not the internal feature name.
  2. Avoid headings that are pure labels ("Overview", "Details", "More") unless nothing better fits.
  3. Repeat key terms naturally, even if it feels redundant inside a category where every article is about the same product.

Keep the hierarchy shallow. General help center guidance recommends two levels of nesting and a top-level category count in the single digits: most knowledge bases work best with five to eight top-level categories, and every extra layer is another place a reader can get lost (HelpDocs on knowledge base structure). The same logic applies inside an article. If a section needs three sub-levels, it should probably be its own article.

For readers scanning a results list, a descriptive heading is the preview. For a retrieval system, it is a term-rich anchor. Both benefit from the same rewrite.

Write a summary paragraph that answers the query directly

The first paragraph under the title should state the answer in plain language, in two to four sentences, without requiring any setup. This does two jobs.

For a human agent under time pressure, it is the answer. Kayako's knowledge base guidance anchors on exactly this: customers arrive mid-problem and frustrated, so state the solution up front, then give the step-by-step detail for those who want it (knowledge base practices). Salesforce's article-writing guide makes the same point about leading with the answer before the detail (Salesforce knowledge base guide).

For a machine, the summary is the highest-signal chunk in the article. It usually sits directly under the heading, contains the entity names and the symptom words, and reads in the same register as a customer question. If your retrieval returns a list of snippets, the summary paragraph is what renders as the preview, and it is what determines whether the agent clicks.

Write it as prose, not as a bullet fragment. A summary that reads "Renewal declines: card expired, fraud hold, insufficient funds" is navigable but stylistically unlike a query. "A renewal payment can decline even when the card is valid. The three common causes are a fraud hold, a currency mismatch, and a card network block on recurring charges" reads close to the question a customer actually typed.

Bridge the vocabulary gap with synonyms and alternate phrasings

The single biggest cause of missed retrieval is vocabulary mismatch: the customer says "cancelled," the article says "terminated," or the customer types the name of the old feature while the article uses the new one. Retrieval depends on lexical and semantic overlap, and semantic models close some of that gap but not reliably for product-specific jargon.

The fix is to write the alternate phrasings into the body text rather than hiding them in a tag. A line like "Customers sometimes describe this as a chargeback, a dispute, or a payment reversal; in this product all three refer to the same workflow" costs a sentence and gives every one of those terms a home in the chunk. This is how prompts and context instructions work for generative models as well: the FedPayments Improvement blog describes grounding a model with clear context and industry-standard classification definitions so its output stays aligned with approved practice, rather than drifting toward irrelevant detail (guiding LLMs toward better classification).

A useful habit is to maintain a synonym block per article, either as a visible "Also known as" line or as a metadata field. Do not let it read as keyword stuffing; a natural sentence that mentions the common alternates is enough.

Vocabulary gapWeak article textRetrieval-friendly rewrite
Customer says "refund," product says "credit memo""Issue a credit memo from the billing console.""Issue a credit memo (also called a refund or a credit note) from the billing console."
Customer says "locked out," product says "session invalidated""The session is invalidated after 15 minutes.""You are locked out (the session is invalidated) after 15 minutes of inactivity."
Customer says "cancel," product says "deactivate""Deactivate the subscription here.""Cancel (deactivate) the subscription from Account > Billing."
Customer uses an old feature name"Use the routing rules panel.""Use the routing rules panel (formerly the dispatch rules screen)."

Keep the same table for terminology across the whole base. When one team writes "workspace" and another writes "organization" for the same object, a query using one word misses the article using the other.

Apply metadata so search can filter before it ranks

Metadata is the difference between "here are forty results" and "here are three results from the right product for the right audience." A small, disciplined set of fields is enough:

FieldPurposeExample values
ProductNarrows to the correct surfacePayroll, Cards, Invoicing
VersionPrevents answers about a retired buildcurrent, legacy, migration
AudienceSeparates admin from end user from internal agentend user, account admin, internal
IntentSeparates how-to, troubleshooting, policy and billinghow-to, troubleshoot, policy
OwnerAssigns review responsibilityteam or person
Last reviewedDrives staleness reviewdate

Retrieval providers expose this directly. AWS Bedrock knowledge bases support filtered retrieval over metadata attached to source chunks, and describe reranking options for ordering the returned chunks by relevance (querying a knowledge base). The pattern is consistent across vendors: filter first, then rank, then optionally rerank.

The payoff is that a query such as "admin cannot invite user to payroll" gets filtered to product Payroll and audience account admin before any similarity scoring happens. The right paragraph is now competing against a handful of candidates instead of the whole corpus.

Metadata also governs freshness. The Kapa.ai guidance on keeping a retrieval index in sync recommends per-source refresh schedules rather than one clock for everything, with different intervals for tickets, wikis, code and web crawls (keeping a RAG knowledge base in sync). A last-reviewed field lets you apply the same idea inside the knowledge base: articles tagged to a fast-moving product get reviewed more often than policy pages.

Separate retrieval from generation when you test

You cannot improve what you cannot measure, and the most common measurement mistake is blending retrieval and answer quality into one score. Evaluate them separately. Retrieval evaluation uses ranking metrics such as recall at k with ground truth, or judged relevance of the retrieved context; generation evaluation checks whether the final answer is grounded in what was retrieved (RAG evaluation guide).

A practical test loop for a support knowledge base:

  1. Collect 100 real queries from search logs and ticket subjects.
  2. For each, record the article and section that should have been returned.
  3. Run the queries against the index and record whether the correct section appeared in the top five.
  4. Fix failures by rewriting the heading, adding the missing synonym, or adding metadata, not by reindexing.
  5. Re-run after each batch of edits and watch the top-five hit rate move.

Content fixes and index fixes fail in different ways, and separating the measurement tells you which one to spend effort on. If a query misses because the article never uses the customer's word, no amount of reindexing helps. If it misses because the chunk spans three topics, restructuring helps.

Clinical triage research shows the same principle at scale: a retrieval-augmented system built around a structured case database outperformed a prompt-only model on multi-level triage classification, with the authors attributing gains to multi-evidence retrieval over case records alongside the model (multi-evidence clinical reasoning study). Structured source content is the variable, not model size.

Reduce reindex churn by fixing content first

Every knowledge team eventually builds a refresh pipeline: change detection per source, incremental delta updates, validation before publish, and monitoring. Kapa.ai's breakdown of that work is sobering: incremental updates keep a base current far more cheaply than full re-indexing, and "embedding rot" sets in when content or models age out, with a suggested re-embed once roughly 10 to 15 percent of the corpus changes (sync guidance).

Staleness has its own cost. Atlan's analysis reports that stale embeddings can degrade retrieval accuracy by up to 20 percent with no uncertainty signal reaching the user, and argues that faster re-indexing just propagates bad information more efficiently when the source itself is ungoverned (LLM knowledge base staleness). That is the argument for content design as a freshness strategy: a base whose chunks are small, headed and metadata-tagged tolerates slower, cheaper refresh cycles because each changed section maps to a small, identifiable delta.

The decision rule is straightforward. If a query fails because the answer is not in the corpus, fix the corpus. If it fails because the corpus is out of date, fix the refresh cadence. If it fails because the answer is buried in a 1,500-word wall with vague headings, fix the article, and you will not need to shorten your reindex interval to compensate.

A quick checklist before publishing

  • One topic per article, with a title that states the problem.
  • A two-to-four sentence summary at the top that answers the query in plain language.
  • Four to eight descriptive headings per 1,000 words, each section self-contained.
  • Alternate phrasings for the terms customers actually type, written into the body.
  • Product, version, audience and intent metadata filled in, plus an owner and a review date.
  • Consistent terminology with the rest of the base.

Turning the checklist into a pipeline

Once the template is agreed, enforcing it is a parsing job, not a writing job. A small script can flag articles that break the rules before they reach the index:

import re

MAX_WORDS, MIN_HEADS, MAX_HEADS = 1200, 3, 8

def lint_article(md: str, meta: dict) -> list[str]:
    problems = []
    body = md.split("\n", 1)[-1]                 # drop the H1
    words = len(body.split())
    heads = re.findall(r"^##\s+(.+)$", body, re.M)
    if words > MAX_WORDS:
        problems.append(f"{words} words, split the article")
    if not MIN_HEADS <= len(heads) <= MAX_HEADS:
        problems.append(f"{len(heads)} headings, target {MIN_HEADS}-{MAX_HEADS}")
    for h in heads:
        if len(h.split()) < 3:
            problems.append(f"vague heading: {h}")
    for field in ("product", "version", "audience", "intent", "owner"):
        if not meta.get(field):
            problems.append(f"missing metadata: {field}")
    return problems

Run it in CI on every pull request to the docs repo. Failures are cheap to fix at authoring time and expensive to fix after six months of drift.

When you are building the search front end or an agent that queries the base, the model choice is the easy part to vary. Quanta Inference exposes text, image, video, audio and embedding models through one OpenAI-compatible API key with prepaid US-dollar pricing, which lets you swap an embedding model without rewriting the pipeline (Quanta Inference).

FAQ

FAQ

How long should each section of a support article be?

Aim for 150 to 400 words per headed section. That range keeps a chunk large enough to contain a complete answer and small enough that a similarity match is specific rather than diffuse. Sections that run past 400 words usually contain two ideas and should be split into two headings. Sections under about 100 words often belong as a bullet inside a neighboring section.

Does adding synonyms hurt search relevance?

Not when they appear in natural sentences. The risk is only with mechanical keyword lists appended to an article, which add little to the semantic vector and look like stuffing to readers. Write the alternate phrasings into a real sentence, such as "also called a refund or credit note," so both the reader and the retrieval system benefit. Keep the canonical term in the heading.

Should the summary paragraph repeat the title?

No. The title states the problem and the summary states the answer. Repeating the title wastes the highest-signal position in the article and pushes the useful sentence further down. If the summary reads like a restatement of the heading, rewrite it to start with the resolution.

How often should the index be rebuilt if the content is well structured?

Rebuild incrementally on a per-source schedule rather than one global clock, and re-embed the whole corpus when a large share of it has changed. The Kapa.ai guidance suggests re-embedding once roughly 10 to 15 percent of the corpus changes (sync guidance). Well-chunked content makes each delta smaller and more identifiable, so refresh cycles can be slower and cheaper.

What metadata fields are actually worth maintaining?

Product, version, audience, intent, owner and last-reviewed date cover most support needs. Every additional field has to be filled in and kept current, so add one only when you can name the query that would use it as a filter. Wear out the six above before adding a seventh.

Sources

Sources

  1. What chunking strategies exist and how to choose one?
  2. How content chunking works for knowledge bases
  3. How to structure a knowledge base
  4. 5 Best Practices for Keeping a Killer Knowledge Base
  5. How You Can Write a Good Knowledge Base Article
  6. Guiding Large Language Models (LLMs) Toward Better ...
  7. Query a knowledge base and retrieve data - Amazon Bedrock
  8. How to Keep a RAG Knowledge Base in Sync ...
  9. A complete guide to RAG evaluation: metrics, testing and ...
  10. Multi-Evidence Clinical Reasoning With Retrieval ...
  11. LLM Knowledge Base Staleness: Scoring, Causes, and ...
About the author

About the author

Antonio Evans
Antonio Evans

Antonio Evans is the founder of Quanta Intelligence and a fractional CTO who builds HIPAA-ready AI systems for health and life-science companies. Before that he was technical co-founder of FriendsEAT for twenty years, CEO of Socialdraft, and a data engineer at IBM. Antonio lives with his dog Santino in Lisbon, Portugal.

All articles