Chonkie 是一个专为文档处理设计的 Python 库,它以轻量、高效著称,并引入了 CHOMP (CHOnkie’s Multi-step Pipeline) 这一标准化架构,帮助你通过 Pipeline API 轻松构建强大的文本处理工作流。对于正在构建 RAG 应用或需要进行复杂文档分块的开发者来说,它提供了一个结构清晰且自动化的解决方案。
Pipeline API 与 CHOMP 架构
CHOMP 架构定义了文档处理的标准步骤,其流程如下:
Fetcher → Chef → Chunker → Refinery → Porter/Handshake
这个设计巧妙之处在于,当你使用 Pipeline API 编写代码时,可以按任意顺序添加组件,库内部会自动按照 CHOMP 的逻辑顺序来执行。这让代码组织变得非常灵活。
下面我们来拆解每个核心组件:
- Fetcher(获取器):负责检索文档源。目前主要提供
FileFetcher,用于从本地文件系统读取文件。
- Chef(厨师):负责解析和提取不同格式文件的内容。
TableChef:处理 .csv、.xls、.xlsx 等表格文件。
TextChef:处理 .txt 纯文本文件。
MarkdownChef:处理 .md 文件,能智能地分离出其中的表格、图片、代码块和普通文本。
- Chunker(分块器):这是核心环节,提供多种算法将文本切分成有意义的片段。Chonkie 内置了丰富的分块器,你可以根据数据特性选择最合适的一款。

- Refinery(精炼厂,可选):用于对生成的分块(chunks)进行增强处理。
OverlapRefinery:通过添加上下文重叠来增强块之间的连续性,这对提升检索效果很有帮助。
EmbeddingsRefinery:为每个块计算并附加向量嵌入,这是进行语义搜索和存入向量数据库的前提。
- Porter/Handshake(搬运工/握手器,可选):负责持久化存储处理好的数据。支持主流的向量数据库和存储方案,如 Chroma、Milvus、Elasticsearch、MongoDB、Pgvector 等。
快速开始:安装与使用
首先,通过 pip 安装 Chonkie 及其核心组件和全部额外依赖:
pip install "chonkie[core, all]"
安装完成后,我们就可以通过一个完整的示例来演示其强大功能。假设你有一批 Markdown 文档,需要将其分块、嵌入并存入向量库以供检索:
from chonkie import Pipeline, SentenceTransformerEmbeddings, logger, ChromaHandshake
from sentence_transformers import SentenceTransformer
# 设置日志级别,便于调试
logger.configure("debug")
# 初始化嵌入模型
model = SentenceTransformer("BAAI/bge-small-zh-v1.5", cache_folder="E:\\PyProject\\ai_models")
embedding_model = SentenceTransformerEmbeddings(model)
# 构建并执行处理管道
docs = (
Pipeline()
# 使用FileFetcher读取`./docs`目录下所有的.md文件
.fetch_from("file", dir="./docs", ext=[".md"])
# 使用MarkdownChef解析文件内容
.process_with("markdown")
# 使用 SemanticChunker 对文本进行语义分块
.chunk_with("semantic", threshold=0.8, chunk_size=1024, embedding_model=embedding_model)
# 使用OverlapRefinery增强上下文连续性
.refine_with("overlap", context_size=100, method="prefix")
# 使用EmbeddingsRefinery为每个块生成向量嵌入
.refine_with("embeddings", embedding_model=embedding_model)
# 将结果保存到Chroma向量数据库
.store_in("chroma", collection_name="documents", path="./chroma_db")
.run()
)
# 数据检索示例
handshake = ChromaHandshake(collection_name="documents", path="./chroma_db", embedding_model=embedding_model)
results = handshake.search(query="ZFS", limit=2)
for result in results:
print(result["score"], result["text"])
这段代码清晰地展示了 Chonkie 的 Pipeline 魅力:从读取文件、解析内容、语义分块、上下文增强、向量化到最终入库,整个过程一气呵成。如果你在构建 RAG 应用,建议优先尝试 SemanticChunker(语义分块器),它通常能带来更优的检索效果。
Chonkie 通过清晰的架构和简洁的 API,将复杂的文档预处理流程标准化、自动化,极大地提升了开发效率。这个 开源项目 非常适合需要在 Python 项目中集成文档处理能力的开发者。如果你想了解更多类似的工具和实战经验,欢迎到 云栈社区 与其他开发者交流探讨。
|