当前位置: 首页 > news >正文

DeerFlow多智能体项目分析-向量数据库实现知识检索的源码解析

概述

DeerFlow 项目采用模块化设计,支持多种向量数据库和RAG(检索增强生成)提供商,为AI研究提供强大的知识检索能力。
项目地址:https://github.com/bytedance/deer-flow
LangGraph中文在线文档:https://github.langchain.ac.cn/langgraph/agents/agents/

支持的向量数据库

1. 核心抽象接口

项目定义了统一的检索器抽象基类:

文件路径: src/rag/retriever.py

class Retriever(abc.ABC):@abc.abstractmethoddef list_resources(self, query: str | None = None) -> list[Resource]:"""列出RAG提供商的资源"""pass@abc.abstractmethoddef query_relevant_documents(self, query: str, resources: list[Resource] = []) -> list[Document]:"""从资源中查询相关文档"""pass

2. 数据模型定义

文件路径: src/rag/retriever.py

class Chunk:"""文本块"""content: strsimilarity: floatclass Document:"""文档对象"""id: strurl: str | None = Nonetitle: str | None = Nonechunks: list[Chunk] = []class Resource(BaseModel):"""资源描述"""uri: str = Field(..., description="资源URI")title: str = Field(..., description="资源标题")description: str | None = Field("", description="资源描述")

向量数据库实现

1. Milvus 实现

文件路径: src/rag/milvus.py

嵌入模型支持
class DashscopeEmbeddings:"""OpenAI兼容的嵌入包装器"""def embed_query(self, text: str) -> List[float]:"""返回给定文本的嵌入向量"""def embed_documents(self, texts: List[str]) -> List[List[float]]:"""返回多个文档的嵌入向量(LangChain接口)"""
Milvus检索器配置
class MilvusRetriever(Retriever):"""基于Milvus向量存储的检索器实现"""def __init__(self) -> None:# 连接配置self.uri: str = get_str_env("MILVUS_URI", "http://localhost:19530")self.collection_name: str = get_str_env("MILVUS_COLLECTION", "documents")# 嵌入配置self.embedding_provider = get_str_env("MILVUS_EMBEDDING_PROVIDER", "openai")self.embedding_dim: int = self._get_embedding_dimension(self.embedding_model)
集合Schema定义
def _create_collection_schema(self) -> CollectionSchema:"""构建Milvus集合Schema"""fields = [FieldSchema(name="id", dtype=DataType.VARCHAR, is_primary=True),FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=self.embedding_dim),FieldSchema(name="content", dtype=DataType.VARCHAR, max_length=65535),FieldSchema(name="title", dtype=DataType.VARCHAR, max_length=512),FieldSchema(name="url", dtype=DataType.VARCHAR, max_length=1024),]

2. RAGFlow 实现

文件路径: src/rag/ragflow.py

class RAGFlowProvider(Retriever):"""使用RAGFlow检索文档的提供商"""def query_relevant_documents(self, query: str, resources: list[Resource] = []) -> list[Document]:"""查询相关文档"""payload = {"question": query,"dataset_ids": dataset_ids,"document_ids": document_ids,"page_size": self.page_size,}response = requests.post(f"{self.api_url}/api/v1/retrieval", headers=headers, json=payload)

3. VikingDB 实现

文件路径: src/rag/vikingdb_knowledge_base.py

class VikingDBKnowledgeBaseProvider(Retriever):"""使用VikingDB知识库API检索文档的提供商"""def _create_signature(self, method: str, path: str, query_params: dict, headers: dict, payload: bytes) -> str:"""创建API签名"""# HMAC-SHA256签名实现def _make_signed_request(self, method: str, path: str, params: dict = None, data: dict = None):"""发起签名请求"""

配置管理

1. RAG提供商配置

文件路径: src/config/tools.py

class RAGProvider(enum.Enum):DIFY = "dify"RAGFLOW = "ragflow"VIKINGDB_KNOWLEDGE_BASE = "vikingdb_knowledge_base"MOI = "moi"MILVUS = "milvus"SELECTED_RAG_PROVIDER = os.getenv("RAG_PROVIDER")

2. 构建器模式

文件路径: src/rag/builder.py

def build_retriever() -> Retriever | None:if SELECTED_RAG_PROVIDER == RAGProvider.DIFY.value:return DifyProvider()elif SELECTED_RAG_PROVIDER == RAGProvider.RAGFLOW.value:return RAGFlowProvider()elif SELECTED_RAG_PROVIDER == RAGProvider.MILVUS.value:return MilvusProvider()# ... 其他提供商

工具集成

检索工具

文件路径: src/tools/retriever.py

