CocoIndex :打造面向 AI 应用的数据索引平台

 

CocoIndex :打造面向 AI 应用的数据索引平台



用于为 AI 索引数据的 ETL 框架,例如 RAG;具有实时增量更新并支持 LEGO 等自定义逻辑。

简介

CocoIndex 是一个开源的数据索引引擎,旨在为 AI 应用(如语义搜索、检索增强生成(RAG)和基于嵌入的知识图谱)提供高质量的数据准备。它支持自定义转换逻辑和增量更新,确保数据索引的实时性和一致性。 citeturn0search0

主要特性

  1. 数据流编程模型:CocoIndex 提供了一个数据驱动的编程模型,用户可以通过声明数据流和转换逻辑来定义索引流程,类似于电子表格中的数据和公式,易于理解和维护。 citeturn0search2

  2. 自定义转换逻辑:支持用户插入自定义的分块、嵌入和向量存储等逻辑,满足特定的业务需求。例如,用户可以定义自己的数据分块策略或选择不同的嵌入模型。 citeturn0search0

  3. 增量更新:CocoIndex 具备智能的状态管理,能够在源数据或转换逻辑发生变化时,仅重新计算必要的部分,避免全量重建索引,提高效率。 citeturn0search0

  4. Python SDK:CocoIndex 的核心由 Rust 实现,提供了 Python 绑定,兼顾了性能和易用性。用户可以使用熟悉的 Python 语法来构建和管理索引流程。 citeturn0search0

快速开始

  1. 安装 CocoIndex Python 库

    pip install cocoindex

  1. 设置带有 pgvector 扩展的 Postgres 数据库

    确保已安装 Docker Compose,然后运行以下命令启动一个包含 pgvector 扩展的 Postgres 数据库:

    docker compose -f <(curl -L https://raw.githubusercontent.com/cocoindex-io/cocoindex/refs/heads/main/dev/postgres.yaml) up -d

  1. 定义索引流程

    使用 CocoIndex 的装饰器和数据流构建器,定义一个文本嵌入的索引流程:

    import cocoindex
    
    @cocoindex.flow_def(name="TextEmbedding")
    def text_embedding_flow(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)])

上述流程定义了从本地文件读取文档,拆分为块,对每个块进行嵌入,并将结果存储到 Postgres 数据库的完整流程。 citeturn0search0

应用场景

CocoIndex 适用于以下 AI 应用场景:

  • 语义搜索:通过构建文本嵌入索引,实现高效的语义搜索功能。

  • 检索增强生成(RAG):为生成式模型提供高质量的检索数据,提升生成结果的准确性和相关性。

  • 知识图谱构建:通过解析和索引结构化数据,构建知识图谱,支持复杂的查询和推理。

社区与贡献

CocoIndex 是一个开源项目,采用 Apache 2.0 许可证。我们欢迎社区的贡献,包括代码改进、文档更新、问题报告和功能请求。您可以通过以下方式参与我们的社区:

  • GitHub:在我们的 GitHub 仓库中提交问题或拉取请求。

  • Discord:加入我们的 Discord 社区,与其他开发者交流。

  • 社交媒体:关注我们的 Twitter 和 LinkedIn 获取最新动态。

通过 CocoIndex,您可以专注于业务逻辑的开发,而将数据索引的复杂性交给我们处理,快速构建高质量的 AI 应用。

Github:https://github.com/cocoindex-io/cocoindex

油管:https://youtu.be/-UlaGsqW7YI


留言