FAISS-based RAG utility library
Project description
rag-toolkit
FAISS ベースの RAG(Retrieval-Augmented Generation)ユーティリティライブラリです。
インストール
pip install -e .
# PDF から DB を作る場合は追加で必要
pip install pdfminer.six
ディレクトリ構成
rag_toolkit/
├── __init__.py
├── builders/
│ └── db_builder.py # ベクトル DB 作成クラス
├── retrievers/
│ └── faiss_retriever.py # 検索クラス(ライブラリの中心)
└── tools/
└── tool.py # LLM ツール基底クラス
クラス概要
| クラス | 役割 |
|---|---|
DBBuilder |
PDF・CSV・JSON からベクトル DB を作成する |
FaissRetriever |
単体検索・複数 DB 横断検索・LLM ツール連携をすべて担うコアクラス |
Tool |
LLM エージェント連携用の抽象基底クラス |
DBBuilder が出力するファイル形式
| ソース | デフォルトのファイル名 | FaissRetriever での読み込み |
|---|---|---|
vector_index.faiss / metadata.json |
デフォルト設定で読める | |
| CSV | qa_index.faiss / qa_metadata.json |
index_filename / meta_filename を指定 |
| JSON | knowledge_index.faiss / knowledge_metadata.json |
index_filename / meta_filename を指定 |
DB の作成(DBBuilder)
基本的な流れ
from rag_toolkit import DBBuilder
builder = DBBuilder(output_dir="database/my_system/")
# PDF からマニュアル DB を作成
builder.build_from_pdf(["manual.pdf", "release_notes.pdf"])
# CSV(Q/A)から QA DB を作成
builder.build_from_csv("qa.csv")
# JSON からキャラクター知識 DB を作成
builder.build_from_json("knowledge.json")
例1: PDF からマニュアル DB
from rag_toolkit import DBBuilder
builder = DBBuilder(
output_dir="database/sample_XYZ_system/",
chunk_size=1000, # 1チャンクあたりの文字数
chunk_overlap=200, # チャンク間のオーバーラップ文字数
)
builder.build_from_pdf(
pdf_files=[
"database/sample_XYZ_system/XYZシステムリリースノート.pdf",
"database/sample_XYZ_system/XYZシステム統合ユーザーマニュアル.pdf",
],
index_filename="vector_index.faiss",
meta_filename="metadata.json",
)
例2: CSV(Q/A形式)から QA DB
builder.build_from_csv(
csv_file="database/sample_XYZ_system/XYZ_system_QA.csv",
question_col="Q", # 質問列のヘッダー名
answer_col="A", # 回答列のヘッダー名
index_filename="qa_index.faiss",
meta_filename="qa_metadata.json",
)
例3: JSON からキャラクター知識 DB
from rag_toolkit import DBBuilder
knowledge_builder = DBBuilder(output_dir="database/DB_ikazuchi_mal/")
knowledge_builder.build_from_json(
json_file="database/documents_mal_knowledge.json",
index_filename="knowledge_index.faiss",
meta_filename="knowledge_metadata.json",
category_value="いかづちマル", # metadata["カテゴリ"] を上書きしたい場合
)
複数 DB を作る際のモデル共有(メモリ節約)
from rag_toolkit import DBBuilder
# builder を 1 つ作り、同じモデルで複数の DB を続けて作成できる
builder = DBBuilder(output_dir="database/sample_XYZ_system/")
builder.build_from_pdf([...])
builder.build_from_csv(...)
# 別の出力先に作る場合もモデルを渡して使い回せる
knowledge_builder = DBBuilder(
output_dir="database/DB_ikazuchi_mal/",
model=builder.model, # ← ロード済みモデルを渡す
)
knowledge_builder.build_from_json(...)
DB の検索(FaissRetriever)
1. 単体検索
from rag_toolkit import FaissRetriever
# マニュアル検索
manual = FaissRetriever(
name="search_xyz_manual",
description="XYZシステムの仕様書・マニュアルを検索する",
database_dir="database/sample_XYZ_system/",
meta_page_key="page", # ページ番号を表示したい場合に指定
)
# QA 検索("question+answer" で Q/A 結合テキストを参照)
qa = FaissRetriever(
name="search_xyz_qa",
description="XYZシステムの過去QAを検索する",
database_dir="database/sample_XYZ_system/",
index_filename="qa_index.faiss",
meta_filename="qa_metadata.json",
meta_text_keys=["text", "question+answer"],
)
print(manual.run_query("パスワードのリセット手順"))
print(qa.run_query("ログインできない場合の対処法"))
2. 複数 DB 横断検索
# スコア上位順でまとめて返す
results = FaissRetriever.search_multi([manual, qa], "ログインエラーの対処法")
for r in results:
print(r["source"], r["total_score"], r["text"])
# 文字列として取得
text = FaissRetriever.search_multi_as_str([manual, qa], "ログインエラーの対処法")
print(text)
3. LLM エージェントのツールとして使う
retriever = FaissRetriever(
name="search_xyz_manual",
description="XYZシステムの仕様書・マニュアルを検索する",
database_dir="database/sample_XYZ_system/",
prompt="以下の参考情報をもとに回答してください。",
)
context = {"query_text": "エラーコード E-501 の意味"}
result = retriever.run(context)
# result["status"] -> "success" or "ignore"
# result["message"] -> prompt + 検索結果(LLM に渡す文字列)
print(result["message"])
依存ライブラリ
| ライブラリ | 用途 |
|---|---|
faiss-cpu >= 1.7 |
ベクトルインデックスの構築・検索 |
sentence-transformers >= 2.2 |
テキストの埋め込みベクトル化 |
numpy >= 1.24 |
数値演算 |
pdfminer.six(任意) |
PDF からのテキスト抽出(build_from_pdf 使用時のみ) |
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
rag_support_toolkit-0.1.1.tar.gz
(16.8 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file rag_support_toolkit-0.1.1.tar.gz.
File metadata
- Download URL: rag_support_toolkit-0.1.1.tar.gz
- Upload date:
- Size: 16.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
47c1bdfb04f38acdedb7803ea4f0f2ab683c1d36a202f27b8f2c0174ea9882a4
|
|
| MD5 |
cb0a1e96321b5a09b7de93198f3c3aa7
|
|
| BLAKE2b-256 |
d7684ca704cc8e0371aa090b2e030e7e620c217a0f9fa362d0539f76490c8090
|
File details
Details for the file rag_support_toolkit-0.1.1-py3-none-any.whl.
File metadata
- Download URL: rag_support_toolkit-0.1.1-py3-none-any.whl
- Upload date:
- Size: 26.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b6badf4fe0dd120cf5eec16a7237c508415f6fb6ab760310ed288e2626c00693
|
|
| MD5 |
7efa55aeb304000f87995d088076fb34
|
|
| BLAKE2b-256 |
497d1bedeca5a32ac55d4397f44c116279e04da7ffbb3626589cb613015999dc
|