功能简介
更新时间:2024-12-12
概要
AI Search 是一套完整的 RAG(Retrieval-Augmented Generation)解决方案,主要应用于知识库的向量化检索与管理场景。通过集成文档管理、文档解析、嵌入服务(Embedding)、LLM 模型等模块,用户可以快速构建专属的知识检索和生成系统。
设计思路
AI Search 的核心理念是模块化和灵活性。通过提供标准接口,每个模块(文档管理、处理、嵌入和搜索)可以独立替换或扩展。这种设计允许用户根据业务需求自由定义模块实现,与向量数据库高效结合,完成文档的导入、分块、向量化和检索功能。
主要组成模块包括:
- 文档管理模块:处理本地文件或对象存储文件。
- 文档处理模块:解析文档并分块,便于后续处理。
- 嵌入模块:将文本内容转化为向量表示。
- 检索模块:支持向量检索、全文检索以及混合检索。
基础概念
- 文档管理:提供文档的添加、删除、列出和加载功能,支持本地文件和云端存储。
- 文档解析与分块:通过指定分块规则,将文档分解为适合处理的小块,以便高效搜索。
- 嵌入服务:将文档分块转化为向量表示,是向量检索的基础。
-
检索方法:
- 向量检索:基于内容的语义相似度搜索。
- BM25 检索:基于关键词的全文检索。
- 混合检索:结合向量和关键词的多模态检索。
功能介绍
以下以表格形式展示各功能模块的描述和对应 SDK 模块名称:
功能模块 | 功能描述 | 对应 SDK 模块名称 |
---|---|---|
文档管理 | 管理本地文件或对象存储中的文件,支持文档的添加、删除、列出和加载操作。 | pymochow.ai.dochub |
文档解析与分块 | 对文档进行解析并按规则(如页数、重叠部分等)分块,为后续嵌入和检索做准备。 | pymochow.ai.processor |
嵌入服务 | 将文档内容转化为向量表示,支持通过百度 Qianfan 或自定义嵌入方法生成向量。 | pymochow.ai.embedder |
向量检索 | 基于内容的语义相似度,利用向量数据库查找相关内容。 | pymochow.ai.pipeline |
全文检索 | 基于 BM25 算法,进行关键词匹配的全文搜索。 | pymochow.ai.pipeline |
混合检索 | 结合向量检索和全文检索,通过设置权重实现语义与关键词的多模态搜索。 | pymochow.ai.pipeline |
处理管道 | 集成文档管理、解析、嵌入和检索功能,提供从文档导入到搜索结果的完整流程。 | pymochow.ai.pipeline |
示例代码
以下是部分功能的示例代码:
1. 文档管理
from pymochow.ai.dochub import LocalDocumentHub, DocumentHubEnv
from pymochow.model.document import Document
import uuid
env = DocumentHubEnv(root_path="local://your_root_path/")
doc_hub = LocalDocumentHub(env=env)
doc = Document(
kb_id=str(uuid.uuid4()),
doc_name="test/test.pdf",
file_path="./test.pdf"
)
doc_hub.add(doc=doc) # 添加文档
docs = doc_hub.list() # 列出所有文档
doc_hub.remove(doc=doc) # 删除文档
2. 文档解析与分块
from pymochow.ai.processor import LangchainDocProcessor
from pymochow.model.document import Document
doc_processor = LangchainDocProcessor(maximum_page_length=300, page_overlap_length=50)
doc_chunks = doc_processor.process_doc(doc) # 分块解析文档
3. 嵌入服务
from pymochow.ai.embedder import QianfanEmbedder
embedder = QianfanEmbedder(batch=2)
doc_chunks = embedder.embedding(doc_chunks) # 嵌入生成向量
4. 检索功能
向量检索:
from pymochow.ai.pipeline import DefaultPipeline
from pymochow.model.table import VectorTopkSearchRequest, VectorSearchConfig
search_request = VectorTopkSearchRequest(
vector_field="embedding", limit=10, config=VectorSearchConfig(ef=200)
)
result = pipeline.vector_search(
search_contents=["your query"], embedder=embedder, table=chunk_table, search_request=search_request
)
混合检索:
from pymochow.ai.pipeline import DefaultPipeline
from pymochow.model.table import HybridSearchRequest
hybrid_request = HybridSearchRequest(
vector_request=vector_search_request, vector_weight=0.4,
bm25_request=bm25_search_request, bm25_weight=0.6
)
result = pipeline.hybrid_search(
search_contents=["your question"], embedder=embedder, table=chunk_table, search_request=hybrid_request
)
更多示例代码可参考AI Search 操作