chunklet-py
speedyk-005/chunklet-py加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
你有没有过这样的经历——往 RAG 系统里塞了几百页文档,结果大模型回答问题时总是"断章取义",给出的答案支离破碎?问题很可能不在模型,而在切分方式。就像用菜刀切生鱼片和切牛排需要不同刀法,文本分块也有讲究。
Chunklet-py 正是来解决这个问题的:它不做简单的"字数切分",而是通过理解句子边界、代码结构、文档语义来进行上下文感知的智能分块,确保每一块内容逻辑完整、语义连贯,让大模型拿到的不再是支离破碎的碎片。
传统的 RAG 分块方案,通常是按固定字符数(如 500 字)或固定 token 数(如 256 tokens)暴力切割。这种做法简单粗暴,但问题显而易见:
Chunklet-py 的作者 speedyk-005 在实际构建 RAG 应用时踩过这些坑,于是决定自己写一个"聪明的分块工具",最终形成了这个覆盖句子、代码、文档三大场景的完整解决方案。目前在 GitHub 已有 84 颗星,PyPI 周下载量超过 3 万次。
Chunklet-py 提供三类分块器,分别处理自然语言、程序代码和结构化文档。
这是整个库的基础。SentenceSplitter 支持 50+ 语言的句子切分,底层依赖 Rust 编写的 sentencex 库实现高性能,同时对中文、日文、印地文等非拉丁语系语言有专门的 NLP 处理逻辑(如 indic-nlp-library、py3langid)。
它的切分策略不是简单匹配句号,而是综合考虑:
from chunklet import SentenceSplitter
splitter = SentenceSplitter(language="en")
sentences = splitter.split("The quick brown fox. It jumps over everything! Really?")
# ['The quick brown fox.', 'It jumps over everything!', 'Really?']
代码分块是 Chunklet-py 区别于通用文本分块工具的杀手级功能。传统分块方案把 Python 代码当作纯文本处理,结果大模型看到的可能是半个函数定义、孤零零的一行 import,毫无意义。
CodeChunker 则理解代码结构:
from chunklet import CodeChunker
chunker = CodeChunker(max_tokens=256)
chunks = chunker.chunk_file("path/to/script.py")
# 每块都是语义完整的代码单元,可独立理解
底层通过 _code_structure_extractor.py 解析 AST(抽象语法树),提取函数名、类名、缩进层级等结构信息,然后按结构边界而非字符数切分。
支持 PDF、DOCX、Markdown、RTF、EPUB、ODT、HTML、邮件 等多种格式。DocumentChunker 不仅仅做格式转换,更重要的是保留结构信息:
from chunklet import DocumentChunker
chunker = DocumentChunker(max_tokens=512, language="zh")
# PDF 文件
pdf_chunks = list(chunker.chunk_file("report.pdf"))
# Word 文件
docx_chunks = list(chunker.chunk_file("proposal.docx"))
Chunklet-py 还提供了一个交互式 Web 可视化工具,基于 FastAPI + Uvicorn 构建。打开浏览器就能实时看到不同参数下的分块效果:
max_tokens 滑块,实时预览 chunk 数量变化。这个功能对于调参和调试 RAG 管道特别有用——你不再靠猜测,而是亲眼看到每个 chunk 包含什么内容。

Chunklet-py 对 Python 版本有明确要求:Python ≥ 3.11(因为大量使用了 3.11+ 的语法特性)。
安装方式:
# 基础安装
pip install chunklet-py
# 带 LangChain 集成(生产 RAG 管道推荐)
pip install "chunklet-py[code]"
# 带可视化工具
pip install "chunklet-py[viz]"
# 全量安装(包含 PDF/DOCX 等文档解析)
pip install "chunklet-py[all]"
核心使用流程:
from chunklet import DocumentChunker, CodeChunker
# 自然语言文档
doc_chunker = DocumentChunker(max_tokens=512)
for chunk in doc_chunker.chunk_text("..."):
print(chunk)
# 代码文件
code_chunker = CodeChunker(max_tokens=256)
for chunk in code_chunker.chunk_file("app.py"):
print(chunk)
文档站点的完整度很高(MkDocs + Material 主题),包含从入门到进阶的完整指南、API 文档和迁移指南(v1 → v2 有破坏性变更)。
Chunklet-py 提供了与 LangChain 的集成示例 examples/langchain_integration.py,可以无缝接入 LangChain 的 Document Loader 和 Text Splitter 接口。这对于已经用 LangChain 构建过 RAG 应用的团队来说,改造成本极低——只需把原来的 RecursiveCharacterTextSplitter 替换为 DocumentChunker 即可。
客观来说,Chunklet-py 也有一些值得注意的局限:
Chunklet-py 的定位非常清晰:不做通用 NLP 库,而是专注在 RAG 管道中最容易被忽视、但影响最大的环节——文本分块。
它用 Rust 加速底层分句(Linux ARM 平台),用多语言 NLP 库处理边界检测,用 AST 解析理解代码结构,用 FastAPI 提供可视化调参——每一层都有明确的技术选型逻辑。目前 84 颗星虽然不算多,但在细分赛道上已经展现出明确的差异化价值。
对于正在构建 RAG 应用、AI 知识库、代码检索系统的开发者,Chunklet-py 是一个值得尝试的候选工具——尤其是当你的数据源包含大量代码文件或多语言文档时。