8k stars!CocoIndex:让 AI Agent 永远喝到“新鲜水“的增量引擎!
AI Agent 正在从"能用"走向"好用",而数据新鲜度是这段旅程中最容易被忽视却至关重要的一环。一个永远看着过期数据的 Agent,无论模型能力多强,都会在关键时刻掉链子。✅增量计算,省时省钱✅声明式 API,5 分钟上手✅Rust 内核,生产级性能✅内置可观测性,数据血缘清晰可查✅开源免费,Apache 2.0 协议如果你正在构建 RAG 应用、AI Agent、或者任何需要持续同步数据到向
CocoIndex:让 AI Agent 永远喝到"新鲜水"的增量引擎
一句话定位:CocoIndex 是一个开源的、为 AI 而生的增量数据处理框架,让你的 AI Agent 随时获得最新鲜的上下文,而不是陈旧的批量快照。
一、先说痛点:AI Agent 为什么总在"喝隔夜水"?
做过 RAG(检索增强生成)或者 AI Agent 的同学,一定踩过这个坑:
你花了大量时间把文档、代码库、会议记录做成向量索引,喂给大模型。结果——
- 代码库更新了,但 Agent 检索到的还是三周前的旧版本
- 文档修改了一段话,但整个索引需要全量重跑,耗时几十分钟甚至几小时
- 数据管道挂了,没人知道哪条数据出了问题,无从排查
本质问题只有一个:数据是批量处理的,而世界是实时变化的。
传统做法是定时全量重建索引,就像每天早上重新烧一壶水喝——要么永远喝不到最新鲜的,要么每次都浪费大量算力。
二、CocoIndex 是什么?
CocoIndex 是一个专为 AI 工作负载设计的增量数据转换框架,核心引擎用 Rust 编写,对外提供 Python API,上手极简。
它的核心思想用一句话概括:
你来声明目标状态,CocoIndex 负责永远把它维持在最新。
类比前端开发来理解:这就是数据工程的 React。
- React:你声明 UI 应该长什么样,框架计算最小 DOM 差量去更新
- CocoIndex:你声明索引应该包含什么,框架计算最小数据差量去更新
它能处理的数据源涵盖:
- 📁 本地文件系统 / 代码库
- 📧 邮件 / Slack 消息
- 📄 PDF / 文档
- 🎥 视频 / 语音
- 🌐 Web API / 数据库
输出目标支持:向量数据库、关系型数据库、数据仓库、图数据库等。
三、核心能力拆解
🔁 增量处理(只算变化量)
这是 CocoIndex 最核心的能力。当数据源变化时:
- 一个文件改了 → 只重新处理那一个文件
- 代码逻辑更新了 → 只对受影响的数据行重新计算
- 未变化的部分 → 直接从缓存复用,不重算
以 Embedding 为例:如果一篇文档的某段话没有改动,那这段话的向量直接从缓存读取,无需重新调用 Embedding 模型。算力省下来,钱也省下来了。
⚡ 并行处理,天然支持大规模
所有数据转换任务默认并行执行,不需要手动管理线程或队列,大规模代码库同样流畅。
📦 声明式 Python API,5 分钟上手
不用写复杂的 DAG 调度逻辑,不用维护消息队列,你只需要写转换函数,CocoIndex 自动推导出执行图。
🔍 CocoInsight 可观测性面板
内置的可视化工具,让你看到数据管道每一步在做什么:
- 每条数据的处理路径(数据血缘)
- 哪些命中了缓存,哪些触发了重算
- 实时吞吐量、新鲜度指标
四、怎么用?从零到一的快速示例
1. 安装
pip install cocoindex
同时需要一个 PostgreSQL(用于存储向量和元数据)。
2. 写一个本地文档索引 Pipeline
以下代码实现:把 ./docs 目录下的所有文件,切片、Embedding,存入 PostgreSQL 向量数据库。
import cocoindex as coco
from cocoindex.connectors import localfs, postgres
from cocoindex.ops.text import RecursiveSplitter
# memo=True 表示该函数的结果会被缓存
# 当输入内容和代码逻辑都没变时,直接复用缓存结果
@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) # embed 函数由你自定义
)
@coco.fn
async def main(src):
# 声明目标表,并要求建立向量索引
table = await postgres.mount_table_target(PG, table_name="docs")
table.declare_vector_index(column="embedding")
# 遍历源目录,对每个文件执行 index_file
await coco.mount_each(index_file, localfs.walk_dir(src).items(), table)
# 运行一次,完成首次全量建索引
# 再次运行,只处理变化的文件
coco.App(
coco.AppConfig(name="docs"),
main,
src="./docs"
).update_blocking()
关键点:
- 第一次运行 → 全量建索引
- 之后每次运行 → 只重新处理变化的文件,其余直接复用缓存
3. 实时代码库索引(结合 Tree-sitter)
CocoIndex 内置对 Tree-sitter 的 Rust 级集成,可以对代码进行 AST 级别的语义切块:
# 对代码库做语义切块并建索引
# Tree-sitter 解析 → 代码块 → Embedding → 存入 PGVector
索引建好后,可以直接为 Claude、Codex、Cursor 等 AI 编程助手提供语义代码搜索能力。
4. 可观测性:启动 CocoInsight
python main.py cocoindex server -c https://cocoindex.io
然后打开 https://cocoindex.io/cocoinsight,即可实时观察你的数据管道运行状态。
五、典型应用场景
| 场景 | 做法 |
|---|---|
| AI 编程 Agent | 实时索引代码库,让 Agent 知道最新代码结构 |
| 知识库问答 | 文档更新后自动增量同步到向量数据库 |
| 会议记录知识图谱 | 提取人物、话题、决策、行动项,构建动态图谱 |
| HackerNews 趋势监控 | 增量摄入数据,实时识别热点话题 |
| 代码审查 Agent | 基于最新代码上下文进行实时代码审查 |
六、技术架构亮点
底层用 Rust 写的引擎,Python 是上层 API:
- Rust 保证极致的性能和内存安全
- Python API 保证开发者友好
缓存机制:以 hash(输入内容) + hash(函数代码) 作为缓存键。只要输入和处理逻辑都没变,结果直接复用,不重算。
Schema 自动演进:更新了处理代码后,受影响的数据行自动重新计算,目标存储的 Schema 自动演进,无需手写迁移脚本,零停机时间。
七、与现有方案对比
| 对比维度 | 传统批量方案 | CocoIndex |
|---|---|---|
| 更新策略 | 定时全量重建 | 增量,只算变化量 |
| 数据新鲜度 | 小时/天级 | 近实时 |
| 计算成本 | 每次全量消耗 | 仅变化部分消耗 |
| 代码复杂度 | 需手写调度逻辑 | 声明式 Python,自动推导 |
| 可观测性 | 依赖外部工具 | 内置 CocoInsight |
八、总结
AI Agent 正在从"能用"走向"好用",而数据新鲜度是这段旅程中最容易被忽视却至关重要的一环。一个永远看着过期数据的 Agent,无论模型能力多强,都会在关键时刻掉链子。
CocoIndex 解决的正是这个问题:
- ✅ 增量计算,省时省钱
- ✅ 声明式 API,5 分钟上手
- ✅ Rust 内核,生产级性能
- ✅ 内置可观测性,数据血缘清晰可查
- ✅ 开源免费,Apache 2.0 协议
如果你正在构建 RAG 应用、AI Agent、或者任何需要持续同步数据到向量数据库的系统,CocoIndex 值得认真看一看。
项目地址:https://github.com/cocoindex-io/cocoindex
官方网站:https://cocoindex.io
如果觉得有用,欢迎分享给身边做 AI 开发的朋友 🥥
更多推荐




所有评论(0)