PageIndex: Безвектарны РАГ на адмысловай аснове з дрэўяным індэксам
PageIndex заменяе базу дадзеных вектараў на індэкс дрэва, кіроўваны LLM. Як працюе гэты метод RAG, апоўнены выкладкамі, з кодам на Python, падключэннем MCP і ціфрамі кантрольных тэстаў.
Крыніцы: PageIndex: The RAG Framework That Threw Out Vector Databases and Still Hit 98.7% Accuracy
Уявіце сабэкстракцыйны фрэймворк RAG, які зовсім не вікорыстоўвае вектарныя базы дадзэння, і які паказвае рэзультат тэста, да якога ніякая сістэма, апаратная на эмбедынгах, не можа нават падыйсці. Гэта PageIndex — праект з відкрытым кодам ад VectifyAI. У FinanceBench, стандартным тэсце для адпаведзення на запытанні ў фінансовых дакументах, звычны RAG на эмбедынгах показвае рэзультаты ад 30 да 50 процэнтав. PageIndex паказвае 98,7 процэнта. Ён не досяг гэтага рэзультата за дапамогою лепшага модэлю эмбедынга — ён досяг гэтага, адмовіўшыся ад эмбедынгаў.
Гэты рэзультат заслуговае на ўважлівыя перагляды, адтолькі ўпыткі адпаведзення на запытанні ў фінансовых дакументах SEC ёсць аднамі з найжорсткіяў тэстаў адзысквання інфармацыі ў практычным AI. Яны выклікаюць багаташагоныя мірыванні, перэходы між раздзеламі і патрэбу ў точных цыфрах. Найлепшыя сістэмы, якія існуюць, не вікорыстоўваюць ні вектараў, ні чанкавання, ні вектарныя базы дадзэння.
У гэтым артыкуле паказана, што робіць PageIndex, як ён практычна пабудаваны, працуючы код на Python, дзе ён прадстаўляе ся як лепшы раўнэй, а дзе — ні.
Стэна, якую часта перакладчыка зустрэчае
Кожны, хто стварыў RAG для матэрыялу, дыягональны ў болейшым меры, чым пост у блогу, знае проблемы. Пользоватэль запытае сістэму, адаснованую на 200-стороннім годовым адчытніку, як загальны чысты дохід у фінансовым годзе 2024 паўтараецца па адносу да фінансовага году 2023. Стандартны працэс выглядае так:
- Раздзеліце дакумент на часткі фіксаванага розмеру, зазвычай 300–500 токенав.
- Вбудуўце кожную частку за дапамогою модэлю, такога як
text-embedding-3-large. - Зберагучы вектары ў Pinecone, Weaviate, Milvus, Chroma, pgvector або падобных сервісах.
- Пад час запытку вбудуўце запіт і выкарыстоўваючы косай схожасць, знайдзіце k найбліжэйшых вектараў.
- Перадайце этыя часткі LLM, каб той напісаў адпаведны адказ.
Для короткіх, неструктураваных матэрыялаў, такіх як посты у блогу, запыткі падтрымкі і інструкцыі да продукту, гэта чудова. Але дакументы фармату 10-K разбіваюцься на часткі прыгадным спосабам.
Запіт не выглядае як адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна адпаведна а Няма запамятовання між раундамі. Калі попераднее поведамленне стосавалася актываў, а наступна запітае «а як ўжо забаваннямі?», сістэма спрытнашукаўця спрацьвоўвае як абавесць новы запіт. Нічога не паведамляе яе пра тое, што выкарыстоўвальнік, верагодна, мае на увазе тую ж частку таго ж справаздачы. Межавыя апісанні залішаюцца непазорнымі. Падазроўваючы, што сторана 12 паказвае чытальнікам на Дадатак G, а гэты дадатак знаходзіцца на сторане 87, тэкст дадатка не мае семантычнага перакрыцця з первісным запітам, таму вектарны RAG ніколі не будзе следаваць за паказаннем. Введэнне метададзей межавых апісанняў у фрагменты ёсць альтэрнатыва, але яна нестабільна і не падлягае масштабаванню. Гэтыя не ўсё рэдкія крайнія кейсы. Яны вынікаюць з самай архітэктуры. Як сказаў спадзячы-заснавальнік VectifyAI Мінгцянь Чжан у аанунсе праекту, тое, што на самае справе патрэбна для спрытнага шукання, — цэлае рэлевантнасць, а рэлевантнасць выкалічваецца за дапамогою разумовых працэсаў. PageIndex — гэта безвектарная, апартыянарная праметка RAG, выданая компаніяю VectifyAI у верасні 2025 года, створаная Чжанам і Ю Тангам. Яна ліцензаваная па стандарце MIT, і колькасць файлаў у ўтрэбніку быстра зрасла: да канца марца 2026 года ў яй было 23 000 „звёзд“ і майжэ 2 000 копій. Яе цэнтральная ідэя паходзіць з AlphaGo. У працоўцы замест таго, каб абсалютна перасканаваць прастор і пораўняваць кожны фрагмент за дапамогою вектарнай сэмабільнасці, выкарыстоўваецца навучаная стратэгія для інтэлігентнага навігавання. PageIndex прыменяе гэты падход да дакументаў, маючы тры значныя характэрыстыкі: Этот метод складаецца з двух крокаў. Працэс перадачы дакумента не стварае жадных эмбеддынгаў. PageIndex аналізуе структуру дакумента і стварае іерархічнае дрэва, якое фактычна ўособлівае змест у фармаце, зручным для LLM. Кожны вузел мае заглавле, короткі апіс раздзіла, дыяпазон сторанак і дзеціны вузлы для падраздзілаў, якія можаць быць глыбока ўпакоўваныя за патрэбай. Дакумент SEC на 50 сторанак можа стварыць дрэва з 30 да 50 вузлаў, якія зберагаюцца як адна JSON-об’ект. Нічога не знаходзіцца ў базе дадзенаў у вектарнай форме — там толькі JSON. Весь об’ект помішчаецца ў адны акна кантэксту LLM, і можна адкрыць будзь-кі вузел і прачытаць яго. Вузел выглядае так:Што такое PageIndex
Крок 1: іерархічны дрэва-індэкс
{
"node_id": "0006",
"title": "Financial Stability",
"start_index": 21,
"end_index": 22,
"summary": "Covers the Federal Reserve's financial stability oversight...",
"sub_nodes": [
{
"node_id": "0007",
"title": "Monitoring Financial Vulnerabilities",
"start_index": 22,
"end_index": 28,
"summary": "Describes the Fed's vulnerability monitoring framework..."
},
{
"node_id": "0008",
"title": "Domestic and International Cooperation",
"start_index": 28,
"end_index": 31,
"summary": "Federal Reserve collaboration with international bodies..."
}
]
}
Кожны node_id паводзіць на неасоблёваны тэкст той часткі: тэкст, табліцы і з’явы. LLM можа запрашваць тэкст будзь-каго вузла, калі гэта неабходна.
Архітэктурны прынцып заключаецца у тым, дзе знаходзіцца гэты індэкс. База дадзэйна на адпрацоўку вектараў зберагае аддзельны, статычны індэкс эмбеддзінга паўтараючыся за межамі самага модэлю. Тут дрэва JSON знаходзіцца ў актыўным кантэксце LLM пад час выканання задач. VectifyAI называе гэты індэкс індэксам у кантэксце, і модэль не проста яго запытвае, але і аналізуе яго ў рэальны час.
Шаг 2: пошук у дрэве, керованы аналізам
Калі прыходзіць запіт, PageIndex дае LLM дрэво, у яком ўказаны толькі заглавы і апісанні, без самога тэксту, і фактычна запытае, дзе шукаць, вяручыся на гэтую структуру і запіт. Мадэль чытае заглавы і апісанні вузлаў, выявляе тыя раздзелы, якія, верагодна, маюць адпаведны адказ, і вяртае спіс ID вузлаў. Пасля чаго сістэма запрашае рэальны контэнт для гэтых вузлаў.
Працэс пошуку ўскладненыя цыклам:
- Аналізуеце зместовую табліцу, ўбачыбачыяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяя
Гэта іншая парадыгма, чым вектарны пошук. База дадзейнаў вектараў вырахоўвае косінусавую сэмабільнасць для кожнага фрагмента паралельна, што ўскораняе працэс, але дае поверхневыя рэзультаты. PageIndex жа выкарыстоўвае ЛІІ для аналізу, дзе, верагодна, знаходзіцца адпаведны адказ. Па ходу мадэль можа аналізаваць перакіраныя звязкі, разбіраць, што запіт пра даны дадатку належыць да вузла дадатку, і усвядомляць, што багатыя запыты вымагаюць контэнту з двух раздэлаў. Кожны крок таксама залеўвае след аналізу, таму можна пабачыць, якія вузлы былі адвідаваны і чаму. Так пракцэс выкарыстоўвання дадзейнаў перастае быць „чорным яшчыкам“.
Прыклад Дадатку G
Дэманстрацыя, створаная на адынстанцыі MCP ад VectifyAI, паказвае, чаму гэта мае значэнне. Касціваець запытаеся пра суму адкладзіных актываў у гадовым адчытніку Федэральнай рэзервной службы. У галоўной часты, на сторунках 75–82, обгаваруецца змяна адкладзіных актываў, але сума ніколі не наводзіцца. Аднак на сторунцы 77 ёсць рэчы, якія пазначаюць, што табліца 5.3 структуруе дохады, выдаткі і распадзелы, а Дадатак G дае болей дакладную інфармацыю.
Vector RAG застаецца тут. Дадатак G — гэта табліца цыфр, якая не мае сэмантычнай супарадненасці з запытам пра адкладзіныя актываў, таму база дадзеных яе ігнаруе. PageIndex працюе інакш. LLM чытае дрэво, пераходзіць да фінансовага раздзелу, знаходзіць апісанне пра Дадатак G, следуе за яным па дрэве, выкарыстоўвае правыя табліцы і вяртае точную цыфру, пры чым след абдумавання паказвае кожны крок.
Python, ад пачатку да канца
Код, які вы кануце, адаптаваны з офіцыяльнага кнігі прыемаў PageIndex, з каментарыямі, якія паказваюць алгорытм выканання. Пачніце з інсталяцыі:
pip install pageindex openai
Імпорт:
import os
import json
import asyncio
from pageindex import PageIndexClient
from openai import AsyncOpenAI
Потым — абанты і кліенты. Ключ API атрыбуецца з панелі керування PageIndex:
# Grab an API key from https://dash.pageindex.ai/api-keys
PAGEINDEX_API_KEY = os.environ["PAGEINDEX_API_KEY"]
OPENAI_API_KEY = os.environ["OPENAI_API_KEY"]pi_client = PageIndexClient(api_key=PAGEINDEX_API_KEY)
openai_client = AsyncOpenAI(api_key=OPENAI_API_KEY)
Стварыце дрэво
З’явіце неабяжлівыя засобы:
import pageindex.utils as utils
З’явіце PDF і дазвольце PageIndex стварыць дрэво. Індэксаванне займае трохі часу, таму скрыпт чакае, пакуль ён не будзе готавы, і выдрукоўвае рэзультат:
# Upload a PDF; PageIndex handles the tree generation
doc = pi_client.upload("annual_report_2024.pdf")
doc_id = doc["doc_id"]# Tree generation takes a bit, so we poll
while not pi_client.is_retrieval_ready(doc_id):
print("Still indexing...")
import time; time.sleep(5)# Grab the tree and take a look
tree = pi_client.get_tree(doc_id, node_summary=True)["result"]
print("Document Tree:")
utils.print_tree(tree)
У выдрукаваным дакуменце паказаны ўсі раздэлы, падраздэлы і дыяпазоны сторанак, што дазволяе адразу з’ясаваць, чы правільна дрэва адобразіла макет.
Дазвольце LLM шукаць у дрэве
Гэта ключовы крок. Функцыя прымеўае дрэва і запіт:
async def find_relevant_nodes(tree: dict, query: str) -> list:
"""LLM reasons over tree structure to identify relevant nodes."""
Унутрэ ўсё первасортнае тэкста адключаецца, каб захаваць токены, адтуды што модэлю патрэбны толькі загаловкі і апісанні. У запытэ модэль выступае як эксперт з пошуку дакументаў, яму прыказваюць следаваць за перакіранымі лінкамі, і прасаюць падаць JSON, які містыць яго аргументацыю плюс спіс ID-аў вузлаў:
# Strip raw text to save tokens; the LLM only needs titles and summaries
tree_without_text = utils.remove_fields(
tree.copy(), fields=["text"]
) search_prompt = f"""
You are a document retrieval expert. Given a question and
a hierarchical tree structure of a document, identify all
nodes likely to contain the answer. Each node has a node_id, title, and summary.
Follow cross-references if a section mentions another. Question: {query} Document tree structure:
{json.dumps(tree_without_text, indent=2)} Reply in this JSON format only:
{{
"thinking": "<reasoning about which nodes are relevant>",
"node_list": ["node_id_1", "node_id_2"]
}}
""" response = await openai_client.chat.completions.create(
model="gpt-4.1",
messages=[{"role": "user", "content": search_prompt}],
temperature=0,
response_format={"type": "json_object"},
) result = json.loads(response.choices[0].message.content)
print(f"LLM reasoning: {result['thinking']}")
return result["node_list"]
З’явіць контэнт і адказ
Наступная функцыя збірае неапдэтаваны тэкст для выбраных вузлоў:
def collect_node_content(tree: dict, node_ids: list) -> str:
"""Pull raw text from the nodes the LLM selected."""
all_nodes = utils.flatten_tree(tree)
context_parts = []
Потым тэлы цыклу сабірае кантэкст, пры чым кожны раздзел пазначаецца загалом і дыяпазонам сторанак, а весь працэс заключаецца ў цэлыяе: выбіраюцца вузлы, запрашваецца контэнт, ствараецца адказ з цітатамі, і адказ вяртаецца разам з выкарыстоўванымі вузламі.
for node in all_nodes:
if node["node_id"] in node_ids:
title = node.get("title", "Untitled")
pages = f"pages {node.get('start_index', '?')}-{node.get('end_index', '?')}"
text = node.get("text", "")
context_parts.append(
f"[{title} | {pages}]\n{text}"
)
return "\n\n---\n\n".join(context_parts)
async def answer_query(tree: dict, query: str) -> dict:
"""Full vectorless RAG pipeline: tree search + answer generation.""" # Step 1: LLM picks the nodes
node_ids = await find_relevant_nodes(tree, query) # Step 2: Fetch content from those nodes
context = collect_node_content(tree, node_ids) # Step 3: Generate answer with citations
answer_prompt = f"""
Answer the question using only the provided context.
Cite specific pages and sections in your answer. Context:
{context} Question: {query}
""" response = await openai_client.chat.completions.create(
model="gpt-4.1",
messages=[{"role": "user", "content": answer_prompt}],
temperature=0,
) return {
"answer": response.choices[0].message.content,
"retrieved_nodes": node_ids,
"context_length": len(context),
}
# Run it
query = "What was the total value of deferred assets in 2023?"
result = asyncio.run(answer_query(tree, query))
print(result["answer"])
print(f"Nodes used: {result['retrieved_nodes']}")
Падзеце ў MCP
Для Claude, Cursor чы рэгулярнага агента, які падтрымлівае MCP, PageIndex падключаецца безпосерэдня праз хоставаны сервер:
{
"mcpServers": {
"pageindex": {
"type": "http",
"url": "https://api.pageindex.ai/mcp",
"headers": {
"Authorization": "Bearer your_api_key"
}
}
}
}
Таксама існуе местны сервер MCP для аплодавання файлаў з дыска, і ён патрабуе Node.js 18 або новейшай версіі:
{
"mcpServers": {
"pageindex": {
"command": "npx",
"args": ["-y", "@pageindex/mcp"]
}
}
}
Цыфры ў кантэксце
Главныя паказнікі апранутыя FinanceBench, якая выкарыстоўвае рэальныя дакументы SEC, укладзеныя як 10-K, 10-Q, так і 8-K, і прыймае толькі точныя адпаведзі. Агент фінансовага аналізу Mafin 2.5 ад VectifyAI, створаны на базе PageIndex, быў працаваны на всій базе дадзенаў. Звярнутая точнасць:
| Сістэма | Точнасць | Розмах пакрыцця бенчмаркамі |
|---|---|---|
| Mafin 2.5 (PageIndex) | 98,7% | 100% |
| Традыцыяны вектарны RAG | апошні 50% | змінюецца |
| GPT-4o без RAG | апошні 31% | 100% |
| Perplexity | апошні 45% | змінюецца |
Разлік у апошні 49 пунктавых прыцэпаў па адносу да традыцыянага вектарнага RAG — гэта не маленькі прагрэс. Гэта абсалютна іншая катэгорыя рэзультатаў. Тры фактары яшчэ раз выступаюць:
- Следуючыя междувыкліканыя апавязы. Указванні ў самым дакуменце, такія як "дывіцеся Дадатак G", пераводзяцца па структуры дрэва. Пошук на адпоўнасць не ведае пра іх.
- Зберэнне структуры. Табліцы маюць заголовкі, прымечанні і зв’язкі межаў клетак. PageIndex зберагае іх як вузлы дрэва, тады калі працэс разбівання на часткі іх знішчае.
- Багатыятковая логіка. Запыт, які паўставае ў зв’язку з паўранку 2023 і 2024 гадоў і прадастаўляецца ў разных частках дакумента, практычна адмаўляецца за дапамогою ітэратыўнага цыклу.
Дзе ён не дастатні
PageIndex ўражае сваім практычным прызначэннем, але ён не можа заменіць вектарны RAG у всіх сітуацыях.
- Ён медленней. Кожны запрашэнне выклікае калькі LLM: чытанне індэкса, аналіз вузлаў, запрашэнне контэнту, перакананне ў достатку інфармацыі, можа, петля. Vector RAG адпавядае за мілісэкунды, а PageIndex — за секунды. Соўтаўнік-заснавальнік зазначыў, што чынючы, што запрашэнні выконваюцца падчас самага стварэння рэзультата, час на першы токен можа быць падобны да часу звычайнага калькі LLM, але абшчая затрэмтванасць застаецца вышэй.
- Ён коштуе больш. Неякі калькі інферэнса на кожны запрашэнне проты аднаго запрашэння на аднае імбеддынгаванне. Пры вялікім об’ёме расчыткі стаюць складнымі.
- Ён створаны для глыбіны, а не для шыроты. Ён адзінакава справляецца з глыбокым выкарыстоўваннем інфармацыі з аднаго дужа дзяўнага дакумента. Пошук 10 000 короткіх дакументаў адразу — гэта там, дзе векторныя базы дадзеных прадкладваюць ся, а стварэнне і аналіз дрэва для кожнага з іх не ёсць практычным.
Калі яго вжываць
Выбірайце PageIndex, калі:
- дакументы ў довгім фармаце, структураваныя і професійныя: годовыя звясткі, контракты, дакументы, засланыя для рэгулявання, тэхнічныя інструкцыі
- точнасць важнейша за швальнасць, напрыклад, калі неправільны адказ можа коштаць грошы або стварыць рызык несанкцыянацыі
- запытанняям трэбая багатаэтапная аналіза або перэход між разнымі часткамі дакумента
- вам патрэбныя лёгкія для аўдыту следы, адколькі кожны адказ супроводжваецца аналізам і пасыланнямі на відпаведныя элементы, што ценяцца ў рэгулююцыхся галузях
Застаўцеся з вектарным RAG, калі:
- Падобнае сітуацыя выклікае патрэбу ў адказах за час, меншы за секунду, пры вялікай колькасці запытанняў.
- Вы шукаеце ў вялікай канцэнтрацыі короткіх дакументаў.
- Дакументы ў такім случае не маюць структуры або ўжо ў форме дыялогу.
- Точнасць у 90 процэтаў ўжо ўсё ў парадку.
- Галоўным абмежэннем ёсць вартасць адпаведзення на адзін запыт.
Гібрыдны падход, верагодна, недастатнька доследжаны. Іспользуйце векторны пошук, каб выявіць, які дакумент у вялікай канцэнтраціі ёсць значным, а пасля перадайце яго на апрацоўку у PageIndex для глыбокай аналізы.
Што новага з моменту запуску
Праект развіваецца стрэмгана з сэптэбра 2025 года.
Агентны RAG без вектараў. Няўянейшая версія паў’язвае самастойна розмешчаны PageIndex з SDK OpenAI Agents. Агенту даўнаецца тры інструменты (get_document(), get_document_structure() і get_page_content()), і ён сам аналізуе структуру, выклікаючы неабходныя інструменты і запрашаючы контэнт без ручнага выбору вузлаў. Гэта прыклад, з якога трэба выйсці для стварэння агентных рабочых практык:
pip install openai-agents
python3 examples/agentic_vectorless_rag_demo.py
Рэжым на адказе візуальнай аналізы, без OCR. Тэпер шлях апрацоўкі дакументаў, які выкарыстоўвае візуальную аналізу, прымыкае без OCR. Адпраўкі сторанак ідуць безпасцерожна да модэлю, які працуе з візуальнымі дадзеннямі, а структура дакумента формуецца на адказе таго, што модэль бачыць на сторанцы. Гэта мае значэнне для фінансавых дакументаў, дзе распаковка балансу мае такі ж значэнне, як і тэкст. Графікі, табліцы з злучанымі клеткамі і прымечанні застаюцца недыскрэтаванымі, таму што нічога спачатку не ператвараецца ў тэкст.
SDK на TypeScript, pageindex-js-sdk, з’явіўся на пачатку 2026 года для інтэграцыі з Node.js і інструментамі для дакументаў у інтэрнэце. Пашырэнне для нарадчага стола .mcpb, якое можна запусціць адной клікам, інсталюе PageIndex у Claude Desktop, пры чым OAuth адбываецца аўтаматычна. ChatIndex, аддзельны рэпазітарый з январа 2026 года, прыменяе тую ж ідэю індэксавання структуры да дзейнароў дзяўнікаў.
Шырэйшыя змяны
PageIndex являецца частыней шырэйшага пераходу ад пасыўнага выкарыстоўвання інструментаў для пошуку, якія знаходзяць все, што выглядае падобна, да актыўнага, самастоятэльнага пошуку, які аналізуе, дзе трэба шукаць. Гэта вялікія відчутныя ў інструментах для програмавання. Claude Code і Cursor адступілі ад вектарных тэхналогій RAG для коду на корыстцу актыўнага аналізу кодавой базы, і каманда PageIndex спакушаецца, што дакументы таксама будуць следаваць за гэтым напрамкам. Для структураваных дакументаў такое прыпусканне здаецца правдападобным.
Вектарныя базы дадзеных не знікнуць. Яны быстрыя, дышэчныя і дастаткова якісныя для вельмі шырокага спектру задач. Але там, дзе правільнасць, працяйнасць і глыбокое разумеўце дакументаў ёсць непрыемлемымі, як у фінансавых аўдытах, правовых розследаваннях, медычных запісах і дотрыманні рэгуляцый, пошук на адной засадзе логічных выводам ёсць прыродна лепшым рашэннем.
Код і дакументы знаходзяцца на https://github.com/VectifyAI/PageIndex, а дакументацыя — на https://docs.pageindex.ai/.
Супаўязаныя матэрыялы
- Выкорыстоўванне агентаў у працэсе віробніцтва за дапамогою Foundry Agent Service і Agent Framework — Як працэс падготовкі до продажаў пераходзіць з локальнага коду на хоставаны, адзначаны ідэнтытэтом, із ізольаваным сераўерам і стэжэннем, опублікованае ў Microsoft 365 і апараное на дадзэннях падпрыемства.
- Аўдыт працэса адзысквання дадзэнняў у RAG для выяўлення застарэлых частак, адхылэнняў і шумных кантэкстаў — Скрыпт для аўдыту на Python для працэса адзысквання дадзэнняў у RAG: золатыя запыты, крытэрыя рэлевантнасі на адзынку Косіна, перакананні ў адхылэннях за методам Колмагораўа-Смірнаўа і эфектывасць кантэкста, а таксама спосабы чытання яго атласа.