AI Search 是一项托管搜索服务。连接网站、R2 bucket 或上传你自己的文档,AI Search 将为你的内容建立索引以支持自然语言查询。
AI Search 包含两个核心流程:
- 建立索引 (Indexing): 一个异步流程,将您的内容转换为用于搜索的向量和关键词索引。当您连接数据源或上传文件时,建立索引会自动运行。
- 查询 (Querying): 一个由用户查询触发的同步流程。它使用向量搜索、关键词搜索或两者结合来检索最相关的内容,并可选择生成响应。
当您连接数据源或通过 Items API 上传文件时,建立索引会自动开始。
以下是建立索引期间发生的过程:
- 数据摄取 (Data ingestion): AI Search 从您连接的数据源读取数据,或接收通过 Items API 上传的文件。
- Markdown 转换: AI Search 使用 Workers AI 的 Markdown 转换 将 支持的数据类型 转换为结构化的 Markdown。这确保了不同文件类型之间的一致性。对于图像,Workers AI 用于执行对象检测,然后进行视觉到语言的转换,将图像转换为 Markdown 文本。请参阅 图像如何转换 以了解详细信息。
- 分块 (Chunking): 提取的文本被 分块 成更小的片段,以提高检索的粒度。
- 嵌入 (Embedding): 使用 Workers AI 的嵌入模型对每个分块进行嵌入,将内容转换为向量。
- 关键词索引: 启用关键词搜索时,每个分块也会针对 BM25 关键词匹配进行索引。
- 存储: 向量、关键词索引和内容将被存储并准备好用于搜索。
对于连接了数据源的实例,AI Search 会定期自动检查更新并对更改建立索引。对于使用 内置存储 的实例,新文件会在上传时立即建立索引。
建立索引完成后,AI Search 即可实时响应最终用户的查询。
以下是查询流水线的工作原理:
- 从 AI Search API 接收查询: 当您向 AI Search 的 Chat Completions 或 Search 端点发送请求时,查询工作流开始。
- 查询重写 (可选): AI Search 提供了使用 Workers AI 的大语言模型 (LLM) 之一来 重写输入查询 的选项,通过将原始查询转换为更有效的搜索查询来提高检索质量。
- 对查询进行嵌入: 使用用于嵌入数据的相同嵌入模型,将重写的(或原始的)查询转换为向量。
- 向量搜索: 将查询向量与存储的向量进行匹配,以查找语义相似的内容。
- 关键词搜索 (可选): 启用混合搜索时,BM25 关键词搜索将与向量搜索并行运行。
- 融合 (可选): 使用混合搜索时,向量和关键词结果将使用配置的融合方法进行合并。
- 重排序 (可选): 交叉编码器 (cross-encoder) 模型通过共同评估查询和文档来重新对结果进行评分。请参阅 重排序 以了解详细信息。
- 内容检索: 返回最相关的分块及其源内容。如果您使用的是 Search 端点,内容将在此时返回。
- 响应生成: 如果您使用的是 Chat Completions 端点,文本生成模型将使用检索到的内容生成响应。请参阅 系统提示 (System prompt) 以了解详细信息。
AI Search 构建在 Vectorize 之上,并在其周围添加了其余的搜索流水线。当您想要自己管理向量时使用 Vectorize,当您想要对内容进行托管搜索时使用 AI Search。
| 功能 (Capability) | AI Search | Vectorize |
|---|---|---|
| 什么是 (What it is) | 对您内容的托管端到端搜索 | 供您构建的向量数据库 |
| 您提供给它 (You give it) | 文件,或已连接的数据源 | 您自己生成的向量 |
| 分块与嵌入 (Chunking and embeddings) | 为您自动处理 | 您需要生成并插入它们 |
| 建立索引 (Indexing) | 自动执行,持续同步 | 您需要 upsert 和管理向量 |
| 检索 (Retrieval) | 向量和关键词 (混合)、重排序、元数据过滤 | 带有元数据过滤的向量相似度搜索 |
| 生成的回答 (Generated answers) | 可选,内置 | 未包含 |
| 最佳适用场景 (Best when) | 您希望快速添加搜索或 RAG | 您需要对检索流水线进行完全控制 |