{"id":86214,"date":"2026-04-26T15:29:39","date_gmt":"2026-04-26T15:29:39","guid":{"rendered":"https:\/\/youzum.net\/rag-without-vectors-how-pageindex-retrieves-by-reasoning\/"},"modified":"2026-04-26T15:29:39","modified_gmt":"2026-04-26T15:29:39","slug":"rag-without-vectors-how-pageindex-retrieves-by-reasoning","status":"publish","type":"post","link":"https:\/\/youzum.net\/fr\/rag-without-vectors-how-pageindex-retrieves-by-reasoning\/","title":{"rendered":"RAG Without Vectors: How PageIndex Retrieves by Reasoning"},"content":{"rendered":"<p>Retrieval is where most RAG systems quietly break. Traditional pipelines rely on vector similarity\u2014embedding queries and document chunks into the same space and fetching the \u201cclosest\u201d matches. But similarity is a weak proxy for what we actually need: <strong>relevance grounded in reasoning<\/strong>. In long, professional documents\u2014like financial reports, research papers, or legal texts\u2014the right answer often isn\u2019t in the most semantically similar paragraph. It requires navigating structure, understanding context, and performing multi-step reasoning across sections. This is exactly where vector-based RAG starts to fall apart.<\/p>\n<p><strong>PageIndex<\/strong> is designed to solve this gap by rethinking retrieval from first principles. Instead of chunking documents and searching via embeddings, it builds a hierarchical <strong>table-of-contents-style tree index<\/strong> and uses LLMs to reason over that structure\u2014much like a human expert scanning sections, drilling down, and connecting ideas. This enables a <strong>vectorless, reasoning-driven retrieval process<\/strong> that is more interpretable, traceable, and aligned with how knowledge is actually extracted from complex documents. By replacing similarity search with structured exploration and tree-based reasoning, PageIndex delivers significantly higher retrieval accuracy\u2014demonstrated by its strong performance on benchmarks like FinanceBench\u2014making it particularly effective for domains that demand precision and deep understanding.<\/p>\n<figure class=\"wp-block-image size-full is-resized\"><img fetchpriority=\"high\" decoding=\"async\" width=\"1187\" height=\"367\" data-attachment-id=\"79306\" data-permalink=\"https:\/\/www.marktechpost.com\/2026\/04\/25\/rag-without-vectors-how-pageindex-retrieves-by-reasoning\/image-453\/\" data-orig-file=\"https:\/\/www.marktechpost.com\/wp-content\/uploads\/2026\/04\/image-47.png\" data-orig-size=\"1187,367\" data-comments-opened=\"0\" data-image-meta='{\"aperture\":\"0\",\"credit\":\"\",\"camera\":\"\",\"caption\":\"\",\"created_timestamp\":\"0\",\"copyright\":\"\",\"focal_length\":\"0\",\"iso\":\"0\",\"shutter_speed\":\"0\",\"title\":\"\",\"orientation\":\"0\"}' data-image-title=\"image\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/www.marktechpost.com\/wp-content\/uploads\/2026\/04\/image-47-1024x317.png\" src=\"https:\/\/www.marktechpost.com\/wp-content\/uploads\/2026\/04\/image-47.png\" alt=\"\" class=\"wp-image-79306\" \/><\/figure>\n<p>In this article, we\u2019ll use PageIndex to index the seminal Transformer paper \u2014 \u201c<strong>Attention Is All You Need<\/strong>\u201d \u2014 and run two cross-cutting queries against it without a single vector or embedding. Instead of chunking the PDF and retrieving by similarity, PageIndex builds a hierarchical tree of the document\u2019s sections, then uses <strong>GPT-5.4<\/strong> to reason over node summaries and identify exactly which sections contain the answer \u2014 before reading a single word of full text.<\/p>\n<h3 class=\"wp-block-heading\"><strong>Setting up the dependencies<\/strong><\/h3>\n<p>For this tutorial, you would require PageIndex &amp; OpenAI API keys. You can get the same from <a href=\"https:\/\/dash.pageindex.ai\/api-keys\">https:\/\/dash.pageindex.ai\/api-keys<\/a> and <a href=\"https:\/\/platform.openai.com\/api-keys\">https:\/\/platform.openai.com\/api-keys<\/a> respectively.<\/p>\n<div class=\"dm-code-snippet dark dm-normal-version default no-background-mobile\">\n<div class=\"control-language\">\n<div class=\"dm-buttons\">\n<div class=\"dm-buttons-left\">\n<div class=\"dm-button-snippet red-button\"><\/div>\n<div class=\"dm-button-snippet orange-button\"><\/div>\n<div class=\"dm-button-snippet green-button\"><\/div>\n<\/div>\n<div class=\"dm-buttons-right\"><a><span class=\"dm-copy-text\">Copy Code<\/span><span class=\"dm-copy-confirmed\">Copied<\/span><span class=\"dm-error-message\">Use a different Browser<\/span><\/a><\/div>\n<\/div>\n<pre class=\"no-line-numbers\"><code class=\"no-wrap language-php\">pip install pageindex openai requests<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"dm-code-snippet dark dm-normal-version default no-background-mobile\">\n<div class=\"control-language\">\n<div class=\"dm-buttons\">\n<div class=\"dm-buttons-left\">\n<div class=\"dm-button-snippet red-button\"><\/div>\n<div class=\"dm-button-snippet orange-button\"><\/div>\n<div class=\"dm-button-snippet green-button\"><\/div>\n<\/div>\n<div class=\"dm-buttons-right\"><a><span class=\"dm-copy-text\">Copy Code<\/span><span class=\"dm-copy-confirmed\">Copied<\/span><span class=\"dm-error-message\">Use a different Browser<\/span><\/a><\/div>\n<\/div>\n<pre class=\"no-line-numbers\"><code class=\"no-wrap language-php\">from pageindex import PageIndexClient\nimport pageindex.utils as utils\nimport os\nfrom getpass import getpass\n\nPAGEINDEX_API_KEY = getpass('Enter PageIndex API Key: ')\npi_client = PageIndexClient(api_key=PAGEINDEX_API_KEY)<\/code><\/pre>\n<\/div>\n<\/div>\n<p>We import the OpenAI client and configure it with an API key to enable access to LLMs. Then, we define an asynchronous helper function that sends prompts to the model and returns the generated response.<\/p>\n<div class=\"dm-code-snippet dark dm-normal-version default no-background-mobile\">\n<div class=\"control-language\">\n<div class=\"dm-buttons\">\n<div class=\"dm-buttons-left\">\n<div class=\"dm-button-snippet red-button\"><\/div>\n<div class=\"dm-button-snippet orange-button\"><\/div>\n<div class=\"dm-button-snippet green-button\"><\/div>\n<\/div>\n<div class=\"dm-buttons-right\"><a><span class=\"dm-copy-text\">Copy Code<\/span><span class=\"dm-copy-confirmed\">Copied<\/span><span class=\"dm-error-message\">Use a different Browser<\/span><\/a><\/div>\n<\/div>\n<pre class=\"no-line-numbers\"><code class=\"no-wrap language-php\">import openai\n\nOPENAI_API_KEY = getpass('Enter OpenAI API Key: ')\n\nasync def call_llm(prompt, model=\"gpt-5.4\", temperature=0):\n    client = openai.AsyncOpenAI(api_key=OPENAI_API_KEY)\n    response = await client.chat.completions.create(\n        model=model,\n        messages=[{\"role\": \"user\", \"content\": prompt}],\n        temperature=temperature\n    )\n    return response.choices[0].message.content.strip()<\/code><\/pre>\n<\/div>\n<\/div>\n<h3 class=\"wp-block-heading\"><strong>Building the PageIndex Tree<\/strong><\/h3>\n<p>In this chunk, we download the Transformer paper directly from arXiv and submit it to PageIndex, which processes the PDF and builds a hierarchical tree of its sections \u2014 each node storing a title, a summary, and the full section text. Once the tree is ready, we print it out to inspect the structure PageIndex has inferred: every chapter, subsection, and nested heading becomes a node in the tree, preserving the document\u2019s natural organization exactly as the authors intended it.<\/p>\n<div class=\"dm-code-snippet dark dm-normal-version default no-background-mobile\">\n<div class=\"control-language\">\n<div class=\"dm-buttons\">\n<div class=\"dm-buttons-left\">\n<div class=\"dm-button-snippet red-button\"><\/div>\n<div class=\"dm-button-snippet orange-button\"><\/div>\n<div class=\"dm-button-snippet green-button\"><\/div>\n<\/div>\n<div class=\"dm-buttons-right\"><a><span class=\"dm-copy-text\">Copy Code<\/span><span class=\"dm-copy-confirmed\">Copied<\/span><span class=\"dm-error-message\">Use a different Browser<\/span><\/a><\/div>\n<\/div>\n<pre class=\"no-line-numbers\"><code class=\"no-wrap language-php\"># \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n# Step 1: Build the PageIndex Tree\n# \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n# 1.1 Download the Transformer paper and submit it\nimport os, requests\n\npdf_url = \"https:\/\/arxiv.org\/pdf\/1706.03762.pdf\"\npdf_path = os.path.join(\"data\", pdf_url.split(\"\/\")[-1])\nos.makedirs(\"data\", exist_ok=True)\n\nprint(\"Downloading 'Attention Is All You Need'...\")\nresponse = requests.get(pdf_url)\nwith open(pdf_path, \"wb\") as f:\n    f.write(response.content)\nprint(f\"<img decoding=\"async\" src=\"https:\/\/s.w.org\/images\/core\/emoji\/17.0.2\/72x72\/2705.png\" alt=\"\u2705\" class=\"wp-smiley\" \/> Saved to {pdf_path}\")\n\ndoc_id = pi_client.submit_document(pdf_path)[\"doc_id\"]\nprint(f\"<img decoding=\"async\" src=\"https:\/\/s.w.org\/images\/core\/emoji\/17.0.2\/72x72\/1f4c4.png\" alt=\"\ud83d\udcc4\" class=\"wp-smiley\" \/> Document submitted. doc_id: {doc_id}\")\n\n# 1.2 Retrieve the tree (poll until ready)\nimport time\n\nprint(\"nWaiting for PageIndex tree to be ready\", end=\"\")\nwhile not pi_client.is_retrieval_ready(doc_id):\n    print(\".\", end=\"\", flush=True)\n    time.sleep(5)\n\ntree = pi_client.get_tree(doc_id, node_summary=True)[\"result\"]\nprint(\"nn<img decoding=\"async\" src=\"https:\/\/s.w.org\/images\/core\/emoji\/17.0.2\/72x72\/1f4c2.png\" alt=\"\ud83d\udcc2\" class=\"wp-smiley\" \/> Document Tree Structure:\")\nutils.print_tree(tree)<\/code><\/pre>\n<\/div>\n<\/div>\n<figure class=\"wp-block-image size-full is-resized\"><img decoding=\"async\" width=\"1155\" height=\"547\" data-attachment-id=\"79307\" data-permalink=\"https:\/\/www.marktechpost.com\/2026\/04\/25\/rag-without-vectors-how-pageindex-retrieves-by-reasoning\/image-454\/\" data-orig-file=\"https:\/\/www.marktechpost.com\/wp-content\/uploads\/2026\/04\/image-48.png\" data-orig-size=\"1155,547\" data-comments-opened=\"0\" data-image-meta='{\"aperture\":\"0\",\"credit\":\"\",\"camera\":\"\",\"caption\":\"\",\"created_timestamp\":\"0\",\"copyright\":\"\",\"focal_length\":\"0\",\"iso\":\"0\",\"shutter_speed\":\"0\",\"title\":\"\",\"orientation\":\"0\"}' data-image-title=\"image\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/www.marktechpost.com\/wp-content\/uploads\/2026\/04\/image-48-1024x485.png\" src=\"https:\/\/www.marktechpost.com\/wp-content\/uploads\/2026\/04\/image-48.png\" alt=\"\" class=\"wp-image-79307\" \/><\/figure>\n<h3 class=\"wp-block-heading\"><strong>Reasoning-Based Retrieval<\/strong><\/h3>\n<p>With the tree built, we now run a query that is intentionally cross-cutting \u2014 one that can\u2019t be answered by a single section of the paper. We strip the full text from each node, leaving only titles and summaries, and pass the entire tree structure to GPT-5.4. The model then reasons over these summaries to identify every node likely to contain a relevant answer, returning both its step-by-step thinking and a list of matched node IDs. This is the core of what makes PageIndex different: the LLM decides where to look before any full text is loaded.<\/p>\n<div class=\"dm-code-snippet dark dm-normal-version default no-background-mobile\">\n<div class=\"control-language\">\n<div class=\"dm-buttons\">\n<div class=\"dm-buttons-left\">\n<div class=\"dm-button-snippet red-button\"><\/div>\n<div class=\"dm-button-snippet orange-button\"><\/div>\n<div class=\"dm-button-snippet green-button\"><\/div>\n<\/div>\n<div class=\"dm-buttons-right\"><a><span class=\"dm-copy-text\">Copy Code<\/span><span class=\"dm-copy-confirmed\">Copied<\/span><span class=\"dm-error-message\">Use a different Browser<\/span><\/a><\/div>\n<\/div>\n<pre class=\"no-line-numbers\"><code class=\"no-wrap language-php\"># \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n# Step 2: Reasoning-Based Retrieval\n# \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n# 2.1 Define a query that requires navigating across sections\nimport json\n\n# This query is intentionally cross-cutting -- it can't be answered\n# by a single section, which is where tree search shines over top-k.\nquery = \"Why did the authors choose self-attention over recurrence, and what are the complexity trade-offs they compared?\"\n\ntree_without_text = utils.remove_fields(tree.copy(), fields=[\"text\"])\n\nsearch_prompt = f\"\"\"\nYou are given a question and a hierarchical tree structure of a research paper.\nEach node has a node_id, title, and a summary of its content.\n\nYour task: identify ALL nodes that are likely to contain information relevant to answering the question.\nThink carefully -- the answer may be spread across multiple sections.\n\nQuestion: {query}\n\nDocument tree:\n{json.dumps(tree_without_text, indent=2)}\n\nReply ONLY in this JSON format, no preamble:\n{{\n    \"thinking\": \"&lt;step-by-step reasoning about which nodes are relevant and why&gt;\",\n    \"node_list\": [\"node_id_1\", \"node_id_2\", ...]\n}}\n\"\"\"\n\nprint(f'<img decoding=\"async\" src=\"https:\/\/s.w.org\/images\/core\/emoji\/17.0.2\/72x72\/1f50d.png\" alt=\"\ud83d\udd0d\" class=\"wp-smiley\" \/> Query: \"{query}\"n')\nprint(\"Running tree search with GPT-5.4...\")\ntree_search_result = await call_llm(search_prompt)\n\n# 2.2 Inspect the retrieval reasoning and matched nodes\nnode_map = utils.create_node_mapping(tree)\nresult_json = json.loads(tree_search_result)\n\nprint(\"n<img decoding=\"async\" src=\"https:\/\/s.w.org\/images\/core\/emoji\/17.0.2\/72x72\/1f9e0.png\" alt=\"\ud83e\udde0\" class=\"wp-smiley\" \/> LLM Reasoning:\")\nutils.print_wrapped(result_json[\"thinking\"])\n\nprint(\"n<img decoding=\"async\" src=\"https:\/\/s.w.org\/images\/core\/emoji\/17.0.2\/72x72\/1f4cc.png\" alt=\"\ud83d\udccc\" class=\"wp-smiley\" \/> Retrieved Nodes:\")\nfor node_id in result_json[\"node_list\"]:\n    node = node_map[node_id]\n    print(f\"  \u2022 [{node['node_id']}] Page {node['page_index']:&gt;2} -- {node['title']}\")<\/code><\/pre>\n<\/div>\n<\/div>\n<figure class=\"wp-block-image size-full is-resized\"><img decoding=\"async\" width=\"1170\" height=\"411\" data-attachment-id=\"79308\" data-permalink=\"https:\/\/www.marktechpost.com\/2026\/04\/25\/rag-without-vectors-how-pageindex-retrieves-by-reasoning\/image-455\/\" data-orig-file=\"https:\/\/www.marktechpost.com\/wp-content\/uploads\/2026\/04\/image-49.png\" data-orig-size=\"1170,411\" data-comments-opened=\"0\" data-image-meta='{\"aperture\":\"0\",\"credit\":\"\",\"camera\":\"\",\"caption\":\"\",\"created_timestamp\":\"0\",\"copyright\":\"\",\"focal_length\":\"0\",\"iso\":\"0\",\"shutter_speed\":\"0\",\"title\":\"\",\"orientation\":\"0\"}' data-image-title=\"image\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/www.marktechpost.com\/wp-content\/uploads\/2026\/04\/image-49-1024x360.png\" src=\"https:\/\/www.marktechpost.com\/wp-content\/uploads\/2026\/04\/image-49.png\" alt=\"\" class=\"wp-image-79308\" \/><\/figure>\n<h3 class=\"wp-block-heading\"><strong>Answer Generation<\/strong><\/h3>\n<p>Once the relevant nodes are identified, we pull their full text and stitch it together into a single context block \u2014 each section clearly labeled so the model knows where each piece of information comes from. That combined context is then handed to GPT-5.4 with a structured prompt that asks for the core motivation, the specific complexity numbers, and any caveats the authors acknowledged. The model answers using only what was retrieved, grounding every claim directly in the paper\u2019s text.<\/p>\n<div class=\"dm-code-snippet dark dm-normal-version default no-background-mobile\">\n<div class=\"control-language\">\n<div class=\"dm-buttons\">\n<div class=\"dm-buttons-left\">\n<div class=\"dm-button-snippet red-button\"><\/div>\n<div class=\"dm-button-snippet orange-button\"><\/div>\n<div class=\"dm-button-snippet green-button\"><\/div>\n<\/div>\n<div class=\"dm-buttons-right\"><a><span class=\"dm-copy-text\">Copy Code<\/span><span class=\"dm-copy-confirmed\">Copied<\/span><span class=\"dm-error-message\">Use a different Browser<\/span><\/a><\/div>\n<\/div>\n<pre class=\"no-line-numbers\"><code class=\"no-wrap language-php\"># \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n# Step 3: Answer Generation\n# \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n# 3.1 Stitch together context from all retrieved nodes\nnode_list = result_json[\"node_list\"]\nrelevant_content = \"nn---nn\".join(\n    f\"[Section: {node_map[nid]['title']}]n{node_map[nid]['text']}\"\n    for nid in node_list\n)\n\nprint(f\"n<img decoding=\"async\" src=\"https:\/\/s.w.org\/images\/core\/emoji\/17.0.2\/72x72\/1f4d6.png\" alt=\"\ud83d\udcd6\" class=\"wp-smiley\" \/> Retrieved Context Preview (first 1200 chars):n\")\nutils.print_wrapped(relevant_content[:1200] + \"...n\")\n\n# 3.2 Generate a structured answer grounded in the retrieved sections\nanswer_prompt = f\"\"\"\nYou are a technical assistant. Answer the question below using ONLY the provided context.\nBe specific -- reference actual design choices, numbers, and trade-offs mentioned in the text.\n\nQuestion: {query}\n\nContext:\n{relevant_content}\n\nStructure your answer as:\n1. The core motivation for choosing self-attention\n2. The specific complexity comparisons made (include any tables or numbers)\n3. Any caveats or limitations the authors acknowledged\n\"\"\"\n\nprint(\"<img decoding=\"async\" src=\"https:\/\/s.w.org\/images\/core\/emoji\/17.0.2\/72x72\/1f4ac.png\" alt=\"\ud83d\udcac\" class=\"wp-smiley\" \/> Generating answer...n\")\nanswer = await call_llm(answer_prompt)\n\nprint(\"\u2500\" * 60)\nprint(\"<img decoding=\"async\" src=\"https:\/\/s.w.org\/images\/core\/emoji\/17.0.2\/72x72\/2705.png\" alt=\"\u2705\" class=\"wp-smiley\" \/> Final Answer:n\")\nutils.print_wrapped(answer)\nprint(\"\u2500\" * 60)<\/code><\/pre>\n<\/div>\n<\/div>\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1173\" height=\"902\" data-attachment-id=\"79311\" data-permalink=\"https:\/\/www.marktechpost.com\/2026\/04\/25\/rag-without-vectors-how-pageindex-retrieves-by-reasoning\/image-458\/\" data-orig-file=\"https:\/\/www.marktechpost.com\/wp-content\/uploads\/2026\/04\/image-51.png\" data-orig-size=\"1173,902\" data-comments-opened=\"0\" data-image-meta='{\"aperture\":\"0\",\"credit\":\"\",\"camera\":\"\",\"caption\":\"\",\"created_timestamp\":\"0\",\"copyright\":\"\",\"focal_length\":\"0\",\"iso\":\"0\",\"shutter_speed\":\"0\",\"title\":\"\",\"orientation\":\"0\"}' data-image-title=\"image\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/www.marktechpost.com\/wp-content\/uploads\/2026\/04\/image-51-1024x787.png\" src=\"https:\/\/www.marktechpost.com\/wp-content\/uploads\/2026\/04\/image-51.png\" alt=\"\" class=\"wp-image-79311\" \/><\/figure>\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1166\" height=\"414\" data-attachment-id=\"79312\" data-permalink=\"https:\/\/www.marktechpost.com\/2026\/04\/25\/rag-without-vectors-how-pageindex-retrieves-by-reasoning\/image-459\/\" data-orig-file=\"https:\/\/www.marktechpost.com\/wp-content\/uploads\/2026\/04\/image-52.png\" data-orig-size=\"1166,414\" data-comments-opened=\"0\" data-image-meta='{\"aperture\":\"0\",\"credit\":\"\",\"camera\":\"\",\"caption\":\"\",\"created_timestamp\":\"0\",\"copyright\":\"\",\"focal_length\":\"0\",\"iso\":\"0\",\"shutter_speed\":\"0\",\"title\":\"\",\"orientation\":\"0\"}' data-image-title=\"image\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/www.marktechpost.com\/wp-content\/uploads\/2026\/04\/image-52-1024x364.png\" src=\"https:\/\/www.marktechpost.com\/wp-content\/uploads\/2026\/04\/image-52.png\" alt=\"\" class=\"wp-image-79312\" \/><\/figure>\n<h3 class=\"wp-block-heading\"><strong>Testing with a Second Query<\/strong><\/h3>\n<p>To show that the tree is built once and reused at no extra cost, we run a second query \u2014 this time targeting a localized mechanism rather than a cross-cutting design decision. The same tree structure is passed to GPT-5.4, which narrows its search to just the attention subsections, retrieves their full text, and generates a clean explanation of how multi-head attention works and why the scaling factor matters. No re-indexing, no re-embedding \u2014 just a new question against the same tree.<\/p>\n<div class=\"dm-code-snippet dark dm-normal-version default no-background-mobile\">\n<div class=\"control-language\">\n<div class=\"dm-buttons\">\n<div class=\"dm-buttons-left\">\n<div class=\"dm-button-snippet red-button\"><\/div>\n<div class=\"dm-button-snippet orange-button\"><\/div>\n<div class=\"dm-button-snippet green-button\"><\/div>\n<\/div>\n<div class=\"dm-buttons-right\"><a><span class=\"dm-copy-text\">Copy Code<\/span><span class=\"dm-copy-confirmed\">Copied<\/span><span class=\"dm-error-message\">Use a different Browser<\/span><\/a><\/div>\n<\/div>\n<pre class=\"no-line-numbers\"><code class=\"no-wrap language-php\">query2 = \"How does the multi-head attention mechanism work, and what is the role of scaling in dot-product attention?\"\n\nsearch_prompt2 = f\"\"\"\nYou are given a question and a hierarchical tree structure of a research paper.\nIdentify all nodes likely to contain the answer.\n\nQuestion: {query2}\n\nDocument tree:\n{json.dumps(tree_without_text, indent=2)}\n\nReply ONLY in this JSON format:\n{{\n    \"thinking\": \"&lt;reasoning&gt;\",\n    \"node_list\": [\"node_id_1\", ...]\n}}\n\"\"\"\n\nprint(f'nn<img decoding=\"async\" src=\"https:\/\/s.w.org\/images\/core\/emoji\/17.0.2\/72x72\/1f50d.png\" alt=\"\ud83d\udd0d\" class=\"wp-smiley\" \/> Second Query: \"{query2}\"n')\nresult2_raw = await call_llm(search_prompt2)\nresult2 = json.loads(result2_raw)\n\nprint(\"<img decoding=\"async\" src=\"https:\/\/s.w.org\/images\/core\/emoji\/17.0.2\/72x72\/1f9e0.png\" alt=\"\ud83e\udde0\" class=\"wp-smiley\" \/> Reasoning:\")\nutils.print_wrapped(result2[\"thinking\"])\n\nrelevant_content2 = \"nn---nn\".join(\n    f\"[Section: {node_map[nid]['title']}]n{node_map[nid]['text']}\"\n    for nid in result2[\"node_list\"]\n)\n\nanswer_prompt2 = f\"\"\"\nAnswer the following question using ONLY the provided context.\nExplain the mechanism clearly, as if for a technical blog post.\n\nQuestion: {query2}\nContext: {relevant_content2}\n\"\"\"\n\nanswer2 = await call_llm(answer_prompt2)\nprint(\"n<img decoding=\"async\" src=\"https:\/\/s.w.org\/images\/core\/emoji\/17.0.2\/72x72\/2705.png\" alt=\"\u2705\" class=\"wp-smiley\" \/> Answer:n\")\nutils.print_wrapped(answer2)<\/code><\/pre>\n<\/div>\n<\/div>\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1171\" height=\"490\" data-attachment-id=\"79310\" data-permalink=\"https:\/\/www.marktechpost.com\/2026\/04\/25\/rag-without-vectors-how-pageindex-retrieves-by-reasoning\/image-457\/\" data-orig-file=\"https:\/\/www.marktechpost.com\/wp-content\/uploads\/2026\/04\/image-50.png\" data-orig-size=\"1171,490\" data-comments-opened=\"0\" data-image-meta='{\"aperture\":\"0\",\"credit\":\"\",\"camera\":\"\",\"caption\":\"\",\"created_timestamp\":\"0\",\"copyright\":\"\",\"focal_length\":\"0\",\"iso\":\"0\",\"shutter_speed\":\"0\",\"title\":\"\",\"orientation\":\"0\"}' data-image-title=\"image\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/www.marktechpost.com\/wp-content\/uploads\/2026\/04\/image-50-1024x428.png\" src=\"https:\/\/www.marktechpost.com\/wp-content\/uploads\/2026\/04\/image-50.png\" alt=\"\" class=\"wp-image-79310\" \/><\/figure>\n<hr class=\"wp-block-separator aligncenter has-alpha-channel-opacity is-style-wide\" \/>\n<p>Check out\u00a0the\u00a0<strong><a href=\"https:\/\/github.com\/Marktechpost\/AI-Agents-Projects-Tutorials\/blob\/main\/RAG\/PageIndex.ipynb\" target=\"_blank\" rel=\"noreferrer noopener\">Full Codes here<\/a><\/strong>.<strong>\u00a0<\/strong>Find 100s of ML\/Data Science\u00a0<strong><a href=\"https:\/\/github.com\/Marktechpost\/Machine-learning-Data-science-Tutorials\" target=\"_blank\" rel=\"noreferrer noopener\">Colab Notebooks here<\/a><\/strong>. Also,\u00a0feel free to follow us on\u00a0<strong><a href=\"https:\/\/x.com\/intent\/follow?screen_name=marktechpost\" target=\"_blank\" rel=\"noreferrer noopener\"><mark>Twitter<\/mark><\/a><\/strong>\u00a0and don\u2019t forget to join our\u00a0<strong><a href=\"https:\/\/www.reddit.com\/r\/machinelearningnews\/\" target=\"_blank\" rel=\"noreferrer noopener\">130k+ ML SubReddit<\/a><\/strong>\u00a0and Subscribe to\u00a0<strong><a href=\"https:\/\/www.aidevsignals.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">our Newsletter<\/a><\/strong>. Wait! are you on telegram?\u00a0<strong><a href=\"https:\/\/t.me\/machinelearningresearchnews\" target=\"_blank\" rel=\"noreferrer noopener\">now you can join us on telegram as well.<\/a><\/strong><\/p>\n<p>Need to partner with us for promoting your GitHub Repo OR Hugging Face Page OR Product Release OR Webinar etc.?\u00a0<strong><a href=\"https:\/\/forms.gle\/MTNLpmJtsFA3VRVd9\" target=\"_blank\" rel=\"noreferrer noopener\"><mark>Connect with us<\/mark><\/a><\/strong><\/p>\n<p>The post <a href=\"https:\/\/www.marktechpost.com\/2026\/04\/25\/rag-without-vectors-how-pageindex-retrieves-by-reasoning\/\">RAG Without Vectors: How PageIndex Retrieves by Reasoning<\/a> appeared first on <a href=\"https:\/\/www.marktechpost.com\/\">MarkTechPost<\/a>.<\/p>","protected":false},"excerpt":{"rendered":"<p>Retrieval is where most RAG systems quietly break. Traditional pipelines rely on vector similarity\u2014embedding queries and document chunks into the same space and fetching the \u201cclosest\u201d matches. But similarity is a weak proxy for what we actually need: relevance grounded in reasoning. In long, professional documents\u2014like financial reports, research papers, or legal texts\u2014the right answer often isn\u2019t in the most semantically similar paragraph. It requires navigating structure, understanding context, and performing multi-step reasoning across sections. This is exactly where vector-based RAG starts to fall apart. PageIndex is designed to solve this gap by rethinking retrieval from first principles. Instead of chunking documents and searching via embeddings, it builds a hierarchical table-of-contents-style tree index and uses LLMs to reason over that structure\u2014much like a human expert scanning sections, drilling down, and connecting ideas. This enables a vectorless, reasoning-driven retrieval process that is more interpretable, traceable, and aligned with how knowledge is actually extracted from complex documents. By replacing similarity search with structured exploration and tree-based reasoning, PageIndex delivers significantly higher retrieval accuracy\u2014demonstrated by its strong performance on benchmarks like FinanceBench\u2014making it particularly effective for domains that demand precision and deep understanding. In this article, we\u2019ll use PageIndex to index the seminal Transformer paper \u2014 \u201cAttention Is All You Need\u201d \u2014 and run two cross-cutting queries against it without a single vector or embedding. Instead of chunking the PDF and retrieving by similarity, PageIndex builds a hierarchical tree of the document\u2019s sections, then uses GPT-5.4 to reason over node summaries and identify exactly which sections contain the answer \u2014 before reading a single word of full text. Setting up the dependencies For this tutorial, you would require PageIndex &amp; OpenAI API keys. You can get the same from https:\/\/dash.pageindex.ai\/api-keys and https:\/\/platform.openai.com\/api-keys respectively. Copy CodeCopiedUse a different Browser pip install pageindex openai requests Copy CodeCopiedUse a different Browser from pageindex import PageIndexClient import pageindex.utils as utils import os from getpass import getpass PAGEINDEX_API_KEY = getpass(&#8216;Enter PageIndex API Key: &#8216;) pi_client = PageIndexClient(api_key=PAGEINDEX_API_KEY) We import the OpenAI client and configure it with an API key to enable access to LLMs. Then, we define an asynchronous helper function that sends prompts to the model and returns the generated response. Copy CodeCopiedUse a different Browser import openai OPENAI_API_KEY = getpass(&#8216;Enter OpenAI API Key: &#8216;) async def call_llm(prompt, model=&#8221;gpt-5.4&#8243;, temperature=0): client = openai.AsyncOpenAI(api_key=OPENAI_API_KEY) response = await client.chat.completions.create( model=model, messages=[{&#8220;role&#8221;: &#8220;user&#8221;, &#8220;content&#8221;: prompt}], temperature=temperature ) return response.choices[0].message.content.strip() Building the PageIndex Tree In this chunk, we download the Transformer paper directly from arXiv and submit it to PageIndex, which processes the PDF and builds a hierarchical tree of its sections \u2014 each node storing a title, a summary, and the full section text. Once the tree is ready, we print it out to inspect the structure PageIndex has inferred: every chapter, subsection, and nested heading becomes a node in the tree, preserving the document\u2019s natural organization exactly as the authors intended it. Copy CodeCopiedUse a different Browser # \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 # Step 1: Build the PageIndex Tree # \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 # 1.1 Download the Transformer paper and submit it import os, requests pdf_url = &#8220;https:\/\/arxiv.org\/pdf\/1706.03762.pdf&#8221; pdf_path = os.path.join(&#8220;data&#8221;, pdf_url.split(&#8220;\/&#8221;)[-1]) os.makedirs(&#8220;data&#8221;, exist_ok=True) print(&#8220;Downloading &#8216;Attention Is All You Need&#8217;&#8230;&#8221;) response = requests.get(pdf_url) with open(pdf_path, &#8220;wb&#8221;) as f: f.write(response.content) print(f&#8221; Saved to {pdf_path}&#8221;) doc_id = pi_client.submit_document(pdf_path)[&#8220;doc_id&#8221;] print(f&#8221; Document submitted. doc_id: {doc_id}&#8221;) # 1.2 Retrieve the tree (poll until ready) import time print(&#8220;nWaiting for PageIndex tree to be ready&#8221;, end=&#8221;&#8221;) while not pi_client.is_retrieval_ready(doc_id): print(&#8220;.&#8221;, end=&#8221;&#8221;, flush=True) time.sleep(5) tree = pi_client.get_tree(doc_id, node_summary=True)[&#8220;result&#8221;] print(&#8220;nn Document Tree Structure:&#8221;) utils.print_tree(tree) Reasoning-Based Retrieval With the tree built, we now run a query that is intentionally cross-cutting \u2014 one that can\u2019t be answered by a single section of the paper. We strip the full text from each node, leaving only titles and summaries, and pass the entire tree structure to GPT-5.4. The model then reasons over these summaries to identify every node likely to contain a relevant answer, returning both its step-by-step thinking and a list of matched node IDs. This is the core of what makes PageIndex different: the LLM decides where to look before any full text is loaded. Copy CodeCopiedUse a different Browser # \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 # Step 2: Reasoning-Based Retrieval # \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 # 2.1 Define a query that requires navigating across sections import json # This query is intentionally cross-cutting &#8212; it can&#8217;t be answered # by a single section, which is where tree search shines over top-k. query = &#8220;Why did the authors choose self-attention over recurrence, and what are the complexity trade-offs they compared?&#8221; tree_without_text = utils.remove_fields(tree.copy(), fields=[&#8220;text&#8221;]) search_prompt = f&#8221;&#8221;&#8221; You are given a question and a hierarchical tree structure of a research paper. Each node has a node_id, title, and a summary of its content. Your task: identify ALL nodes that are likely to contain information relevant to answering the question. Think carefully &#8212; the answer may be spread across multiple sections. Question: {query} Document tree: {json.dumps(tree_without_text, indent=2)} Reply ONLY in this JSON format, no preamble: {{ &#8220;thinking&#8221;: &#8220;&lt;step-by-step reasoning about which nodes are relevant and why&gt;&#8221;, &#8220;node_list&#8221;: [&#8220;node_id_1&#8221;, &#8220;node_id_2&#8221;, &#8230;] }} &#8220;&#8221;&#8221; print(f&#8217; Query: &#8220;{query}&#8221;n&#8217;) print(&#8220;Running tree search with GPT-5.4&#8230;&#8221;) tree_search_result = await call_llm(search_prompt) # 2.2 Inspect the retrieval reasoning and matched nodes node_map = utils.create_node_mapping(tree) result_json = json.loads(tree_search_result) print(&#8220;n LLM Reasoning:&#8221;) utils.print_wrapped(result_json[&#8220;thinking&#8221;]) print(&#8220;n Retrieved Nodes:&#8221;) for node_id in result_json[&#8220;node_list&#8221;]: node = node_map[node_id] print(f&#8221; \u2022 [{node[&#8216;node_id&#8217;]}] Page {node[&#8216;page_index&#8217;]:&gt;2} &#8212; {node[&#8216;title&#8217;]}&#8221;) Answer Generation Once the relevant nodes are identified, we pull their full text and stitch it together into a single context block \u2014 each section clearly labeled so the model knows where each piece of information comes from. That combined context is then handed to GPT-5.4 with a structured prompt that asks for the core motivation, the specific complexity numbers, and any caveats the authors acknowledged. The model answers using only what was retrieved, grounding every claim directly in the paper\u2019s text. Copy CodeCopiedUse a different Browser # \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 # Step 3: Answer Generation # \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 # 3.1 Stitch together context from all retrieved nodes node_list = result_json[&#8220;node_list&#8221;] relevant_content = &#8220;nn&#8212;nn&#8221;.join( f&#8221;[Section:<\/p>","protected":false},"author":2,"featured_media":86215,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"pmpro_default_level":"","site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"_pvb_checkbox_block_on_post":false,"footnotes":""},"categories":[52,5,7,1],"tags":[],"class_list":["post-86214","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ai-club","category-committee","category-news","category-uncategorized","pmpro-has-access"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.3 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>RAG Without Vectors: How PageIndex Retrieves by Reasoning - YouZum<\/title>\n<meta name=\"description\" content=\"\u0e01\u0e34\u0e08\u0e01\u0e23\u0e23\u0e21\u0e40\u0e01\u0e35\u0e48\u0e22\u0e27\u0e01\u0e31\u0e1a\u0e42\u0e14\u0e23\u0e19\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/youzum.net\/fr\/rag-without-vectors-how-pageindex-retrieves-by-reasoning\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"RAG Without Vectors: How PageIndex Retrieves by Reasoning - YouZum\" \/>\n<meta property=\"og:description\" content=\"\u0e01\u0e34\u0e08\u0e01\u0e23\u0e23\u0e21\u0e40\u0e01\u0e35\u0e48\u0e22\u0e27\u0e01\u0e31\u0e1a\u0e42\u0e14\u0e23\u0e19\" \/>\n<meta property=\"og:url\" content=\"https:\/\/youzum.net\/fr\/rag-without-vectors-how-pageindex-retrieves-by-reasoning\/\" \/>\n<meta property=\"og:site_name\" content=\"YouZum\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/DroneAssociationTH\/\" \/>\n<meta property=\"article:published_time\" content=\"2026-04-26T15:29:39+00:00\" \/>\n<meta name=\"author\" content=\"admin NU\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin NU\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/youzum.net\/rag-without-vectors-how-pageindex-retrieves-by-reasoning\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/youzum.net\/rag-without-vectors-how-pageindex-retrieves-by-reasoning\/\"},\"author\":{\"name\":\"admin NU\",\"@id\":\"https:\/\/yousum.gpucore.co\/#\/schema\/person\/97fa48242daf3908e4d9a5f26f4a059c\"},\"headline\":\"RAG Without Vectors: How PageIndex Retrieves by Reasoning\",\"datePublished\":\"2026-04-26T15:29:39+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/youzum.net\/rag-without-vectors-how-pageindex-retrieves-by-reasoning\/\"},\"wordCount\":835,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/yousum.gpucore.co\/#organization\"},\"image\":{\"@id\":\"https:\/\/youzum.net\/rag-without-vectors-how-pageindex-retrieves-by-reasoning\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/youzum.net\/wp-content\/uploads\/2026\/04\/image-47-uv6wRf.png\",\"articleSection\":[\"AI\",\"Committee\",\"News\",\"Uncategorized\"],\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/youzum.net\/rag-without-vectors-how-pageindex-retrieves-by-reasoning\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/youzum.net\/rag-without-vectors-how-pageindex-retrieves-by-reasoning\/\",\"url\":\"https:\/\/youzum.net\/rag-without-vectors-how-pageindex-retrieves-by-reasoning\/\",\"name\":\"RAG Without Vectors: How PageIndex Retrieves by Reasoning - YouZum\",\"isPartOf\":{\"@id\":\"https:\/\/yousum.gpucore.co\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/youzum.net\/rag-without-vectors-how-pageindex-retrieves-by-reasoning\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/youzum.net\/rag-without-vectors-how-pageindex-retrieves-by-reasoning\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/youzum.net\/wp-content\/uploads\/2026\/04\/image-47-uv6wRf.png\",\"datePublished\":\"2026-04-26T15:29:39+00:00\",\"description\":\"\u0e01\u0e34\u0e08\u0e01\u0e23\u0e23\u0e21\u0e40\u0e01\u0e35\u0e48\u0e22\u0e27\u0e01\u0e31\u0e1a\u0e42\u0e14\u0e23\u0e19\",\"breadcrumb\":{\"@id\":\"https:\/\/youzum.net\/rag-without-vectors-how-pageindex-retrieves-by-reasoning\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/youzum.net\/rag-without-vectors-how-pageindex-retrieves-by-reasoning\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/youzum.net\/rag-without-vectors-how-pageindex-retrieves-by-reasoning\/#primaryimage\",\"url\":\"https:\/\/youzum.net\/wp-content\/uploads\/2026\/04\/image-47-uv6wRf.png\",\"contentUrl\":\"https:\/\/youzum.net\/wp-content\/uploads\/2026\/04\/image-47-uv6wRf.png\",\"width\":1187,\"height\":367},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/youzum.net\/rag-without-vectors-how-pageindex-retrieves-by-reasoning\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/youzum.net\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"RAG Without Vectors: How PageIndex Retrieves by Reasoning\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/yousum.gpucore.co\/#website\",\"url\":\"https:\/\/yousum.gpucore.co\/\",\"name\":\"YouSum\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/yousum.gpucore.co\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/yousum.gpucore.co\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/yousum.gpucore.co\/#organization\",\"name\":\"Drone Association Thailand\",\"url\":\"https:\/\/yousum.gpucore.co\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/yousum.gpucore.co\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/youzum.net\/wp-content\/uploads\/2024\/11\/tranparent-logo.png\",\"contentUrl\":\"https:\/\/youzum.net\/wp-content\/uploads\/2024\/11\/tranparent-logo.png\",\"width\":300,\"height\":300,\"caption\":\"Drone Association Thailand\"},\"image\":{\"@id\":\"https:\/\/yousum.gpucore.co\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/DroneAssociationTH\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/yousum.gpucore.co\/#\/schema\/person\/97fa48242daf3908e4d9a5f26f4a059c\",\"name\":\"admin NU\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/yousum.gpucore.co\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/youzum.net\/wp-content\/uploads\/avatars\/2\/1746849356-bpfull.png\",\"contentUrl\":\"https:\/\/youzum.net\/wp-content\/uploads\/avatars\/2\/1746849356-bpfull.png\",\"caption\":\"admin NU\"},\"url\":\"https:\/\/youzum.net\/fr\/members\/adminnu\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"RAG Without Vectors: How PageIndex Retrieves by Reasoning - YouZum","description":"\u0e01\u0e34\u0e08\u0e01\u0e23\u0e23\u0e21\u0e40\u0e01\u0e35\u0e48\u0e22\u0e27\u0e01\u0e31\u0e1a\u0e42\u0e14\u0e23\u0e19","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/youzum.net\/fr\/rag-without-vectors-how-pageindex-retrieves-by-reasoning\/","og_locale":"fr_FR","og_type":"article","og_title":"RAG Without Vectors: How PageIndex Retrieves by Reasoning - YouZum","og_description":"\u0e01\u0e34\u0e08\u0e01\u0e23\u0e23\u0e21\u0e40\u0e01\u0e35\u0e48\u0e22\u0e27\u0e01\u0e31\u0e1a\u0e42\u0e14\u0e23\u0e19","og_url":"https:\/\/youzum.net\/fr\/rag-without-vectors-how-pageindex-retrieves-by-reasoning\/","og_site_name":"YouZum","article_publisher":"https:\/\/www.facebook.com\/DroneAssociationTH\/","article_published_time":"2026-04-26T15:29:39+00:00","author":"admin NU","twitter_card":"summary_large_image","twitter_misc":{"\u00c9crit par":"admin NU","Dur\u00e9e de lecture estim\u00e9e":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/youzum.net\/rag-without-vectors-how-pageindex-retrieves-by-reasoning\/#article","isPartOf":{"@id":"https:\/\/youzum.net\/rag-without-vectors-how-pageindex-retrieves-by-reasoning\/"},"author":{"name":"admin NU","@id":"https:\/\/yousum.gpucore.co\/#\/schema\/person\/97fa48242daf3908e4d9a5f26f4a059c"},"headline":"RAG Without Vectors: How PageIndex Retrieves by Reasoning","datePublished":"2026-04-26T15:29:39+00:00","mainEntityOfPage":{"@id":"https:\/\/youzum.net\/rag-without-vectors-how-pageindex-retrieves-by-reasoning\/"},"wordCount":835,"commentCount":0,"publisher":{"@id":"https:\/\/yousum.gpucore.co\/#organization"},"image":{"@id":"https:\/\/youzum.net\/rag-without-vectors-how-pageindex-retrieves-by-reasoning\/#primaryimage"},"thumbnailUrl":"https:\/\/youzum.net\/wp-content\/uploads\/2026\/04\/image-47-uv6wRf.png","articleSection":["AI","Committee","News","Uncategorized"],"inLanguage":"fr-FR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/youzum.net\/rag-without-vectors-how-pageindex-retrieves-by-reasoning\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/youzum.net\/rag-without-vectors-how-pageindex-retrieves-by-reasoning\/","url":"https:\/\/youzum.net\/rag-without-vectors-how-pageindex-retrieves-by-reasoning\/","name":"RAG Without Vectors: How PageIndex Retrieves by Reasoning - YouZum","isPartOf":{"@id":"https:\/\/yousum.gpucore.co\/#website"},"primaryImageOfPage":{"@id":"https:\/\/youzum.net\/rag-without-vectors-how-pageindex-retrieves-by-reasoning\/#primaryimage"},"image":{"@id":"https:\/\/youzum.net\/rag-without-vectors-how-pageindex-retrieves-by-reasoning\/#primaryimage"},"thumbnailUrl":"https:\/\/youzum.net\/wp-content\/uploads\/2026\/04\/image-47-uv6wRf.png","datePublished":"2026-04-26T15:29:39+00:00","description":"\u0e01\u0e34\u0e08\u0e01\u0e23\u0e23\u0e21\u0e40\u0e01\u0e35\u0e48\u0e22\u0e27\u0e01\u0e31\u0e1a\u0e42\u0e14\u0e23\u0e19","breadcrumb":{"@id":"https:\/\/youzum.net\/rag-without-vectors-how-pageindex-retrieves-by-reasoning\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/youzum.net\/rag-without-vectors-how-pageindex-retrieves-by-reasoning\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/youzum.net\/rag-without-vectors-how-pageindex-retrieves-by-reasoning\/#primaryimage","url":"https:\/\/youzum.net\/wp-content\/uploads\/2026\/04\/image-47-uv6wRf.png","contentUrl":"https:\/\/youzum.net\/wp-content\/uploads\/2026\/04\/image-47-uv6wRf.png","width":1187,"height":367},{"@type":"BreadcrumbList","@id":"https:\/\/youzum.net\/rag-without-vectors-how-pageindex-retrieves-by-reasoning\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/youzum.net\/"},{"@type":"ListItem","position":2,"name":"RAG Without Vectors: How PageIndex Retrieves by Reasoning"}]},{"@type":"WebSite","@id":"https:\/\/yousum.gpucore.co\/#website","url":"https:\/\/yousum.gpucore.co\/","name":"YouSum","description":"","publisher":{"@id":"https:\/\/yousum.gpucore.co\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/yousum.gpucore.co\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/yousum.gpucore.co\/#organization","name":"Drone Association Thailand","url":"https:\/\/yousum.gpucore.co\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/yousum.gpucore.co\/#\/schema\/logo\/image\/","url":"https:\/\/youzum.net\/wp-content\/uploads\/2024\/11\/tranparent-logo.png","contentUrl":"https:\/\/youzum.net\/wp-content\/uploads\/2024\/11\/tranparent-logo.png","width":300,"height":300,"caption":"Drone Association Thailand"},"image":{"@id":"https:\/\/yousum.gpucore.co\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/DroneAssociationTH\/"]},{"@type":"Person","@id":"https:\/\/yousum.gpucore.co\/#\/schema\/person\/97fa48242daf3908e4d9a5f26f4a059c","name":"admin NU","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/yousum.gpucore.co\/#\/schema\/person\/image\/","url":"https:\/\/youzum.net\/wp-content\/uploads\/avatars\/2\/1746849356-bpfull.png","contentUrl":"https:\/\/youzum.net\/wp-content\/uploads\/avatars\/2\/1746849356-bpfull.png","caption":"admin NU"},"url":"https:\/\/youzum.net\/fr\/members\/adminnu\/"}]}},"rttpg_featured_image_url":{"full":["https:\/\/youzum.net\/wp-content\/uploads\/2026\/04\/image-47-uv6wRf.png",1187,367,false],"landscape":["https:\/\/youzum.net\/wp-content\/uploads\/2026\/04\/image-47-uv6wRf.png",1187,367,false],"portraits":["https:\/\/youzum.net\/wp-content\/uploads\/2026\/04\/image-47-uv6wRf.png",1187,367,false],"thumbnail":["https:\/\/youzum.net\/wp-content\/uploads\/2026\/04\/image-47-uv6wRf-150x150.png",150,150,true],"medium":["https:\/\/youzum.net\/wp-content\/uploads\/2026\/04\/image-47-uv6wRf-300x93.png",300,93,true],"large":["https:\/\/youzum.net\/wp-content\/uploads\/2026\/04\/image-47-uv6wRf-1024x317.png",1024,317,true],"1536x1536":["https:\/\/youzum.net\/wp-content\/uploads\/2026\/04\/image-47-uv6wRf.png",1187,367,false],"2048x2048":["https:\/\/youzum.net\/wp-content\/uploads\/2026\/04\/image-47-uv6wRf.png",1187,367,false],"trp-custom-language-flag":["https:\/\/youzum.net\/wp-content\/uploads\/2026\/04\/image-47-uv6wRf-18x6.png",18,6,true],"woocommerce_thumbnail":["https:\/\/youzum.net\/wp-content\/uploads\/2026\/04\/image-47-uv6wRf-300x300.png",300,300,true],"woocommerce_single":["https:\/\/youzum.net\/wp-content\/uploads\/2026\/04\/image-47-uv6wRf-600x186.png",600,186,true],"woocommerce_gallery_thumbnail":["https:\/\/youzum.net\/wp-content\/uploads\/2026\/04\/image-47-uv6wRf-100x100.png",100,100,true]},"rttpg_author":{"display_name":"admin NU","author_link":"https:\/\/youzum.net\/fr\/members\/adminnu\/"},"rttpg_comment":0,"rttpg_category":"<a href=\"https:\/\/youzum.net\/fr\/category\/ai-club\/\" rel=\"category tag\">AI<\/a> <a href=\"https:\/\/youzum.net\/fr\/category\/committee\/\" rel=\"category tag\">Committee<\/a> <a href=\"https:\/\/youzum.net\/fr\/category\/news\/\" rel=\"category tag\">News<\/a> <a href=\"https:\/\/youzum.net\/fr\/category\/uncategorized\/\" rel=\"category tag\">Uncategorized<\/a>","rttpg_excerpt":"Retrieval is where most RAG systems quietly break. Traditional pipelines rely on vector similarity\u2014embedding queries and document chunks into the same space and fetching the \u201cclosest\u201d matches. But similarity is a weak proxy for what we actually need: relevance grounded in reasoning. In long, professional documents\u2014like financial reports, research papers, or legal texts\u2014the right answer\u2026","_links":{"self":[{"href":"https:\/\/youzum.net\/fr\/wp-json\/wp\/v2\/posts\/86214","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/youzum.net\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/youzum.net\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/youzum.net\/fr\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/youzum.net\/fr\/wp-json\/wp\/v2\/comments?post=86214"}],"version-history":[{"count":0,"href":"https:\/\/youzum.net\/fr\/wp-json\/wp\/v2\/posts\/86214\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/youzum.net\/fr\/wp-json\/wp\/v2\/media\/86215"}],"wp:attachment":[{"href":"https:\/\/youzum.net\/fr\/wp-json\/wp\/v2\/media?parent=86214"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/youzum.net\/fr\/wp-json\/wp\/v2\/categories?post=86214"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/youzum.net\/fr\/wp-json\/wp\/v2\/tags?post=86214"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}