我们做了好几个月的CocoIndex开源了 - 这是世界上第一个同时支持自定义转换逻辑和增量更新的专门用于数据索引的引擎。希望开源社区的小伙伴们能看到我们,要是喜欢我们的话请帮我们点一颗github的星星⭐支持我们, 非常感谢!
CocoIndex是一个ETL框架,用于为人工智能应用程序(如语义搜索、检索增强生成(RAG))准备数据。它提供了一种数据驱动的编程模型,简化了数据索引管道的创建和维护,确保数据的新鲜度和一致性。
🔥 主要特点
- 数据流编程: 像搭积木一样通过组合转换来构建索引管道,内置状态管理和可观察性。
- 支持自定义逻辑: 插入您选择的分块、嵌入和向量存储。通过自定义转换(如去重和协调)进行扩展。
- 增量更新: 智能状态管理通过在文件级别跟踪变化来最小化重新计算,未来将支持块级粒度。
- Python SDK: 以RUST核心🦀构建以提高性能,通过直观的Python绑定🐍暴露以便于使用。
我们正在快速发展,很多功能和改进即将到来。
🚀 入门指南
-
安装: 安装CocoIndex Python库:
pip install cocoindex -
设置带有pgvector扩展的Postgres: 确保已安装Docker Compose,然后启动Postgres数据库:
docker compose -f <(curl -L https://raw.githubusercontent.com/cocoindex-io/cocoindex/refs/heads/main/dev/postgres.yaml) up -d -
定义您的索引流程: 创建一个流程来索引您的数据。50行python就能搞定!
@cocoindex.flow_def(name="TextEmbedding") def text_embedding(flow_builder: cocoindex.FlowBuilder, data_scope: cocoindex.DataScope): data_scope["documents"] = flow_builder.add_source(cocoindex.sources.LocalFile(path="markdown_files")) doc_embeddings = data_scope.add_collector() with data_scope["documents"].row() as doc: doc["chunks"] = doc["content"].transform( cocoindex.functions.SplitRecursively(language="markdown", chunk_size=300, chunk_overlap=100)) with doc["chunks"].row() as chunk: chunk["embedding"] = chunk["text"].transform( cocoindex.functions.SentenceTransformerEmbed(model="sentence-transformers/all-MiniLM-L6-v2")) doc_embeddings.collect(filename=doc["filename"], location=chunk["location"], text=chunk["text"], embedding=chunk["embedding"]) doc_embeddings.export( "doc_embeddings", cocoindex.storages.Postgres(), primary_key_fields=["filename", "location"], vector_index=[("embedding", cocoindex.VectorSimilarityMetric.COSINE_SIMILARITY)])
有关详细的指南,请参阅我们的快速入门指南。
🤗 社区
我们非常期待各种形式的社区贡献 - 无论是代码改进、文档更新、问题报告、GitHub上的功能请求,还是在Discord中的讨论。
- GitHub: 请给我们的仓库点个星🤗。
- 文档: 查看我们的文档获取详细指南和API参考。
- Discord: 加入我们的Discord服务器进行讨论、寻求支持和分享您的经验。
- 社交媒体: 在Twitter和LinkedIn上关注我们获取更新。
我们希望营造一个包容、友好和支持的环境。为CocoIndex做贡献应该让每个人都感到协作、友好和愉快。通过强大的数据基础设施,我们可以共同构建更好的AI应用程序。
期待看到您用CocoIndex构建的项目!