class RetrieverTool(BaseTool):name: str = "local_search_tool"description: str = "从带有`rag://`前缀的文件中检索信息"def _run(self, keywords: str, run_manager: Optional[CallbackManagerForToolRun] = None) -> list[Document]:documents = self.retriever.query_relevant_documents(keywords, self.resources)return [doc.to_dict() for doc in documents]def get_retriever_tool(resources: List[Resource]) -> RetrieverTool | None:"""获取检索工具实例"""retriever = build_retriever()return RetrieverTool(retriever=retriever, resources=resources)

环境配置

Milvus 配置示例

文件路径: .env.example

# Milvus向量数据库配置
RAG_PROVIDER=milvus
MILVUS_URI=http://localhost:19530  # 或 ./milvus_demo.db (Lite版)
MILVUS_COLLECTION=documents
MILVUS_EMBEDDING_PROVIDER=openai
MILVUS_EMBEDDING_MODEL=text-embedding-ada-002
MILVUS_EMBEDDING_API_KEY=your_api_key
MILVUS_TOP_K=10
MILVUS_AUTO_LOAD_EXAMPLES=true

RAGFlow 配置示例

# RAGFlow配置
RAG_PROVIDER=ragflow
RAGFLOW_API_URL="http://localhost:9388"
RAGFLOW_API_KEY="ragflow-xxx"
RAGFLOW_RETRIEVAL_SIZE=10
RAGFLOW_CROSS_LANGUAGES=English,Chinese,Spanish,French,German,Japanese,Korean

VikingDB 配置示例

# VikingDB知识库配置
RAG_PROVIDER=vikingdb_knowledge_base
VIKINGDB_KNOWLEDGE_BASE_API_URL="api-knowledgebase.mlp.cn-beijing.volces.com"
VIKINGDB_KNOWLEDGE_BASE_API_AK="AKxxx"
VIKINGDB_KNOWLEDGE_BASE_API_SK="your_secret_key"
VIKINGDB_KNOWLEDGE_BASE_RETRIEVAL_SIZE=15

技术特性

1. 模块化设计

  • 统一的抽象接口,易于扩展新的向量数据库
  • 工厂模式动态创建检索器实例
  • 配置驱动的提供商选择

2. 多模态支持

  • 支持文本、图片等多种数据类型
  • 灵活的嵌入模型配置
  • 跨语言检索能力

3. 高性能检索

  • 向量相似度计算
  • 可配置的检索结果数量
  • 智能文档分块和聚合

4. 企业级特性

  • API签名认证(VikingDB)
  • 连接池和错误处理
  • 详细的日志记录

使用场景

  1. 私有知识库检索: 从用户上传的文档中检索相关信息
  2. 上下文增强: 为AI研究提供领域特定的背景知识
  3. 多源数据融合: 整合来自不同数据源的信息
  4. 实时查询: 在研究过程中动态检索相关文档

总结

DeerFlow的向量数据库架构体现了现代AI应用的最佳实践:

  • 抽象化设计提供了良好的扩展性
  • 多提供商支持满足不同部署需求
  • 统一的工具接口简化了集成复杂度
  • 丰富的配置选项支持灵活的定制化

这种设计使得DeerFlow能够适应各种企业环境和技术栈,为AI研究提供强大而灵活的知识检索能力。

http://www.dtcms.com/a/554097.html

相关文章:

  • 001前端查询组件
  • AI在线客服搭建实战指南:三步构建7×24小时智能服务系统
  • TSMaster常用函数
  • 伯位数智模式为商家经营带来的变革与机遇
  • 网盘怎么做电影网站网站在公司做有什么要求吗
  • 介绍一下 multiprocessing 的 Manager模块
  • 网页建站总结报告网站建设初期怎么添加内容
  • C语言——猜数字游戏(rand、srand、time函数学习)
  • 多媒体网站开发实战装修设计软件免费
  • Rust流程控制(下):loop、while、for循环
  • 使用 UV 工具管理 Python 项目的常用命令
  • 解析视频汇聚平台EasyCVR强大的设备统一管理能力,助力构筑安防融合感知的基石
  • 南通做网站的手机怎么看网页源代码
  • 温州网上推广什么网站好深圳网络推广团队
  • 1951-2024年我国逐日\逐月\逐年近地面气温栅格数据
  • Linux----进程控制
  • 公司网站建设公司微网站建设价格
  • AI代码开发宝库系列:RAG--GraphRAG实战
  • 做一份网站动态图多少钱免费ip地址
  • 基于空间螺旋运动假设的水星近日点进动理论推导与验证
  • 手写Spring第20弹:JDK动态代理:深入剖析Java代理模式
  • 京网站建设公司行业app开发公司
  • 平面设计网站导航dw软件代码大全
  • PyTorch生成式人工智能——MUNIT详解与实现
  • 建设微网站网站公司介绍模板
  • 网站为什么做微云的采集备案网站首页地址
  • [linux] rm命令
  • HTML加密工具EXE软件介绍
  • 大模型微调怎么实现?当然不是人工对一些参数微小调整!
  • TRAE SOLO:基于React 18+与蓝耘MaaS的多语言智能翻译平台设计与实现