尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

DB-GPT 使用 Milvus 作为 RAG 向量存储:从依赖安装、连接配置到源码实现解析

DB-GPT 使用 Milvus 作为 RAG 向量存储:从依赖安装、连接配置到源码实现解析 DB-GPT 使用 Milvus 作为 RAG 向量存储从依赖安装、连接配置到源码实现解析【免费下载链接】DB-GPTopen-source agentic AI data assistant for the next generation of AI Data products.项目地址: https://gitcode.com/GitHub_Trending/db/DB-GPT本文介绍如何在 DB-GPT 中以 Milvus 作为 RAG 向量存储Vector Store覆盖storage_milvus依赖安装、Milvus 服务准备、configs/dbgpt-proxy-openai.toml中的[rag.storage]连接配置、webserver 启动以及MilvusStore的底层实现细节Collection Schema、默认 HNSW 索引、BM25 全文检索支持等。读完本文你将能够把 DB-GPT 的向量检索底座从默认的 Chroma 无缝切换到 Milvus并理解检索链路中各参数的实际作用。背景向量存储与 Milvus 在 DB-GPT RAG 中的位置DB-GPT 的 MS-RAGMulti-Source Enhanced RAG框架在索引阶段会对同一批 Chunk 构建多种索引其中Vector 索引由EmbeddingAssembler负责 transformchunk → embedding并将结果持久化到向量数据库。根据 MS-RAG 模块参考 中的索引存储矩阵Vector 索引的 Load 目标是 Chroma、Milvus、PGVector 等向量数据库而 Milvus 正是官方支持并深度集成的后端之一FAQ 中明确 Milvus 2.1 可用见 kbqa 常见问题。在 DB-GPT 中切换向量存储有两条并行的配置路径本文以官方集成指南milvus_rag_install.md为准逐项展开。前置条件已按 源码安装指南 准备基于uv的 Python 环境当前仓库使用uv.lock与pyproject.toml管理依赖拥有可访问的 Milvus 服务Standalone 部署即可参考 Milvus 官方 docker-compose 安装方式一个 OpenAI 兼容的代理模型配置本文使用仓库自带的configs/dbgpt-proxy-openai.toml作为演示配置。第一步安装 Milvus 存储依赖DB-GPT 将各向量数据库的客户端依赖以 optional extra 形式拆分。在 dbgpt-ext 的 pyproject.toml 中可以看到storage_milvus对应的依赖为pymilvus与 Chroma、Qdrant、Weaviate 等并列storage_milvus [pymilvus]因此在项目根目录执行以下命令即可一次性安装基础运行、OpenAI 代理、RAG 与 Milvus 存储所需依赖uv sync --all-packages \ --extra base \ --extra proxy_openai \ --extra rag \ --extra storage_milvus \ --extra dbgpts其中--all-packages同步仓库内全部 packagedbgpt-app / dbgpt-core / dbgpt-ext / dbgpt-serve / dbgpt-client 等--extra base/proxy_openai基础运行与 OpenAI 代理模型支持--extra ragRAG 检索相关依赖--extra storage_milvus安装pymilvus这是MilvusStore正常初始化的硬性前提--extra dbgptsDB-GPT 插件DBGPTs能力。若使用 pip 安装方式等价地需要pip install pymilvus否则运行时 MilvusStore 源码 会抛出Could not import pymilvus python package的 ValueError。第二步准备 Milvus 服务按照 Milvus 官方install_standalone_docker-compose方案部署一个可访问的 Milvus 实例并确保 19530 端口可达。DB-GPT 侧默认以http://{uri}:{port}的形式建立连接见下文源码解析因此无需在服务端额外开启 TLS除非你显式配置了secure。第三步配置 DB-GPT 连接 MilvusTOML 方式编辑仓库根目录下的 configs/dbgpt-proxy-openai.toml将默认的 Chroma 向量存储替换为 Milvus。原始文件中的默认片段为[rag.storage] [rag.storage.vector] type chroma persist_path pilot/data将其改为按集成指南整理并修正注释[rag.storage] [rag.storage.vector] type Milvus uri 127.0.0.1 port 19530 #username dbgpt #password your_milvus_password字段说明type Milvus指定向量存储后端为 Milvus注意大小写对应资源类型名uriMilvus 服务主机地址默认回退到MILVUS_URL环境变量或localhostportMilvus gRPC/HTTP 端口默认19530username/passwordMilvus 认证信息必须成对出现——源码中若只设置了其中一个会抛出Both username and password must be set to use authentication for Milvus未启用认证时保持注释即可。需要提醒的是原指南中#password19530属于笔误19530 是端口号而非密码实际应填写你为 Milvus 配置的密码字符串。第四步启动 DB-GPT webserver配置完成后在仓库根目录执行uv run python packages/dbgpt-app/src/dbgpt_app/dbgpt_server.py --config configs/dbgpt-proxy-openai.toml服务默认监听0.0.0.0:5670对应 dbgpt-proxy-openai.toml 中的[service.web]配置。启动后在 Web UI 中创建知识库并同步文档时Chunk 的向量将写入 Milvus 对应 Collection检索阶段即从 Milvus 进行similar_search。备选方式通过.env环境变量切换向量库除了 TOML 配置DB-GPT 还支持以环境变量方式切换向量存储在 RAG 参数调整指南 中给出### Milvus vector db config VECTOR_STORE_TYPEMilvus MILVUS_URL127.0.0.1 MILVUS_PORT19530 #MILVUS_USERNAME #MILVUS_PASSWORD #MILVUS_SECURE在 MilvusStore 源码 中TOML 配置与这些环境变量是按优先级取值的配置项优先环境变量兜底配置项环境变量默认值说明uriMILVUS_URLlocalhostMilvus 主机地址portMILVUS_PORT19530端口usernameuserMILVUS_USERNAME空认证用户名须与 password 成对passwordMILVUS_PASSWORD空认证密码secureMILVUS_SECURE空是否启用安全连接该实现位于dbgpt-ext包storage/vector_store/milvus_store.py与dbgpt-core中的VectorStoreBase抽象基类对接因此两种方式底层走的是同一条存储链路。MilvusVectorConfig 参数详解MilvusStore 的连接与 Schema 参数在MilvusVectorConfig中统一定义同样见 milvus_store.py并在 配置参考文档 中同步维护参数类型默认值作用user/passwordstring空Milvus 认证凭据须成对设置uristringlocalhostMilvus 服务地址portstring19530Milvus 服务端口aliasstringdefaultpymilvus 连接别名connections.connect(alias...)使用primary_fieldstringpk_idCollection 主键字段INT64 自增text_fieldstringcontent存储 Chunk 原文的 VARCHAR 字段max_length 65535embedding_fieldstringvector存储向量嵌入的 FLOAT_VECTOR 字段metadata_fieldstringmetadata存储 Chunk 元数据 JSON 的 VARCHAR 字段securestring空安全连接开关其中uri、port、alias、primary_field、text_field、embedding_field、metadata_field也均作为 AWEL 资源参数暴露register_resource(milvus_vector_config, ...)这意味着在 DB-GPT 的 AWEL 工作流编排中可以直接以资源节点的方式引用 Milvus 存储配置。源码实现解析MilvusStore 如何工作连接与 Collection 初始化MilvusStore.__init__中DB-GPT 使用pymilvus.milvus_client.MilvusClient建立连接url fhttp://{self.uri}:{self.port}默认db_namedefault随后调用create_collection。创建 Collection 时用当前 embedding 模型对 collection 名做一次embed_query以确定向量维度dim构造 Schematext_fieldVARCHAR, 65535、primary_fieldINT64 主键自增、embedding_fieldFLOAT_VECTOR, dim、metadata_fieldVARCHAR, 65535、props_fieldJSON若 Milvus 版本支持全文检索见下文额外追加sparse_vectorSPARSE_FLOAT_VECTOR字段并注册 BM25 函数text_bm25_emb。默认索引与检索参数代码中默认索引参数为self.index_params { index_type: HNSW, metric_type: COSINE, }即默认使用HNSW 索引 COSINE 距离度量。同时内置了多种索引的检索参数映射IVF_FLAT/IVF_SQ8/IVF_PQnprobe10、HNSWM8, efConstruction64、RHNSW_FLAT/RHNSW_SQ/RHNSW_PQef10、IVF_HNSW、ANNOYsearch_k10等满足不同规模与精度的检索需求。检索入口similar_search/similar_search_with_scores会将MetadataFilters转换为 Milvus 表达式convert_metadata_filters基于 JSON 字段props_field[key]构造 EQ / IN 表达式用 embedding 模型编码查询文本以output_fields排除向量字段包括稀疏向量后执行col.search返回内容、元数据、距离分数similar_search_with_scores额外支持score_threshold过滤超出[0, 1]的相似度会打印告警日志。Milvus 2.5 全文检索BM25支持源码中is_support_full_text_search()通过解析get_server_version()判断 Milvus 版本是否 ≥ 2.5.0。若支持则Collection 会附带sparse_vector字段并创建AUTOINDEXBM25度量的稀疏向量索引full_text_search()直接以 BM25 稀疏向量做关键词检索返回带retrieverfull_text标记的 Chunk与向量检索形成混合召回能力。这也是 v0.8.1 版本的重要改进之一见 Release Notes 中 “Milvus 2.5 compatibility” 条目。批量写入与数据维护load_document以500 chunks/批的方式分批写入_load_documents→_add_documents返回主键列表vector_name_exists通过 MilvusClient 检查 Collection 是否存在且row_count 0delete_vector_name调用utility.drop_collection删除整个 Collectiondelete_by_ids按主键批量删除delete_by_file_id按metadata中的file_id做模糊匹配删除truncate通过pk_id 0清空 Collection 数据并flush提交用于安全清空而不删除 Collection 本身。验证与常见排查依赖未安装启动时报Could not import pymilvus python package→ 回到第一步补装storage_milvus连接失败确认uri/port与 Milvus 实际地址一致且主机可路由FAQkbqa.md建议 Milvus 版本 2.1全文检索特性则要求 ≥ 2.5认证异常username与password必须同时配置缺失其一会被源码主动拒绝检索无结果检查知识库index_methods是否包含VectorStore以及 embedding 模型是否可用——create_collection需要 embedding 模型先返回一个查询向量才能确定维度。延伸阅读知识库索引原理——一篇文档如何变成可检索的向量 / 关键词 / 知识图谱 / 结构索引Agentic RAG 对话原理——问题如何通过 agentic 检索循环变成带引用的回答MS-RAG 模块参考——向量索引在整体索引流水线Extract → Transform → Load中的位置RAG 参数调整指南——topk、recall_score、chunk_size 等检索参数的调优方法Milvus 配置参考——MilvusVectorConfig全量参数定义。【免费下载链接】DB-GPTopen-source agentic AI data assistant for the next generation of AI Data products.项目地址: https://gitcode.com/GitHub_Trending/db/DB-GPT创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表