<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Knowledge Base on GENIE.AI</title><link>https://genie-ai-7e342b.opensource.unicc.org/docs/knowledge-base/</link><description>Recent content in Knowledge Base on GENIE.AI</description><generator>Hugo</generator><language>en</language><atom:link href="https://genie-ai-7e342b.opensource.unicc.org/docs/knowledge-base/index.xml" rel="self" type="application/rss+xml"/><item><title>Ingestion</title><link>https://genie-ai-7e342b.opensource.unicc.org/docs/knowledge-base/ingestion/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://genie-ai-7e342b.opensource.unicc.org/docs/knowledge-base/ingestion/</guid><description>&lt;p&gt;Ingestion turns a raw uploaded file into searchable, labelled, embedded chunks in
ArangoDB. It runs automatically once a file is uploaded; no manual trigger is
needed. The pipeline is designed so that &lt;strong&gt;a failure at any stage never loses the
file&lt;/strong&gt; — the upload is stored first, then processed.&lt;/p&gt;
&lt;h2 id="the-pipeline"&gt;The pipeline&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;1. Upload — file received by the document-repository service
2. Antivirus scan — ClamAV scans the file; infected files are rejected
3. Store — file saved to disk; a file_id is assigned
4. Parse — docling extracts text + structure (headings, tables)
5. Chunk — text split into retrieval-sized chunks
6. Label — each chunk labelled against the service taxonomy
7. Context prefix — (if enabled) an LLM doc-context prefix is prepended
8. Embed — each chunk vectorised with the embedding model
9. Store — chunks, embeddings, labels, and graph nodes written to ArangoDB
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Steps 4–9 are owned by the &lt;strong&gt;dataprep&lt;/strong&gt; service
(&lt;code&gt;genie-ai-overlay/dataprep/&lt;/code&gt;). The whole sequence is observable end-to-end — see
&lt;a href="https://genie-ai-7e342b.opensource.unicc.org/docs/observability/"&gt;Observability&lt;/a&gt; for how to watch a specific
file&amp;rsquo;s ingestion in the traces and the ingestion log.&lt;/p&gt;</description></item><item><title>Document Lifecycle</title><link>https://genie-ai-7e342b.opensource.unicc.org/docs/knowledge-base/document-lifecycle/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://genie-ai-7e342b.opensource.unicc.org/docs/knowledge-base/document-lifecycle/</guid><description>&lt;p&gt;Every document in the knowledge base has a lifecycle: it is uploaded, processed,
made retrievable, and eventually updated or removed. Each document is tracked by
a stable &lt;code&gt;file_id&lt;/code&gt;, so its status, chunks, and graph footprint are all addressable.&lt;/p&gt;
&lt;h2 id="states"&gt;States&lt;/h2&gt;
&lt;p&gt;A document moves through these states (recorded as &lt;code&gt;dataprep.status&lt;/code&gt;):&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;State&lt;/th&gt;
 &lt;th&gt;Meaning&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;em&gt;uploaded&lt;/em&gt;&lt;/td&gt;
 &lt;td&gt;File received and virus-scanned; stored on disk. Not yet searchable.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;em&gt;processing&lt;/em&gt;&lt;/td&gt;
 &lt;td&gt;Dataprep is parsing, chunking, labelling, and embedding.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;em&gt;completed&lt;/em&gt;&lt;/td&gt;
 &lt;td&gt;All chunks indexed; the document is retrievable.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;em&gt;failed&lt;/em&gt;&lt;/td&gt;
 &lt;td&gt;Processing failed; the document is &lt;strong&gt;not&lt;/strong&gt; searchable. Check the ingestion log for the reason.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Only documents in the &lt;strong&gt;completed&lt;/strong&gt; state contribute to answers. A document
stuck in &lt;em&gt;processing&lt;/em&gt; or in &lt;em&gt;failed&lt;/em&gt; is invisible to retrieval.&lt;/p&gt;</description></item><item><title>Labelling &amp; Taxonomy</title><link>https://genie-ai-7e342b.opensource.unicc.org/docs/knowledge-base/labelling-taxonomy/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://genie-ai-7e342b.opensource.unicc.org/docs/knowledge-base/labelling-taxonomy/</guid><description>&lt;p&gt;Labelling is what keeps a multi-domain knowledge base from bleeding across
topics. Every chunk is assigned one or more &lt;strong&gt;labels&lt;/strong&gt; drawn from the
&lt;strong&gt;service-category taxonomy&lt;/strong&gt;, and at query time the retriever uses those labels
to return only on-topic chunks. Without labels, a question about one service
could pull in unrelated chunks from another.&lt;/p&gt;
&lt;h2 id="the-taxonomy"&gt;The taxonomy&lt;/h2&gt;
&lt;p&gt;The taxonomy is the &lt;strong&gt;service-category hierarchy&lt;/strong&gt; — the set of categories and
services the deployment answers about. It is managed in the backend
(&lt;code&gt;serviceCategories&lt;/code&gt;, &lt;code&gt;services&lt;/code&gt;) and is the same structure the application uses
to organise its service catalogue.&lt;/p&gt;</description></item><item><title>Content Guidance</title><link>https://genie-ai-7e342b.opensource.unicc.org/docs/knowledge-base/content-guidance/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://genie-ai-7e342b.opensource.unicc.org/docs/knowledge-base/content-guidance/</guid><description>&lt;p&gt;The single biggest factor in GENIE.AI answer quality is the &lt;strong&gt;quality of the
documents in the knowledge base&lt;/strong&gt;. No amount of retrieval tuning fixes documents
that are poorly structured, ambiguous, or full of content the parser cannot read.
This page is practical guidance for the people choosing and preparing source
documents.&lt;/p&gt;
&lt;h2 id="what-retrieves-well"&gt;What retrieves well&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Clean, text-based documents&lt;/strong&gt; — real text the parser can extract, not scanned
images.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Clear structure&lt;/strong&gt; — headings, sections, lists. Structure helps both chunking
(cleaner chunk boundaries) and the knowledge graph.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Self-contained sections&lt;/strong&gt; — a chunk that makes sense on its own retrieves far
better than one full of &amp;ldquo;see above&amp;rdquo; or dangling pronouns.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;One topic per section&lt;/strong&gt; — focused sections produce precise labels.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Explicit language&lt;/strong&gt; — the words a user would actually type. A document that
calls it &amp;ldquo;the Programme&amp;rdquo; everywhere will not retrieve for &amp;ldquo;permit renewal&amp;rdquo;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="what-retrieves-poorly"&gt;What retrieves poorly&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Scanned / image-only PDFs&lt;/strong&gt; — there is little or no extractable text; the
chunk is near-empty. OCR these into real text first.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Table-heavy documents&lt;/strong&gt; — most chunks become padded table rows with low
information density and poor labels. This is a known, expected pattern, not a
labelling bug.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Documents that are all boilerplate&lt;/strong&gt; — headers/footers repeated on every page
pollute chunks.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Enormous, undifferentiated documents&lt;/strong&gt; — without structure, chunks are
arbitrary windows of text.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="chunking"&gt;Chunking&lt;/h2&gt;
&lt;p&gt;The dataprep splits parsed text into retrieval-sized chunks. You do not control
chunk boundaries directly, but you influence their quality through document
structure: well-headed documents chunk cleanly; wall-of-text documents chunk
arbitrarily. If a specific document retrieves badly, the first fix is almost
always the document&amp;rsquo;s structure, not a pipeline knob.&lt;/p&gt;</description></item></channel></rss>