<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>PageIndex on KnightLi Blog</title>
        <link>https://knightli.com/en/tags/pageindex/</link>
        <description>Recent content in PageIndex on KnightLi Blog</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>en</language>
        <lastBuildDate>Wed, 20 May 2026 23:51:37 +0800</lastBuildDate><atom:link href="https://knightli.com/en/tags/pageindex/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>What Is PageIndex? A Reasoning-Based RAG Document Index Without Vector Databases</title>
        <link>https://knightli.com/en/2026/05/20/vectifyai-pageindex-vectorless-rag/</link>
        <pubDate>Wed, 20 May 2026 23:51:37 +0800</pubDate>
        
        <guid>https://knightli.com/en/2026/05/20/vectifyai-pageindex-vectorless-rag/</guid>
        <description>&lt;p&gt;&lt;code&gt;VectifyAI/PageIndex&lt;/code&gt; is an interesting RAG project. Instead of starting with &amp;ldquo;build another vector database,&amp;rdquo; it first organizes long documents into a tree structure similar to a table of contents, then lets an LLM perform reasoning-based retrieval along that tree.&lt;/p&gt;
&lt;p&gt;Project link: &lt;a class=&#34;link&#34; href=&#34;https://github.com/VectifyAI/PageIndex&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;VectifyAI/PageIndex&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;At the time of writing, the GitHub page shows about 31.8k stars and 2.7k forks, with an MIT license. The README positions it as &lt;code&gt;Vectorless, Reasoning-based RAG&lt;/code&gt;: RAG without a vector database, based on reasoning.&lt;/p&gt;
&lt;h2 id=&#34;what-problem-it-tries-to-solve&#34;&gt;What Problem It Tries to Solve
&lt;/h2&gt;&lt;p&gt;The common path for traditional RAG is: chunk the document, vectorize the chunks, store them in a vector database, then retrieve passages by similarity search. This approach is simple, general, and mature, but it often runs into several problems with long professional documents:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Similarity is not the same as true relevance.&lt;/li&gt;
&lt;li&gt;Document structure is broken apart by chunking, and section relationships are lost.&lt;/li&gt;
&lt;li&gt;Retrieval results are hard to explain, making it difficult to say why a passage was selected.&lt;/li&gt;
&lt;li&gt;For financial reports, regulatory filings, legal documents, and technical manuals, questions often require reasoning across sections.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;PageIndex takes the opposite route: first organize the document into a semantic tree, then let the model search it like a human reading a table of contents, jumping into sections, and narrowing down to details.&lt;/p&gt;
&lt;h2 id=&#34;the-basic-pageindex-workflow&#34;&gt;The Basic PageIndex Workflow
&lt;/h2&gt;&lt;p&gt;The README describes PageIndex retrieval in two steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Generate a &lt;code&gt;Table-of-Contents&lt;/code&gt;-like tree index for the document.&lt;/li&gt;
&lt;li&gt;Perform reasoning-based retrieval through tree search.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This tree is not just a file directory. It is a document structure designed for LLM use. Nodes can contain titles, page ranges, summaries, child nodes, and other metadata. When answering a question, the model does not need to face a pile of fragmented chunks immediately. It can first decide which section to enter, then continue searching downward.&lt;/p&gt;
&lt;p&gt;This method is better suited to documents that are well structured but very long, such as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Financial reports and SEC filings.&lt;/li&gt;
&lt;li&gt;Regulatory and compliance documents.&lt;/li&gt;
&lt;li&gt;Academic textbooks and papers.&lt;/li&gt;
&lt;li&gt;Legal documents.&lt;/li&gt;
&lt;li&gt;Technical manuals and product documentation.&lt;/li&gt;
&lt;li&gt;Large PDFs that exceed the model context window.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;how-it-differs-from-traditional-vector-rag&#34;&gt;How It Differs From Traditional Vector RAG
&lt;/h2&gt;&lt;p&gt;PageIndex&amp;rsquo;s main selling points can be summarized in five areas.&lt;/p&gt;
&lt;p&gt;First, it does not require a Vector DB. It relies on document structure and LLM reasoning to locate content, rather than only using vector similarity search.&lt;/p&gt;
&lt;p&gt;Second, it does not use traditional chunking. Documents are organized by natural sections instead of fixed-length text fragments.&lt;/p&gt;
&lt;p&gt;Third, explainability is stronger. The retrieval path can map back to pages, sections, and tree nodes, making it easier to trace than &amp;ldquo;this text was hit by vector similarity.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Fourth, retrieval is context-aware. The question, conversation history, and domain background can all affect the tree search path.&lt;/p&gt;
&lt;p&gt;Fifth, it is closer to how human experts read documents. People usually do not cut an entire document into small chunks and calculate similarity; they first inspect the table of contents, locate sections, and then read details.&lt;/p&gt;
&lt;p&gt;This does not mean vector databases have no value. A more accurate view is that PageIndex fits scenarios where &amp;ldquo;semantic similarity is not enough, and structure plus reasoning need to participate&amp;rdquo; in long-document retrieval.&lt;/p&gt;
&lt;h2 id=&#34;how-to-run-it-locally&#34;&gt;How to Run It Locally
&lt;/h2&gt;&lt;p&gt;The README provides a local self-hosting path. First install dependencies:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip3 install --upgrade -r requirements.txt
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Then create a &lt;code&gt;.env&lt;/code&gt; file in the project root and write your LLM API key. The project supports multiple models through &lt;code&gt;LiteLLM&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;OPENAI_API_KEY&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;your_openai_key_here
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Generate a PageIndex structure for a PDF:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;python3 run_pageindex.py --pdf_path /path/to/your/document.pdf
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Markdown is also supported:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;python3 run_pageindex.py --md_path /path/to/your/document.md
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Common optional parameters include:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--model
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--toc-check-pages
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--max-pages-per-node
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--max-tokens-per-node
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--if-add-node-id
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--if-add-node-summary
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--if-add-doc-description
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;The README also notes that the local open-source version uses standard PDF parsing. For complex PDFs, the project&amp;rsquo;s cloud service provides enhanced OCR, tree building, and retrieval pipelines.&lt;/p&gt;
&lt;h2 id=&#34;agentic-vectorless-rag-example&#34;&gt;Agentic Vectorless RAG Example
&lt;/h2&gt;&lt;p&gt;The project also provides an agentic vectorless RAG example using self-hosted PageIndex and OpenAI Agents SDK. Install the optional dependency and run it:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip3 install openai-agents
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;python3 examples/agentic_vectorless_rag_demo.py
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;The value of this example is that it pushes PageIndex from &amp;ldquo;generate a document tree&amp;rdquo; to &amp;ldquo;let an Agent use the document tree for retrieval.&amp;rdquo; If you are building an enterprise knowledge base, financial report Q&amp;amp;A, regulatory Q&amp;amp;A, or technical documentation Agent, this example is more worth running than only reading the README.&lt;/p&gt;
&lt;h2 id=&#34;cloud-service-mcp-and-api&#34;&gt;Cloud Service, MCP, and API
&lt;/h2&gt;&lt;p&gt;PageIndex is not just a GitHub repo. The project page also lists several entry points:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Self-hosting: run the open-source code locally, suitable for experiments and controlled deployments.&lt;/li&gt;
&lt;li&gt;Chat Platform: a ChatGPT-style document analysis platform.&lt;/li&gt;
&lt;li&gt;MCP / API: useful for integrating with existing Agents or automation workflows.&lt;/li&gt;
&lt;li&gt;Enterprise: for private or on-premises deployment.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This shows that its positioning is not a simple demo. It aims to turn &amp;ldquo;reasoning-based document retrieval&amp;rdquo; into an integrable document intelligence infrastructure.&lt;/p&gt;
&lt;h2 id=&#34;suitable-scenarios&#34;&gt;Suitable Scenarios
&lt;/h2&gt;&lt;p&gt;PageIndex is suitable for tasks such as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Long PDF Q&amp;amp;A.&lt;/li&gt;
&lt;li&gt;Financial reports, annual reports, prospectuses, and regulatory filing analysis.&lt;/li&gt;
&lt;li&gt;Legal and compliance document retrieval.&lt;/li&gt;
&lt;li&gt;Technical manual Q&amp;amp;A.&lt;/li&gt;
&lt;li&gt;Multi-section textbook or paper retrieval.&lt;/li&gt;
&lt;li&gt;Enterprise knowledge bases that need explainable retrieval paths.&lt;/li&gt;
&lt;li&gt;Providing structured document context to Agents.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If your material is short, has little structure, or is just a normal FAQ, traditional embedding + vector DB may already be enough. PageIndex&amp;rsquo;s advantages are more likely to appear in long documents, strong structure, professional domains, and questions that require reasoning.&lt;/p&gt;
&lt;h2 id=&#34;things-to-watch&#34;&gt;Things to Watch
&lt;/h2&gt;&lt;p&gt;First, PageIndex still depends on LLMs. Tree building, summaries, and retrieval quality are affected by model capability, prompts, and document parsing quality.&lt;/p&gt;
&lt;p&gt;Second, the local version uses standard PDF parsing. Complex scanned documents, chart-heavy PDFs, or messy layouts may require OCR and stronger preprocessing.&lt;/p&gt;
&lt;p&gt;Third, vectorless does not mean zero cost. Tree building itself also consumes model calls and time, especially for large-scale document collections.&lt;/p&gt;
&lt;p&gt;Fourth, PageIndex is more like a document structure indexing and reasoning retrieval framework. It does not directly replace every RAG stack. In production, it may also be combined with vector retrieval, keyword retrieval, permission control, caching, and audit systems.&lt;/p&gt;
&lt;h2 id=&#34;summary&#34;&gt;Summary
&lt;/h2&gt;&lt;p&gt;What makes PageIndex interesting is that it shifts RAG from &amp;ldquo;text similarity retrieval&amp;rdquo; toward &amp;ldquo;document structure + LLM reasoning.&amp;rdquo; For long and professional documents, this direction is worth watching.&lt;/p&gt;
&lt;p&gt;If you are building enterprise document Q&amp;amp;A, financial report analysis, regulatory retrieval, or technical manual Agents, PageIndex is a new RAG architecture reference: give documents structure first, then let the model reason along that structure, instead of breaking everything into chunks and putting it all into a vector database from the beginning.&lt;/p&gt;
&lt;p&gt;References:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/VectifyAI/PageIndex&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;GitHub: VectifyAI/PageIndex&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>OpenKB: Compiling Documents into a Continuously Updated LLM Knowledge Base</title>
        <link>https://knightli.com/en/2026/05/17/openkb-llm-knowledge-base/</link>
        <pubDate>Sun, 17 May 2026 17:15:08 +0800</pubDate>
        
        <guid>https://knightli.com/en/2026/05/17/openkb-llm-knowledge-base/</guid>
        <description>&lt;p&gt;OpenKB is an open-source LLM knowledge base tool from VectifyAI.&lt;/p&gt;
