長い PDF(決算書、契約書、技術マニュアルなど)に質問するための、ベクトル DB を使わない RAG のライブラリ。文書から目次のような木構造の索引を作り、LLM がその木をたどって関係する節を読みにいく。どこを根拠にしたかを示せる。

できること

  • PDF から、章や節の木構造の索引を作る
  • 質問に対して、LLM が索引をたどって関係する節だけを読み、答えを返す
  • 答えの根拠になったページや節を示す
  • 自分の LLM の API キーで手元だけで動かす(local mode)か、有料のクラウド版に切り替える
  • OpenAI Agents SDK や Claude Agent SDK などのエージェントに、道具として組み込む

使い方

pip install -U pageindex で入れ、LLM の API キー(例:OpenAI)を環境変数に入れる。PageIndexClient を作って submit_document("report.pdf") で索引を作り、chat("質問", doc_id=...) で聞く。

活用できそうな場面

  • 長い製品マニュアルや設計書に「この設定の上限は?」と聞いて、該当ページ付きで答えさせるのに使えそう
  • ベクトル DB を立てずに、社内の規程集などに質問できる仕組みを試すのに使えそう

向いている人

長い PDF を相手にした RAG を作っていて、ベクトル検索の精度に困っている人

似ているもの

  • ベクトル DB を使う一般的な RAG(LangChain、LlamaIndex など):文書を細かく切って似た部分を探す。こちらは切らずに目次をたどる
  • PDF をそのまま LLM に渡す方法:文書全体を毎回読ませる。こちらは必要な節だけを読むので、長い文書ほど費用が抑えられると README は主張している

技術

Python。索引作りと検索に外部の LLM(OpenAI など)を使う。手元の版は文字の入った PDF 向けで、スキャンした PDF や画像の多い文書(OCR)はクラウド版の機能。

注意点

索引を作るときも質問するときも LLM を呼ぶので、API の費用がかかる。スキャンした PDF の OCR など、一部の機能は有料のクラウド版にしかない。「ベクトル RAG より正確」はベンチマーク上の主張で、文書によって違うと思われる。