تخطَّ إلى المحتوى

Chunky - مجموعة أدوات RAG التقسيم

Chunky - مجموعة أدوات RAG التقسيم

Chunky هي مجموعة أدوات مفتوحة المصدر لبناء خطوط أنابيب استيعاب RAG موثوقة، تركز على مرحلة التقسيم التي يتم تجاهلها غالباً. فهو يحول ملفات PDF والمستندات إلى Markdown يمنحك فحص المقاطع ومقارنة استراتيجيات التقسيم جنباً إلى جنب وإثراء بيانات وصف المقطع لتطبيقات LLM. لأن جودة الاسترجاع محدودة بكيفية تقسيم المستندات، فإن قيمة Chunky تجعل خطوة التقسيم مرئية وقابلة للتعديل بدلاً من افتراضي أعمى.

التثبيت

الطريقةالأمر
pippip install chunky
uvuv add chunky
From sourcegit clone https://github.com/GiovanniPasq/chunky && cd chunky && pip install -e .
التحققpython -c "import chunky; print('ok')"

مراحل خط الأنابيب

المرحلةالغرض
Convertتحويل PDF/docs إلى Markdown نظيف
Cleanإزالة الغلاف، وإصلاح الآثار
Chunkنص منقسم باستخدام استراتيجية مختارة
Inspectتصور الأجزاء الناتجة
Compareتشغيل استراتيجيات متعددة والمقارنة
Enrichأرفق البيانات الوصفية (الرؤوس والمصدر والموضع)

تحويل وتنظيف

import chunky

# Convert a PDF to clean Markdown
md = chunky.to_markdown("report.pdf")

# Clean common artifacts (headers/footers, hyphenation, noise)
md = chunky.clean(md)
الدالةالوصف
to_markdown(path)تحويل مستند إلى Markdown
clean(text)شطب الغلاف والعادي

استراتيجيات التقسيم

الاستراتيجيةينقسم على
Fixed-sizeN token/characters مع تداخل
Recursiveالفقرات → الجمل → الكلمات حسب الحاجة
Markdown / header-awareهيكل المستند (#، ##، أقسام)
Semanticتضمين حدود التشابه
Token-aware refinementدمج undersized، انقسم oversized
chunks = chunky.chunk(
    md,
    strategy="header_aware",
    max_tokens=512,
    overlap=64,
    repeat_headers=True,   # carry section headers across table splits
)
for c in chunks:
    print(len(c.tokens), c.metadata["heading"])

فحص ومقارنة

المميز: انظر وقارن ما تنتجه كل استراتيجية قبل الالتزام.

# Inspect chunk boundaries and sizes
chunky.inspect(chunks)            # sizes, overlaps, boundaries

# Compare strategies on the same document
report = chunky.compare(
    md,
    strategies=["fixed", "recursive", "header_aware", "semantic"],
    max_tokens=512,
)
print(report)   # per-strategy stats: count, size distribution, fragmentation
الدالةالعروض
inspect(chunks)توزيع الحجم والتداخل والحدود
compare(text, strategies=[...])مقياس الاستراتيجية جنباً إلى جنب

إثراء البيانات الوصفية

البيانات الوصفيةالاستخدام في الاسترجاع
Heading pathتوسيع السياق / التصفية
Source + pageالاستشهادات
Position/indexالترتيب والبحث عن الجار
Token countإدارة الميزانية في وقت الفحص
enriched = chunky.enrich(chunks, source="report.pdf")
# each chunk.metadata now carries heading path, page, source, index

سير العمل المشتركة

# End-to-end: PDF → clean Markdown → header-aware chunks → enriched
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")
# embed chunk.text, store chunk.metadata alongside in your vector DB
# Choose a strategy with evidence, not guesswork
print(chunky.compare(md, strategies=["recursive", "header_aware", "semantic"]))

Chunky مقابل الطرق الأخرى

الجانبChunkyFramework default splittersDocling
Strategy comparisonFirst-classManualLimited
Conversion + cleanBuilt-inSeparateBuilt-in
Best forTuning the chunking stageQuick startFull parse + chunk

Pairs well with Docling for parsing and your vector DB for storage — Chunky’s job is getting the split right.

الموارد