大家好!我们是 Shreyash 和 Bhavnick。我们正在开发 Chonkie(<a href="https://chonkie.ai">https://chonkie.ai</a>),一个用于数据分块和嵌入的开源库。
Python 版本:<a href="https://github.com/chonkie-inc/chonkie">https://github.com/chonkie-inc/chonkie</a>
TypeScript 版本:<a href="https://github.com/chonkie-inc/chonkie-ts">https://github.com/chonkie-inc/chonkie-ts</a>
这里有一个展示我们代码分块器的视频:<a href="https://youtu.be/Xclkh6bU1P0" rel="nofollow">https://youtu.be/Xclkh6bU1P0</a>。
Bhavnick 和我已经用大语言模型(LLMs)构建个人项目几年了。在这段时间里,我们发现自己经常需要编写自己的分块逻辑来支持 RAG 应用程序。我们常常犹豫使用现有的库,因为它们要么功能简单,要么显得过于臃肿(有些库超过 80MB)。
我们构建 Chonkie 的目标是轻量、快速、可扩展且易于使用。这个领域发展迅速,我们希望 Chonkie 能够快速支持最新的策略。目前我们支持:令牌分块、句子分块、递归分块、语义分块,以及:
- 语义双重分块:首先对文本进行语义分块,然后合并紧密相关的块。
- 代码分块:通过创建抽象语法树(AST)并找到理想的分割点来分块代码文件。
- 延迟分块:基于论文(<a href="https://arxiv.org/abs/2409.04701" rel="nofollow">https://arxiv.org/abs/2409.04701</a>),从嵌入较长文档中导出块嵌入。
- Slumber 分块:基于“Lumber Chunking”论文(<a href="https://arxiv.org/abs/2406.17526" rel="nofollow">https://arxiv.org/abs/2406.17526</a>)。它使用递归分块,然后由 LLM 验证分割点,旨在以减少令牌使用和 LLM 成本的方式生成高质量的块。
您可以在我们的基准测试中查看 Chonkie 与 LangChain 和 LlamaIndex 的比较:<a href="https://github.com/chonkie-inc/chonkie/blob/main/BENCHMARKS.md">https://github.com/chonkie-inc/chonkie/blob/main/BENCHMARKS....</a>
关于 Chonkie 包的一些技术细节:
- 默认安装约 15MB,而某些替代品则在 80-170MB 之间。
- 在我们的测试中,令牌分块速度比 LangChain 和 LlamaIndex 快多达 33 倍。
- 与主要的分词器(transformers、tokenizers、tiktoken)兼容。
- 基本功能零外部依赖。
- 实现了积极的缓存和预计算。
- 使用运行均值池化进行高效的语义分块。
- 模块化依赖系统(仅安装所需的部分)。
除了分块,Chonkie 还提供了一种简单的方式来创建嵌入。对于支持的提供者(SentenceTransformer、Model2Vec、OpenAI),您只需将模型名称作为字符串指定。您还可以为其他提供者创建自定义嵌入处理程序。
目前 RAG 仍然是最常见的用例。然而,Chonkie 生成的块经过优化,适用于创建高质量的嵌入和向量检索,因此并不完全依赖于 RAG 的“生成”部分。事实上,我们看到越来越多的人使用 Chonkie 来实现语义搜索和/或为代理设置上下文。
我们目前专注于构建集成,以简化检索过程。我们创建了“握手”——与 pgVector、Chroma、TurboPuffer 和 Qdrant 等向量数据库交互的轻量函数,使您能够轻松与存储进行交互。如果您希望看到某个集成(无论是向量数据库还是其他),请告诉我们。
我们还提供托管和本地版本,包含 OCR、额外的元数据、所有嵌入提供者,以及为希望拥有完全托管管道的团队管理的向量数据库。如果您感兴趣,请通过 shreyash@chonkie.ai 联系我们或预约演示:<a href="https://cal.com/shreyashn/chonkie-demo" rel="nofollow">https://cal.com/shreyashn/chonkie-demo</a>。
我们期待您的反馈和评论!谢谢!
返回首页
一周热榜
大多数反馈工具的设计就像人们真的想要报告bug一样。其实并不是。除非你把这个过程简化到极致,或者更好的是,做得有点趣味性。
在推出了几个SaaS产品后,我注意到一个模式:有bug?有的。bug报告?没有。
这并不是因为用户不在乎,而是因为报告bug通常是一种糟糕的体验。
大多数工具希望用户:
* 填写一份冗长的表单
* 输入他们的电子邮件
* 描述一个他们几乎不理解的bug
* 可能还要登录或创建一个账户
* 然后或许才能提交
说实话:没有人会这样做。尤其是那些只是想使用你产品的人。
所以我开发了Bugdrop.app——这是一个可拖动的小虫子图标,用户可以直接拖到问题上,写下简短的备注,就完成了。无需登录,无需表单。只是提供了上下文丰富的反馈,供你的团队实际使用——包括截图、浏览器信息,甚至在遇到错误时的控制台日志。
奇怪的是?人们真的在使用它。即使是非技术用户也会点击它,仅仅因为“这个小虫子看起来很有趣”。
我并不想再开发一个“反馈套件”。我只想要一些轻量级、快速,并且简单到让人们愿意实际报告问题的工具。如果你曾经遇到过用户说“有东西坏了”,然后就再也没有消息,你可能会理解我的想法。
我最自豪的是什么?人们真的在使用它。而他们的用户?他们也在实际报告问题。即使是非技术用户。
我很想听听你是否遇到过类似的问题,以及这是否感觉像是能在你自己的项目中提供帮助的东西。我并不是想卖给你什么——只是分享我为满足自己需求而开发的东西。
鉴于这主要是一个终端视觉效果项目,用于提升你的街头信誉,但它确实有一些严肃的方面。
首先,它解决了一个由来已久的低对比度文本问题,比如当你使用 `ls` 命令查看一个损坏的符号链接时,红色背景色与当前主题的前景色过于接近。Tattoy 通过使用网络的 WCAG 2.1 对比度算法来解决这一问题,以确保文本的可读性。
其次,Tattoy 的一个明确设计目标是能够填补新的终端协议,类似于 TTY 的 `xwayland`。比如,如果我们想要实验性地完全弃用 ANSI 代码,那么任何使用新协议的应用程序都可以在 Tattoy 中运行,而 Tattoy 本身可以像往常一样在任何 ANSI 标准的终端模拟器中运行。你可以在这里阅读更多关于这个想法的信息:<a href="https://tattoy.sh/news/an-end-to-terminal-ansi-codes" rel="nofollow">https://tattoy.sh/news/an-end-to-terminal-ansi-codes</a>。
但归根结底,这更像是一个艺术项目,旨在享受纯粹的美学乐趣。
RomM 是一款自托管应用程序,允许您管理复古游戏文件(ROM)并在浏览器中进行游戏。<p>可以将其视为您 ROM 库的 Plex 或 Jellyfin:它会自动从在线元数据源获取元数据、艺术作品和游戏信息,将您的文件夹转变为可浏览的收藏。<p>您可以直接在浏览器中玩 N64、Game Boy Advance、Nintendo DS 和 PlayStation 1 等主机的游戏,使用集成的网页模拟器(<a href="https://emulatorjs.org/" rel="nofollow">https://emulatorjs.org/</a>)。社区成员已经为 Playnite(Windows)、muOS(Anbernic 手持设备)和 Decky Loader(Steam Deck)发布了集成,更多集成正在开发中。<p>团队已经在 RomM 上工作了两年多,我们对目前所取得的成就感到非常自豪。这个项目背后没有公司,只有一群朋友共同构建我们长期以来想要的东西。当然,代码是开源的,并且采用 AGPLv3 许可证。<p>查看在超便宜的 VPS 上运行的(有点慢的)演示:<a href="https://demo.romm.app/" rel="nofollow">https://demo.romm.app/</a>