&lt;p&gt;It is not a traditional RAG system that chunks documents, vectorizes them, and then stitches context back together at query time. Instead, it first compiles raw documents into a structured wiki: document summaries, concept pages, cross-references, follow-up queries, and lint checks. In other words, it feels more like a knowledge-base CLI that keeps organizing your material over time.&lt;/p&gt;
&lt;p&gt;Project link: &lt;a class=&#34;link&#34; href=&#34;https://github.com/VectifyAI/OpenKB&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/VectifyAI/OpenKB&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;the-short-version&#34;&gt;The Short Version
&lt;/h2&gt;&lt;p&gt;OpenKB is worth watching for three reasons:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;It outputs the knowledge base as ordinary Markdown files instead of locking it inside a dedicated database.&lt;/li&gt;
&lt;li&gt;It uses PageIndex for long PDFs, focusing on vector-database-free retrieval for long documents.&lt;/li&gt;
&lt;li&gt;It emphasizes &amp;ldquo;knowledge compilation&amp;rdquo;: the LLM generates summaries, concept pages, and cross-links instead of retrieving from scratch on every question.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;That makes OpenKB better suited to long-term knowledge accumulation: paper reading, project documentation, internal company materials, technical standards, product research, and personal knowledge bases.&lt;/p&gt;
&lt;p&gt;It is not a universal replacement. If you need high-concurrency online Q&amp;amp;A, complex permissions, a web admin console, enterprise audit trails, or large-scale multi-tenancy, OpenKB currently looks more like a developer tool and knowledge-base prototype than a complete enterprise knowledge platform.&lt;/p&gt;
&lt;h2 id=&#34;what-openkb-is&#34;&gt;What OpenKB Is
&lt;/h2&gt;&lt;p&gt;OpenKB stands for Open Knowledge Base.&lt;/p&gt;
&lt;p&gt;It works as a CLI: it converts, organizes, summarizes, and writes documents into a set of wiki files. The official README describes it directly: OpenKB uses LLMs to compile raw documents into a structured, interlinked wiki-style knowledge base, with PageIndex providing vectorless long-document retrieval.&lt;/p&gt;
&lt;p&gt;Supported input formats include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;PDF&lt;/li&gt;
&lt;li&gt;Word&lt;/li&gt;
&lt;li&gt;Markdown&lt;/li&gt;
&lt;li&gt;PowerPoint&lt;/li&gt;
&lt;li&gt;HTML&lt;/li&gt;
&lt;li&gt;Excel&lt;/li&gt;
&lt;li&gt;Plain text&lt;/li&gt;
&lt;li&gt;Other formats that markitdown can convert&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The generated knowledge base lives under &lt;code&gt;wiki/&lt;/code&gt; and mainly includes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;index.md&lt;/code&gt;: knowledge base overview&lt;/li&gt;
&lt;li&gt;&lt;code&gt;log.md&lt;/code&gt;: operation timeline&lt;/li&gt;
&lt;li&gt;&lt;code&gt;AGENTS.md&lt;/code&gt;: knowledge base structure and maintenance instructions&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sources/&lt;/code&gt;: converted source text&lt;/li&gt;
&lt;li&gt;&lt;code&gt;summaries/&lt;/code&gt;: summaries for each document&lt;/li&gt;
&lt;li&gt;&lt;code&gt;concepts/&lt;/code&gt;: cross-document concept pages&lt;/li&gt;
&lt;li&gt;&lt;code&gt;explorations/&lt;/code&gt;: saved query results&lt;/li&gt;
&lt;li&gt;&lt;code&gt;reports/&lt;/code&gt;: lint reports&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The biggest benefit of this design is transparency. You can open the Markdown files directly instead of only receiving answers through a black-box retrieval interface.&lt;/p&gt;
&lt;h2 id=&#34;how-it-differs-from-traditional-rag&#34;&gt;How It Differs from Traditional RAG
&lt;/h2&gt;&lt;p&gt;A typical traditional RAG pipeline looks like this:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Chunk the documents.&lt;/li&gt;
&lt;li&gt;Generate embeddings.&lt;/li&gt;
&lt;li&gt;Store them in a vector database.&lt;/li&gt;
&lt;li&gt;Retrieve relevant chunks at query time.&lt;/li&gt;
&lt;li&gt;Feed those chunks to the LLM to generate an answer.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;That workflow is mature and works well for Q&amp;amp;A systems. But it has one problem: the knowledge itself does not really accumulate. Every question repeats the work of finding chunks, assembling context, and generating an answer.&lt;/p&gt;
&lt;p&gt;OpenKB is closer to &amp;ldquo;organize first, ask later&amp;rdquo;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Documents enter &lt;code&gt;raw/&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Short documents are converted to Markdown with markitdown.&lt;/li&gt;
&lt;li&gt;Long PDFs go through PageIndex to produce tree indexes and summaries.&lt;/li&gt;
&lt;li&gt;The LLM generates document summaries.&lt;/li&gt;
&lt;li&gt;The LLM reads existing concept pages and creates or updates cross-document concepts.&lt;/li&gt;
&lt;li&gt;The knowledge base index, log, and cross-links are updated.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;As a result, adding one document does more than create another searchable file. It may update a dozen wiki pages. Knowledge is written into concept pages and connected to existing material.&lt;/p&gt;
&lt;p&gt;This is closer to how humans maintain knowledge bases: when new material arrives, you do not just archive it; you update topic pages, summarize differences, and add references.&lt;/p&gt;
&lt;h2 id=&#34;what-pageindex-solves&#34;&gt;What PageIndex Solves
&lt;/h2&gt;&lt;p&gt;Long documents have always been difficult for RAG and LLM knowledge bases.&lt;/p&gt;
&lt;p&gt;If you simply split a long PDF into many chunks, several problems appear:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Chapter relationships are lost.&lt;/li&gt;
&lt;li&gt;Tables, images, and footnotes are hard to handle.&lt;/li&gt;
&lt;li&gt;Retrieved snippets are too fragmented, so answers lack global structure.&lt;/li&gt;
&lt;li&gt;Even a large context window is not ideal for stuffing an entire document into the prompt.&lt;/li&gt;
&lt;li&gt;Long summary chains can compress away important details.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;OpenKB uses PageIndex for long PDFs. According to the project description, PageIndex builds tree indexes and summaries for long documents, letting the LLM reason over the document tree instead of reading the whole document directly.&lt;/p&gt;
&lt;p&gt;The focus is not &amp;ldquo;the few text snippets with the highest vector similarity.&amp;rdquo; It is about helping the model use document hierarchy to find relevant content. For research reports, papers, manuals, prospectuses, and compliance documents, this direction makes a lot of sense.&lt;/p&gt;
&lt;p&gt;OpenKB can use the open-source PageIndex locally by default. If you need OCR, complex PDF handling, or faster structure generation, you can configure &lt;code&gt;PAGEINDEX_API_KEY&lt;/code&gt; to use PageIndex Cloud.&lt;/p&gt;
&lt;h2 id=&#34;install-and-quick-start&#34;&gt;Install and Quick Start
&lt;/h2&gt;&lt;p&gt;Install OpenKB with pip:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install openkb
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Or install the latest GitHub version:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install git+https://github.com/VectifyAI/OpenKB.git
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;For editable source installation:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone https://github.com/VectifyAI/OpenKB.git
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; OpenKB
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install -e .
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Create a knowledge base directory:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir my-kb &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; my-kb
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;openkb init
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Add documents:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;openkb add paper.pdf
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;openkb add ~/papers/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Ask a question:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;openkb query &lt;span class=&#34;s2&#34;&gt;&amp;#34;What are the main findings?&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Start an interactive chat:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;openkb chat
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;If you want OpenKB to process new files automatically, use watch mode:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;openkb watch
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;After that, drop files into &lt;code&gt;raw/&lt;/code&gt;, and OpenKB will update the wiki automatically.&lt;/p&gt;
&lt;h2 id=&#34;llm-configuration&#34;&gt;LLM Configuration
&lt;/h2&gt;&lt;p&gt;OpenKB uses LiteLLM to support multiple model providers, including OpenAI, Claude, and Gemini.&lt;/p&gt;
&lt;p&gt;You can set the model during initialization, or configure it in &lt;code&gt;.openkb/config.yaml&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;model&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;gpt-5.4&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;language&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;en&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;pageindex_threshold&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;20&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Model names follow LiteLLM&amp;rsquo;s &lt;code&gt;provider/model&lt;/code&gt; format. OpenAI models can omit the provider prefix:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;model&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;gpt-5.4&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Models such as Anthropic and Gemini are usually written like this:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;model&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;anthropic/claude-sonnet-4-6&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;model&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;gemini/gemini-3.1-pro-preview&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Put the API key in &lt;code&gt;.env&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;LLM_API_KEY&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;your_llm_api_key
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;If you enable PageIndex Cloud, add:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;PAGEINDEX_API_KEY&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;your_pageindex_api_key
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;common-commands&#34;&gt;Common Commands
&lt;/h2&gt;&lt;p&gt;OpenKB&amp;rsquo;s commands are developer-friendly:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;openkb init&lt;/code&gt;: initialize a knowledge base.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;openkb add &amp;lt;file_or_dir&amp;gt;&lt;/code&gt;: add a file or directory.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;openkb remove &amp;lt;doc&amp;gt;&lt;/code&gt;: remove a document and clean up related wiki pages, images, registry entries, and PageIndex state.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;openkb query &amp;quot;question&amp;quot;&lt;/code&gt;: ask a one-off question against the knowledge base.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;openkb chat&lt;/code&gt;: enter a multi-turn conversation.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;openkb watch&lt;/code&gt;: monitor &lt;code&gt;raw/&lt;/code&gt; and update automatically.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;openkb lint&lt;/code&gt;: check knowledge base structure and content health.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;openkb list&lt;/code&gt;: list indexed documents and concepts.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;openkb status&lt;/code&gt;: show knowledge base statistics.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;openkb chat&lt;/code&gt; is better than &lt;code&gt;openkb query&lt;/code&gt; for continuous exploration. It supports session resume, session listing, deletion, and slash commands such as &lt;code&gt;/status&lt;/code&gt;, &lt;code&gt;/list&lt;/code&gt;, &lt;code&gt;/add &amp;lt;path&amp;gt;&lt;/code&gt;, &lt;code&gt;/save&lt;/code&gt;, and &lt;code&gt;/lint&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;why-a-markdown-wiki-matters&#34;&gt;Why a Markdown Wiki Matters
&lt;/h2&gt;&lt;p&gt;Many knowledge-base tools are painful because of migration cost.&lt;/p&gt;
&lt;p&gt;Once material enters a proprietary database, index, or format, it becomes hard to inspect, edit, back up, or migrate directly. OpenKB writes the result as ordinary Markdown, which makes it naturally compatible with existing tools.&lt;/p&gt;
&lt;p&gt;The most direct use is opening &lt;code&gt;wiki/&lt;/code&gt; in Obsidian:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Summary pages can be read directly.&lt;/li&gt;
&lt;li&gt;Concept pages can connect through &lt;code&gt;[[wikilinks]]&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Graph view can show relationships between knowledge items.&lt;/li&gt;
&lt;li&gt;Query results can be saved to &lt;code&gt;explorations/&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;AGENTS.md&lt;/code&gt; can define how the knowledge base should be maintained.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That makes OpenKB more than a Q&amp;amp;A tool. It can become a knowledge-organizing pipeline for individuals or teams.&lt;/p&gt;
&lt;h2 id=&#34;best-fit-scenarios&#34;&gt;Best-Fit Scenarios
&lt;/h2&gt;&lt;p&gt;OpenKB is especially useful for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Reading papers and technical reports.&lt;/li&gt;
&lt;li&gt;Organizing project documentation.&lt;/li&gt;
&lt;li&gt;Building product research archives.&lt;/li&gt;
&lt;li&gt;Creating documentation knowledge bases around open-source projects.&lt;/li&gt;
&lt;li&gt;Organizing internal policies, meeting notes, and explanatory documents.&lt;/li&gt;
&lt;li&gt;Maintaining a personal Obsidian knowledge base automatically.&lt;/li&gt;
&lt;li&gt;Structuring long PDFs, PPTs, Word files, and web materials.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you often face piles of documents and want more than &amp;ldquo;ask one question, get one answer,&amp;rdquo; OpenKB&amp;rsquo;s direction is a good fit: it gradually turns material into a browsable, reusable, and traceable knowledge base.&lt;/p&gt;
&lt;h2 id=&#34;what-to-watch-out-for&#34;&gt;What to Watch Out For
&lt;/h2&gt;&lt;p&gt;First, OpenKB depends on LLM quality.&lt;/p&gt;
&lt;p&gt;Summaries, concept pages, and cross-links are generated by models. Stronger models usually produce more stable knowledge compilation; weaker models may struggle with concept extraction, contradiction detection, and cross-document synthesis.&lt;/p&gt;
&lt;p&gt;Second, estimate cost early.&lt;/p&gt;
&lt;p&gt;If you import many long documents at once, LLM calls may become expensive. Start with a small dataset, check the output structure and quality, and then expand.&lt;/p&gt;
&lt;p&gt;Third, the generated wiki still needs human review.&lt;/p&gt;
&lt;p&gt;OpenKB can organize material, but it does not automatically guarantee factual correctness. Important knowledge bases still need humans to review summaries, concept pages, and references.&lt;/p&gt;
&lt;p&gt;Fourth, be careful with sensitive material.&lt;/p&gt;
&lt;p&gt;If you use cloud LLMs or PageIndex Cloud, pay attention to privacy, trade secrets, and compliance requirements. For internal materials, confirm the model provider, data retention policy, and access boundaries first.&lt;/p&gt;
&lt;p&gt;Fifth, it is currently more of a CLI tool.&lt;/p&gt;
&lt;p&gt;The roadmap mentions a future Web UI, database-backed storage, support for large collections, and hierarchical concept indexing. At this stage, if teammates are not comfortable with the command line, there is still some adoption friction.&lt;/p&gt;
&lt;h2 id=&#34;relationship-with-obsidian-notebooklm-and-enterprise-rag&#34;&gt;Relationship with Obsidian, NotebookLM, and Enterprise RAG
&lt;/h2&gt;&lt;p&gt;OpenKB and Obsidian are best understood as an &amp;ldquo;automatic organization layer&amp;rdquo; plus a &amp;ldquo;reading and editing layer.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Obsidian is good for humans to write, edit, browse, and link notes. OpenKB is good for turning raw documents into a wiki that can enter Obsidian.&lt;/p&gt;
&lt;p&gt;OpenKB and NotebookLM differ more around local control and open file formats.&lt;/p&gt;
&lt;p&gt;NotebookLM is more direct for quickly asking questions and generating summaries after dropping in materials. OpenKB is better for developers who want the organized result to remain in a local directory and continue evolving as Markdown.&lt;/p&gt;
&lt;p&gt;OpenKB does not replace enterprise RAG; it complements it.&lt;/p&gt;
&lt;p&gt;Enterprise RAG cares more about permissions, auditability, service deployment, access isolation, monitoring, and stable throughput. OpenKB is better for building a readable, editable, long-lived knowledge layer. If you later build online Q&amp;amp;A, the wiki generated by OpenKB can also become a higher-quality corpus.&lt;/p&gt;
&lt;h2 id=&#34;a-recommended-workflow&#34;&gt;A Recommended Workflow
&lt;/h2&gt;&lt;p&gt;If you want to try OpenKB, start like this:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Create a test knowledge base directory.&lt;/li&gt;
&lt;li&gt;Add 3 to 5 documents on the same topic.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;openkb add&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Open &lt;code&gt;wiki/&lt;/code&gt; and inspect the summaries and concept pages.&lt;/li&gt;
&lt;li&gt;Ask a few specific questions with &lt;code&gt;openkb query&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;openkb lint&lt;/code&gt; to check knowledge-base health.&lt;/li&gt;
&lt;li&gt;Open &lt;code&gt;wiki/&lt;/code&gt; in Obsidian and see whether the link graph is meaningful.&lt;/li&gt;
&lt;li&gt;Once quality looks good, import a larger document collection.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Do not throw in hundreds of files at the beginning. First see whether it understands your material type well, especially tables, images, long PDFs, and multi-document concept merging.&lt;/p&gt;
&lt;h2 id=&#34;summary&#34;&gt;Summary
&lt;/h2&gt;&lt;p&gt;OpenKB&amp;rsquo;s value is that it moves an LLM knowledge base one step earlier than &amp;ldquo;assemble context at query time&amp;rdquo;: organize the material into a wiki first, then ask questions, chat, lint, and keep maintaining that wiki.&lt;/p&gt;
&lt;p&gt;This direction is not right for every Q&amp;amp;A system, but it is well suited to knowledge work that needs long-term accumulation. Markdown files, Obsidian compatibility, PageIndex long-document handling, multi-model support, and a CLI workflow combine into a useful tool for developers and research-oriented users.&lt;/p&gt;
&lt;p&gt;If you have many PDFs, reports, web pages, papers, and project documents, OpenKB is worth trying. It may not immediately replace a mature enterprise knowledge base, but it can become a practical entry point for organizing material: first turn documents into readable, linked, traceable knowledge, then let the LLM work on top of that knowledge.&lt;/p&gt;
&lt;p&gt;References:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/VectifyAI/OpenKB&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;VectifyAI/OpenKB&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://openkb.ai/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;OpenKB project page&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://pageindex.ai/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;PageIndex&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/microsoft/markitdown&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;markitdown&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://docs.litellm.ai/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;LiteLLM&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        
    </channel>
</rss>
