Content Modules

How the assistant picks its sources

Updated 88 views

Under an answer, the assistant shows a Sources row: the help articles that answer came from. It is deliberately narrower than "every article the assistant touched", and narrower than "every article the answer links to".

This page explains the rule, because the difference occasionally surprises people.

The rule

An article earns a place in the Sources row when the assistant read its text. There are two ways that happens:

  1. It opened the article. When the assistant fetches one specific article in full, that article is a source — whether or not the answer ends up linking to it. Opening it is the evidence.

  2. A search returned it and the answer cited it. A search hands the assistant up to ten candidates with excerpts. The citation is what tells us which of those it actually used, so a search result the answer never links to is not a source.

An article the assistant only saw as a title in a listing is never a source. Listings — "what does your help center cover?", browsing a category, the most recent articles — return titles, not article text. A link copied out of one is a signpost, not something the answer was built on.

Ask the assistant to list your articles and it will reply with a tidy list of links, and no Sources row at all. That is correct: it read no article to produce that answer. It listed them. A Sources row restating the same links directly under them would be noise.

Every one of those links still works. Clicking any of them opens the article, exactly as a cited link does. Only the chips are filtered.

The short version:

  • Links in the answer — everywhere the assistant pointed you.

  • Chips in the Sources row — the articles behind what it said.

Why this matters when you write

The Sources row is a claim about provenance, so it is worth trusting. If an answer shows chips, the assistant had those articles' text in front of it when it wrote. If it shows none, the answer came from a listing, from the page the visitor was on, or from general knowledge.

That last case is worth watching for. An answer with no sources on a substantive product question usually means your help center did not cover it — which is exactly what the No article cited filter surfaces in the Conversations tab. See Read what visitors asked your assistant.

For developers

Each source object carries a consulted boolean:

TypeScript
for await (const chunk of kookee.help.chatStream({ messages })) {
  if (chunk.type === 'sources') {
    const shown = chunk.sources.filter((source) => source.consulted !== false);
  }
}
  • consulted: true — the answer was built on this article.

  • consulted: false — the answer linked it out of a listing.

  • absent — an older server that predates the field. Treat a missing value as true.

Keep the full sources array for resolving inline citation clicks, and filter it only for display. The built-in widget already does both: onSourceClick fires for a chip and for an inline citation, including citations whose article has no chip.

Available in @kookee/sdk and @kookee/react 1.6.2 and later.

Was this article helpful?