cocoindex
AI Agent 的增量数据索引引擎,只处理变化数据(Δ),让代理始终拥有最新鲜上下文
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
AI Agent 的增量数据索引引擎,只处理变化数据(Δ),让代理始终拥有最新鲜上下文
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象一下:你让 AI 代理去读一个项目代码库,等它分析完后,开发者顺手改了几个文件。你的 AI 代理对此一无所知——它还在用旧数据做决策。这是所有长时程 AI 代理(Long-Horizon Agent)面临的根本问题:数据会过期,而代理无法感知变化。
CocoIndex 正是为解决这一问题而生的开源项目。它是一个 Python 原生的增量索引框架,核心理念是:只处理变化的部分(Δ),让 AI 代理始终拥有最新鲜的上下文数据。 GitHub 已有超过 10,000 颗星,被定位为 AI Agent 时代的基础设施层。
传统的数据管道(如 ETL、RAG 批处理)采用的是"全量重新计算"模式:每次运行都要遍历整个数据集,不管数据有没有变化。这在 AI 场景下代价极高——embedding 模型调用、LLM API 调用、向量数据库写入,每一步都是钱和时间。
CocoIndex 的作者团队来自企业 AI 落地场景,他们发现:当代码库有 10 万个文件时,即使只改了一个文件,完整的 RAG 重建可能需要数小时和大量 API 费用。这种"批处理漂移"(Batch Pipeline Drift)严重制约了 AI 代理的实时性。
CocoIndex 的解决方案来自一个我们熟悉的类比:React 的状态管理哲学。在 React 中,你只声明"UI 是什么函数",框架自己决定"哪些部分需要重新渲染"。CocoIndex 将这一思想引入数据工程:你只声明"目标状态是什么",引擎自动只同步变化的部分。
CocoIndex 采用了混合语言架构,体现了对性能的极致追求:
cocoindex_core):处理底层状态管理、增量计算、数据库操作(使用 LMDB/Heed 作为嵌入式 KV 存储)。Rust 保证内存安全和高并发。cocoindex 包):提供声明式 Python 接口,用户通过 @coco.fn 装饰器和 mount()/use_mount() 等 API 构建数据管道。rust/py/ 使用 PyO3 实现 Python ↔ Rust 的零开销互操作。架构上,CocoIndex 的数据流遵循 Source → Transformation → Target 三段式设计。Source 可以是本地文件系统、PostgreSQL、Slack、Google Drive 等外部系统;Transformation 是用户用 Python 编写的处理函数(通过 @coco.fn 装饰);Target 是最终写入的目标存储(如向量数据库)。
CocoIndex 的核心使用模式非常简洁,只需几行代码即可建立增量索引管道:
import cocoindex as coco
from cocoindex.connectors import localfs, postgres
from cocoindex.ops.text import RecursiveSplitter
@coco.fn(memo=True) # 按输入哈希 + 代码哈希缓存,变化才重跑
async def index_file(file, table):
for chunk in RecursiveSplitter().split(await file.read_text()):
table.declare_row(text=chunk.text, embedding=embed(chunk.text))
@coco.fn
async def main(src):
table = await postgres.mount_table_target(PG, table_name="docs")
table.declare_vector_index(column="embedding")
await coco.mount_each(index_file, localfs.walk_dir(src).items(), table)
coco.App(coco.AppConfig(name="docs"), main, src="./docs").update_blocking()
这套代码实现了:首次运行全量索引,之后每次运行只处理变化的文件——未改动文件的 embedding 直接从缓存读取,无需重新 embedding,节省 80-90% 的 token 消耗和 API 费用。
CocoIndex 支持的数据源覆盖 8 大类别:代码库、邮件/日历、Web/API、文件系统/对象存储、数据库、消息队列、图片/视频、语音/字幕。支持的输出目标包括关系数据库、数据仓库、向量数据库、图数据库、消息队列和特征存储。
1. 亚秒级数据新鲜度:源端变化后,代理在 1 秒内就能看到最新数据,而不是"明天早上那个批次"。
2. 10 倍成本节省:增量处理意味着只有真正变化的部分才会重新 embedding。对于 10,000 个文件的代码库,改 1 个文件只需处理 1 个文件的增量,99.9% 的计算被跳过。
3. 端到端数据溯源(Lineage):CocoIndex 追踪每一条目标记录到源端字节级别的对应关系。调试时,你知道每一条向量来自哪一行代码、哪一个版本——这对监管合规和模型可审计性极为重要。
4. 生产级可靠性:Rust 核心内置重试机制、指数退避、死信队列(DLQ)和"不丢数据"保证。数据工程团队无需担心增量管道的稳定性。
CocoIndex 的上手门槛很低——只需 Python 3.11+ 和一条 pip install cocoindex。项目使用 uv 进行 Python 包管理,使用 maturin 构建 Rust 绑定。
代码质量方面,项目采用严格的类型注解(mypy 严格模式)、完整的 Rust 单元测试套件和 Python pytest 集成测试。文档质量极高——README 提供了 8 种语言的版本,配套文档站(基于 Astro 构建)覆盖快速入门、核心概念、20+ 示例和 API 参考。
需要注意的是,CocoIndex 目前没有 Docker 支持,不提供一键部署的容器镜像。对于想要快速体验的用户,需要自行通过 pip 安装 Python 环境。此外,项目使用 Rust 1.89 作为最低版本要求,部分旧系统可能需要升级 Rust 工具链。
CocoIndex 代表了 AI 数据管道领域的一个新兴范式——**从"批处理"到"响应式数据流"**的转变。随着 AI 代理(Agent)逐渐从演示走向生产,实时数据供给成为制约代理能力的关键瓶颈。
增量索引并非新概念(React 在前端领域早已成熟),但在 AI 数据工程领域的系统性落地,CocoIndex 是目前星标增长最快的开源项目之一。它的增长曲线反映了两个行业趋势:一是 AI 开发者对"代理记忆"和"实时上下文"的强烈需求,二是向量数据库和 LLM 应用向生产级别演进时,对成本可控性的刚性要求。
如果你的 AI 应用需要持续更新知识库、需要代理感知代码库变化、需要构建可审计的 RAG 管道,CocoIndex 是一个值得关注的技术选型。