Knowledge base & "Ask about this course"
A course's knowledge base is built from two sources - documents an instructor uploads, and the course's own lesson content - and powers two different features: grounding the instructor's own AI-generation tools, and a learner-facing Q&A widget. All three pieces (uploads, generation grounding, learner Q&A) are gated by separate flags - see Feature flags.
Uploading documents
From the Course Builder Studio's Documents tab (see
Course Builder Studio): PDF or .docx, up to
50MB. Upload only works if the tenant's "documents in knowledge base"
flag is on - an already-uploaded document stays listable, previewable,
and deletable even if the flag is later turned off, only new uploads
are blocked.
Ingestion
Uploading launches an out-of-band ingestion job (not part of the upload request itself): the document is downloaded from storage, its text extracted, split into overlapping chunks, and each chunk embedded and stored. Ingestion is idempotent - re-running it for the same document replaces its chunks rather than duplicating them. If it fails (for example, a third-party rate limit), the document's status shows Failed with an error message in the Documents tab, rather than silently staying stuck.
Lesson content is ingested the same way, so a lesson's text becomes searchable even without any uploaded document - tracked as a separate status list from document ingestion, visible alongside it in the Studio. Unlike a document, a lesson isn't re-ingested on every save: it becomes due only once its course is published, and what gets embedded is that published snapshot's content, never a draft in progress (ADR-074) - editing a lesson without publishing never touches the index, and republishing re-ingests every lesson in the new version.
Grounding instructor-side generation
When the "knowledge base for generation" flag is on, the AI generation tools in the Studio (drafting lesson content, diagrams, exam questions, and similar) retrieve relevant chunks from the course's knowledge base first, so the output is grounded in that course's own material instead of working from the prompt alone. This isn't a hard gate - with the flag off, generation still works, it just never gets that grounding.
"Ask about this course" (learner-facing)
A floating widget, gated by the "learner Q&A" flag, shown to enrolled members on both the course landing page and every lesson page. A learner types a question; the answer comes back with source citations
- a lesson source links straight to that lesson, a document source is named but never linked (members never get direct document access, only the retrieval-augmented answer). Each question is a fresh, independent round trip - closing the widget discards the exchange, there's no saved conversation history to return to.
Lesson-derived context always comes from the course's last published version, regardless of what the "Learners read published versions" flag does for browsing (see Learner experience) - this widget answers from what's actually live, even for an instructor previewing it. Document-derived context is unaffected either way (uploaded documents aren't versioned).