コンテンツにスキップ

Chunky - RAG チャンキングツールキット チートシート

Chunky - RAG チャンキングツールキット チートシート

Chunky はオープンソースのツールキット — 確実な RAG 取り込みパイプライン用、チャンキング段階に焦点。PDF を Markdown に変換、ドキュメントをクリーン、チャンキング戦略を検査・比較できる、チャンクメタデータを充実化して LLM アプリケーション向けに。取得品質は文書がどのように分割されるかで上限となるため、Chunky の価値はチャンキング段階を見えて調整可能にすることで、盲目的なデフォルトの代わりに。

インストール

方法コマンド
pippip install chunky
uvuv add chunky
ソースからgit clone https://github.com/GiovanniPasq/chunky && cd chunky && pip install -e .
確認python -c "import chunky; print('ok')"

パイプラインステージ

ステージ目的
変換PDF/ドキュメントをクリーン Markdown に変換
クリーンボイラープレート、アーティファクトを削除
チャンク選択した戦略を使用してテキストを分割
検査結果のチャンクを可視化
比較複数の戦略を実行して比較
充実化メタデータを添付(見出し、ソース、位置)

変換 & クリーン

import chunky

# PDF をクリーン Markdown に変換
md = chunky.to_markdown("report.pdf")

# 一般的なアーティファクトをクリーン(ヘッダー/フッター、ハイフン化、ノイズ)
md = chunky.clean(md)
関数説明
to_markdown(path)ドキュメントを Markdown に変換
clean(text)ボイラープレートを削除して正規化

チャンキング戦略

戦略分割対象
固定サイズN トークン/文字とオーバーラップ
再帰的段落 → 文 → 単語(必要に応じて)
Markdown / 見出し認識ドキュメント構造(###、セクション)
セマンティック埋め込み類似度の境界
トークン認識の改善小さすぎるチャンクをマージ、大きすぎるチャンクを分割
chunks = chunky.chunk(
    md,
    strategy="header_aware",
    max_tokens=512,
    overlap=64,
    repeat_headers=True,   # テーブル分割全体で見出しを実施
)
for c in chunks:
    print(len(c.tokens), c.metadata["heading"])

検査 & 比較

差別化:各戦略がコミット前に何を生成するかを見て比較。

# チャンク境界とサイズを検査
chunky.inspect(chunks)            # サイズ、オーバーラップ、境界

# 同じドキュメント上の戦略を比較
report = chunky.compare(
    md,
    strategies=["fixed", "recursive", "header_aware", "semantic"],
    max_tokens=512,
)
print(report)   # 戦略ごとの統計:カウント、サイズ分布、断片化
関数表示
inspect(chunks)サイズ分布、オーバーラップ、境界
compare(text, strategies=[...])サイドバイサイド戦略メトリクス

メタデータ充実化

メタデータ取得で使用
見出しパスコンテキスト拡張 / フィルタリング
ソース + ページ引用
位置/インデックス順序付けおよび隣接ルックアップ
トークンカウントプロンプト時のバジェット管理
enriched = chunky.enrich(chunks, source="report.pdf")
# 各 chunk.metadata は見出しパス、ページ、ソース、インデックスを実施

一般的なワークフロー

# エンドツーエンド:PDF → クリーン Markdown → 見出し認識チャンク → 充実化
import chunky
md = chunky.clean(chunky.to_markdown("manual.pdf"))
chunks = chunky.chunk(md, strategy="header_aware", max_tokens=512, overlap=64)
chunks = chunky.enrich(chunks, source="manual.pdf")
# chunk.text を埋め込み、chunk.metadata をベクトル DB と共に保存
# 推測ではなく証拠を使用して戦略を選択
print(chunky.compare(md, strategies=["recursive", "header_aware", "semantic"]))

Chunky vs その他のアプローチ

側面Chunkyフレームワークデフォルト分割器Docling
戦略比較一級市民手動限定的
変換 + クリーン組み込み組み込み
最適用途チャンキング段階をチューニングクイックスタート完全なパース + チャンク

Docling での解析およびベクトル DB での保存とペアリングすると良好 — Chunky の仕事は分割を正しく取得することです。

リソース