CocoIndex 快速入门:10分钟从零构建第一个向量索引
CocoIndex 快速入门10分钟从零构建第一个向量索引【免费下载链接】cocoindexIncremental engine for long horizon agents Star if you like it!项目地址: https://gitcode.com/GitHub_Trending/co/cocoindex用 CocoIndex——一个支持自定义转换逻辑与增量更新的开源数据索引引擎——把本地 Markdown 文件读进来、切成文本块、算出嵌入向量再带着向量索引写进 PostgreSQL。这就是本文要带你做完的事数据提取、转换、索引一条线走完文本检索、图像识别这类场景都建立在这个模式上。10分钟后的成果一条可查询的向量索引跑完本文你会拥有PostgreSQL 里一张doc_embeddings表每个文档块一行含文本、块位置、嵌入向量且向量列建了相似度索引一条可重复执行的索引流源文件新增、修改或删除时增量重算只动变化的部分一个模板之后换数据源、换目标存储结构不变只换两端。环境三步准备 安装引擎与本地嵌入依赖pip install -U cocoindex[embeddings][embeddings]额外装好本地嵌入模型需要的依赖同时提供cocoindex命令行。起一个带 pgvector 扩展的 PostgreSQL用来存放向量docker compose -f dev/postgres.yaml up -d这份配置就在仓库dev/目录里镜像pgvector/pgvector:pg17账号cocoindex库名cocoindex端口5432。不想用 Docker 的话可按 Postgres 连接器文档 自行安装。建好项目目录和放数据的文件夹mkdir cocoindex-quickstart cd cocoindex-quickstart mkdir markdown_files然后下载 markdown_files.zip把里面 3 个示例 Markdown 文件解压到markdown_files目录中。编写 TextEmbedding 索引流四个任务逐段拆解先看下数据走向源数据经过分块、嵌入这些自定义转换最终落进向量目标存储。新建main.py下面按四个任务逐段写入。接入数据源声明 LocalFile 与收集器import cocoindex cocoindex.flow_def(nameTextEmbedding) def text_embedding_flow( flow_builder: cocoindex.FlowBuilder, data_scope: cocoindex.DataScope, ): data_scope[documents] flow_builder.add_source( cocoindex.sources.LocalFile(pathmarkdown_files) ) doc_embeddings data_scope.add_collector()flow_def注册一个名为TextEmbedding的索引流。LocalFile(pathmarkdown_files)把目录里每个文件变成一行数据add_collector()建一个收集器后面逐行攒最终结果。递归分块用 SplitRecursively 控制块大小分块——把长文本切成嵌入模型能处理的小段with data_scope[documents].row() as doc: doc[chunks] doc[content].transform( cocoindex.functions.SplitRecursively(), languagemarkdown, chunk_size2000, chunk_overlap500, )languagemarkdown让切分时遵循 Markdown 结构优先从自然边界下手chunk_size2000是每块的目标长度chunk_overlap500让相邻两块重叠 500 个字符避免语义在边界处被截断。每块会自动带一个location字段记录它在文档中的位置。生成嵌入SentenceTransformerEmbed 产出向量嵌入——把文本转成能计算语义相似度的数值向量with doc[chunks].row() as chunk: chunk[embedding] chunk[text].transform( cocoindex.functions.SentenceTransformerEmbed( modelsentence-transformers/all-MiniLM-L6-v2 ) ) doc_embeddings.collect( filenamedoc[filename], locationchunk[location], textchunk[text], embeddingchunk[embedding], )all-MiniLM-L6-v2是个轻量模型CPU 即可运行首次使用会自动下载。每算出一块向量collect就把文件名、块位置、原文、向量四列攒进收集器。声明导出把向量写入 Postgres 并建索引doc_embeddings.export( doc_embeddings, cocoindex.storages.Postgres(), primary_key_fields[filename, location], vector_indexes[ cocoindex.VectorIndexDef( field_nameembedding, metriccocoindex.VectorSimilarityMetric.COSINE_SIMILARITY, ) ], )doc_embeddings是目标表名primary_key_fields指定“文件名块位置”为主键重复运行时同一块会被更新而不是重复插入VectorIndexDef在 embedding 列上建余弦相似度索引之后的相似度搜索就查它。执行 cocoindex update 并即时验证向量入库 ✅先告诉索引流数据库在哪export COCOINDEX_DATABASE_URLpostgresql://cocoindex:cocoindexlocalhost:5432/cocoindex地址里的账号、库名、端口与前面 Docker 起的 Postgres 完全对应。然后执行更新命令cocoindex update main首次运行会看到统计输出documents: 3 added, 0 removed, 0 updated3 added表示 3 个示例文档全部完成分块和嵌入0 removed / 0 updated表示没有需要清理或重算的旧数据。此时进 PostgreSQL 的doc_embeddings表里查行数等于 3 个文档的总块数每行的embedding列就是向量可以直接按余弦相似度检索。延伸核心概念、示例目录与可替换的连接器 核心概念理解状态驱动编程与增量处理的原理读一遍不亏示例目录文本检索、图像搜索、知识图谱等现成玩法按兴趣挑一个跟做想换数据源或目标存储看 连接器一览本地文件、S3、Kafka、多种向量库都能替换本文的流结构不用动。【免费下载链接】cocoindexIncremental engine for long horizon agents Star if you like it!项目地址: https://gitcode.com/GitHub_Trending/co/cocoindex创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考