cocoindex-io/cocoindex
GitHub: cocoindex-io/cocoindex
面向 AI 的数据转换框架,用于高效构建增量更新的向量索引和知识图谱。
Stars: 6422 | Forks: 465
面向 AI 的数据转换
[](https://github.com/cocoindex-io/cocoindex)
[](https://cocoindex.io/docs/getting_started/quickstart)
[](https://opensource.org/licenses/Apache-2.0)
[](https://pypi.org/project/cocoindex/)
[](https://pepy.tech/projects/cocoindex)
[](https://github.com/cocoindex-io/cocoindex/actions/workflows/CI.yml)
[](https://github.com/cocoindex-io/cocoindex/actions/workflows/release.yml)
[](https://github.com/cocoindex-io/cocoindex/actions/workflows/links.yml)
[](https://github.com/j178/prek)
[](https://discord.com/invite/zpA9S2DR7s)
面向 AI 的超高性能数据转换框架,核心引擎采用 Rust 编写。开箱即支持增量处理和数据血缘。卓越的开发效率。首日即可用于生产环境。
[Deutsch](https://readme-i18n.com/cocoindex-io/cocoindex?lang=de) |
[English](https://readme-i18n.com/cocoindex-io/cocoindex?lang=en) |
[Español](https://readme-i18n.com/cocoindex-io/cocoindex?lang=es) |
[français](https://readme-i18n.com/cocoindex-io/cocoindex?lang=fr) |
[日本語](https://readme-i18n.com/cocoindex-io/cocoindex?lang=ja) |
[한국어](https://readme-i18n.com/cocoindex-io/cocoindex?lang=ko) |
[Português](https://readme-i18n.com/cocoindex-io/cocoindex?lang=pt) |
[Русский](https://readme-i18n.com/cocoindex-io/cocoindex?lang=ru) |
[中文](https://readme-i18n.com/cocoindex-io/cocoindex?lang=zh)
CocoIndex 让 AI 数据转换变得轻松自如,并保持源数据与目标数据同步。无论您是构建向量索引、为上下文工程创建知识图谱,还是执行任何自定义数据转换——功能远超 SQL。
## 卓越的效率
只需用约 100 行 Python 代码在数据流中声明转换逻辑
```
# 导入
data['content'] = flow_builder.add_source(...)
# 转换
data['out'] = data['content']
.transform(...)
.transform(...)
# 收集数据
collector.collect(...)
# 导出到 db, vector db, graph db ...
collector.export(...)
```
CocoIndex 遵循 [Dataflow](https://en.wikipedia.org/wiki/Dataflow_programming) 编程模型的理念。每次转换仅根据输入字段创建新字段,没有隐藏状态和值变更。每次转换前后的所有数据都是可观测的,并自带数据血缘。
**特别是**,开发人员无需通过创建、更新和删除来显式地变更数据。他们只需为一组源数据定义转换/公式。
## 即插即用的构建模块
针对不同的源、目标和转换提供原生内置支持。标准化接口,只需一行代码即可在不同组件间切换——就像搭积木一样简单。
## 数据时效性
CocoIndex 轻松保持源数据和目标数据同步。
它开箱即支持增量索引:
- 源或逻辑变更时最小化重计算。
- (重新)处理必要的部分;尽可能重用缓存
## 快速开始
如果您是初次接触 CocoIndex,我们建议查看
- 📖 [文档](https://cocoindex.io/docs)
- ⚡ [快速入门指南](https://cocoindex.io/docs/getting_started/quickstart)
- 🎬 [快速入门视频教程](https://youtu.be/gv5R8nOXsWU?si=9ioeKYkMEnYevTXT)
### 设置
1. 安装 CocoIndex Python 库
```
pip install -U cocoindex
```
2. 如果没有 [Postgres](https://cocoindex.io/docs/getting_started/installation#-install-postgres),请先安装。CocoIndex 使用它进行增量处理。
3. (可选)安装 Claude Code 技能以增强开发体验。在 [Claude Code](https://claude.com/claude-code) 中运行以下命令:
```
/plugin marketplace add cocoindex-io/cocoindex-claude
/plugin install cocoindex-skills@cocoindex
```
## 定义数据流
按照 [快速入门指南](https://cocoindex.io/docs/getting_started/quickstart) 定义您的第一个索引流。示例流如下所示:
```
@cocoindex.flow_def(name="TextEmbedding")
def text_embedding_flow(flow_builder: cocoindex.FlowBuilder, data_scope: cocoindex.DataScope):
# Add a data source to read files from a directory
data_scope["documents"] = flow_builder.add_source(cocoindex.sources.LocalFile(path="markdown_files"))
# Add a collector for data to be exported to the vector index
doc_embeddings = data_scope.add_collector()
# Transform data of each document
with data_scope["documents"].row() as doc:
# Split the document into chunks, put into `chunks` field
doc["chunks"] = doc["content"].transform(
cocoindex.functions.SplitRecursively(),
language="markdown", chunk_size=2000, chunk_overlap=500)
# Transform data of each chunk
with doc["chunks"].row() as chunk:
# Embed the chunk, put into `embedding` field
chunk["embedding"] = chunk["text"].transform(
cocoindex.functions.SentenceTransformerEmbed(
model="sentence-transformers/all-MiniLM-L6-v2"))
# Collect the chunk into the collector.
doc_embeddings.collect(filename=doc["filename"], location=chunk["location"],
text=chunk["text"], embedding=chunk["embedding"])
# Export collected data to a vector index.
doc_embeddings.export(
"doc_embeddings",
cocoindex.targets.Postgres(),
primary_key_fields=["filename", "location"],
vector_indexes=[
cocoindex.VectorIndexDef(
field_name="embedding",
metric=cocoindex.VectorSimilarityMetric.COSINE_SIMILARITY)])
```
它定义了一个这样的索引流:
## 🚀 示例和演示
| 示例 | 描述 |
|---------|-------------|
| [文本嵌入](examples/text_embedding) | 对文本文档进行嵌入索引,用于语义搜索 |
| [代码嵌入](examples/code_embedding) | 对代码嵌入进行索引,用于语义搜索 |
| [PDF 嵌入](examples/pdf_embedding) | 解析 PDF 并对文本嵌入进行索引,用于语义搜索 |
| [PDF 元素嵌入](examples/pdf_elements_embedding) | 从 PDF 中提取文本和图像;使用 SentenceTransformers 嵌入文本,使用 CLIP 嵌入图像;存储在 Qdrant 中用于多模态搜索 |
| [手册 LLM 提取](examples/manuals_llm_extraction) | 使用 LLM 从手册中提取结构化信息 |
| [Amazon S3 嵌入](examples/amazon_s3_embedding) | 对来自 Amazon S3 的文本文档进行索引 |
| [Azure Blob Storage 嵌入](examples/azure_blob_embedding) | 对来自 Azure Blob Storage 的文本文档进行索引 |
| [Google Drive 文本嵌入](examples/gdrive_text_embedding) | 对来自 Google Drive 的文本文档进行索引 |
| [会议记录转知识图谱](examples/meeting_notes_graph) | 从 Google Drive 提取结构化会议信息并构建知识图谱 |
| [文档转知识图谱](examples/docs_to_knowledge_graph) | 从 Markdown 文档中提取关系并构建知识图谱 |
| [嵌入到 Qdrant](examples/text_embedding_qdrant) | 将文档索引到 Qdrant 集合中用于语义搜索 |
| [嵌入到 LanceDB](examples/text_embedding_lancedb) | 将文档索引到 LanceDB 集合中用于语义搜索 |
| [Docker FastAPI 服务器](examples/fastapi_server_docker) | 在 Docker 化的 FastAPI 设置中运行语义搜索服务器 |
| [产品推荐](examples/product_recommendation) | 使用 LLM 和图数据库构建实时产品推荐 |
| [使用 Vision API 进行图像搜索](examples/image_search) | 使用视觉模型为图像生成详细描述,对其进行嵌入,通过 FastAPI 实现实时更新的语义搜索,并在 React 前端上展示 |
| [人脸识别](examples/face_recognition) | 识别图像中的人脸并构建嵌入索引 |
| [论文元数据](examples/paper_metadata) | 索引 PDF 文件中的论文,并为每篇论文构建元数据表 |
| [多格式索引](examples/multi_format_indexing) | 使用 ColPali 从 PDF 和图像构建视觉文档索引,用于语义搜索 |
| [自定义源 HackerNews](examples/custom_source_hn) | 使用 *CocoIndex Custom Source* 索引 HackerNews 帖子和评论 |
| [自定义输出文件](examples/custom_output_files) | 将 markdown 文件转换为 HTML 文件并保存到本地目录,使用 *CocoIndex Custom Targets* |
| [患者入院表格提取](examples/patient_intake_extraction) | 使用 LLM 从不同格式的患者入院表格中提取结构化数据 |
| [HackerNews 热门话题](examples/hn_trending_topics) | 使用 *CocoIndex Custom Source* 和 LLM 从 HackerNews 帖子和评论中提取热门话题 |
| [使用 BAML 提取患者入院表格](examples/patient_intake_extraction_baml) | 使用 BAML 从患者入院表格中提取结构化数据 |
| [使用 DSPy 提取患者入院表格](examples/patient_intake_extraction_dspy) | 使用 DSPy 从患者入院表格中提取结构化数据 |
更多功能即将推出,敬请期待 👀!
## 📖 文档
有关详细的文档,请访问 [CocoIndex 文档](https://cocoindex.io/docs),其中包括 [快速入门指南](https://cocoindex.io/docs/getting_started/quickstart)。
## 支持我们
我们正在不断改进,更多功能和示例即将推出。如果您喜欢这个项目,请在 GitHub 仓库 [](https://github.com/cocoindex-io/cocoindex) 给我们一颗星 ⭐,以保持关注并帮助我们成长。
## 许可证
CocoIndex 基于 Apache 2.0 许可证授权。
标签:AI基础设施, AI工作流, Apache 2.0, DNS解析, ETL, JavaCC, LLMOps, Python, RAG, 可视化界面, 向量数据库, 增量处理, 开源项目, 数据处理框架, 数据清洗, 数据管道, 数据转换, 无后门, 特征工程, 软件工程, 逆向工具, 通知系统, 非结构化数据, 高性能计算