官方概念页,讲向量检索与关键词检索怎么配合完成索引与召回。2 分钟,适合当作自建检索方案前的口径对齐材料。
Cloudflare AI Search
原文只讲了索引与查询两个流程,没说这个产品在 Cloudflare 全家桶里的位置。AI Search 官方文档首页 给的定位是「让任何应用或 agent 加上搜索能力,而不必自己搭一整套检索基础设施」;产品页 更直白,把它叫做 automatic RAG pipeline——摄取、索引、查询三段全包,开发者只负责接数据源和发问题。
它不是凭空造的:底层用 Vectorize 存向量、Workers AI 跑 Markdown 转换与嵌入推理、R2 可以直接当数据源。原文结尾那句「想自己管向量就用 Vectorize,想要托管搜索就用 AI Search」,说的正是这层关系。
这是理解这个产品最重要的一条背景。它 2025-04-07 以 AutoRAG 之名开放 beta,2025-09-25 更名为 AI Search,同时开放多家模型供应商支持(发布记录)。
更名不只是换个招牌,API 形状也换了:旧路径 /autorag/rags/ 换成 /ai-search/instances/,请求体从单个 query 字段改成 OpenAI 风格的 messages 数组,API token 权限项也从 AutoRAG 换成 AI Search(迁移指南)。旧端点官方说「会继续可用」,但没给明确的日落时间表。所以你在网上搜到的多数中文教程还停留在 AutoRAG 时代,照抄会踩路径不对的坑。
原文把 hybrid search、fusion、reranking 都标成 optional 一笔带过,这三件事恰恰是检索质量的主战场:
index_method.vector 和 index_method.keyword 同时置 true(hybrid search 文档)。代价是容量减半——付费版纯向量实例上限 100 万文件,开了关键词索引降到 50 万。@cf/baai/bge-reranker-base,最低分阈值取值 0 到 1、默认 0.4;官方明示会增加一次请求步骤,延迟上升(reranking 文档)。 模型侧一共五个可换位点:图转 Markdown、嵌入、查询改写、重排、生成。嵌入模型只能在创建实例时选定、之后不可改,生成模型随时可改;选 Smart Default 则由 Cloudflare 替你选并随时间自动升级(模型配置)。接第三方模型(OpenAI、Anthropic 等)要先把 provider key 放进 AI Gateway,再把 gateway 接到 AI Search。查询有三个入口:Workers binding、REST API、以及 MCP server——最后这个意味着它可以直接挂给 agent 当检索工具用。
做 SaaS 的多租户隔离有两条路(多租户文档):官方推荐一租户一实例,靠 namespace binding 在运行时动态建删,隔离最硬;租户多而小的场景可以共用一个实例、按文件夹路径组织内容,查询时用 metadata filter 收窄到该租户的目录。
开放 beta 期间 AI Search 本身在限额内免费,存储、向量索引、Browser Run 用量都已含在内;单独计费的只剩 Workers AI 和 AI Gateway。迁到托管基础设施之前,R2、Vectorize 等是分开计费的,老文章的成本估算不再适用(限额与价格)。
几个容易撞上的硬限额:单文件最大 4 MB;免费版每实例 10 万文件、每月 2 万次查询、每天爬 500 页;付费版实例数上限 5000、查询不限量。自定义 metadata 字段每实例最多 5 个、单值 500 字符——原文没提这条,但它直接决定了你能设计多复杂的过滤维度。
2026-06-18 所有实例完成向托管基础设施迁移;2026-07-30 补齐了 Agents SDK、Vercel AI SDK、LangChain 的接入指南;2026-08-06 加了 Cloudflare Access 保护的自定义域名,以及一个叫 Discover 的解析类型,专门用来爬没有完整 sitemap 的网站。方向很清楚:从「一个 RAG 工具」往「agent 的默认检索后端」上靠。
context:文章开篇给 AI Search 的定性。它的边界是「Connect a website, an R2 bucket, or upload your own documents」,之后索引与检索都由服务方负责,使用者只提供内容和自然语言查询。
费曼一下:不是给你一套零件让你自己装一台搜索引擎,而是给你一个插口——把内容塞进去,问题问出来,中间那条流水线归他们管。
context:AI Search 两个核心过程之一,被明确标为**异步(asynchronous)**过程,作用是把内容转换成向量和关键词索引,在连接数据源或上传文件时自动运行。
费曼一下:相当于图书馆入库。书运到了不着急借出去,先编目、贴标签、上架,慢慢做完;等有人来找书,才知道去哪一层哪一排取。
context:另一个核心过程,被标为**同步(synchronous)**过程,由用户查询触发,用向量检索、关键词检索或两者取回最相关内容,并可选地生成回答。
费曼一下:读者站在柜台前问一句话,就得马上有人跑去书架取回来。异步与同步的分界,本质上是「什么事可以慢慢做」与「什么事必须当场做完」的分工。
context:索引流水线的第二步,用 Workers AI 的 Markdown Conversion 把受支持的数据类型转成结构化 Markdown,原文给出的理由是「ensures consistency across diverse file types」。
费曼一下:与其让后面每个环节都学会认识十几种文件格式,不如在最上游一次性把它们翻译成同一种语言。以一次转换换来下游的简单,是典型的工程取舍。
context:图片的专门处理路径——先做 object detection,再做 vision-to-language,把图片转成 Markdown 文本。
费曼一下:图片不被当成图片索引,而是先被「讲述」成一段文字,再和普通文档走同一条路。搜索系统能理解图片,靠的是把画面翻译成语言。
context:抽取出的文本被切成更小的片段,原文给出的目的是 improve retrieval granularity(提高检索粒度)。
费曼一下:把一整本书当成一个检索单位,命中了也不知道该看哪一页。切成小块,命中的就是那一段,取回的内容才够精确。
context:索引时每个 chunk 用 Workers AI 的嵌入模型转成向量;查询时,查询也被「transformed into a vector using the same embedding model used to embed your data」。
费曼一下:语义检索靠的是在同一个坐标系里比距离。内容和问题必须由同一个模型翻译成坐标,否则量出来的距离没有意义。
context:索引侧的可选步骤——启用关键词检索时,每个 chunk 额外建一份 BM25 匹配索引;对应查询侧启用混合检索时并行跑的关键词检索。
费曼一下:向量检索擅长理解意思,但对精确的词、编号、专有名词容易失手。关键词索引补的正是这一块,靠字面命中兜底。
context:查询侧的可选环节。启用混合检索时,BM25 关键词检索与向量检索并行运行,两路结果再按配置的 fusion 方法合并。
费曼一下:两个眼睛看同一个东西,各自给出一份排名,再按某种规则合成一份。关键不在于哪一路更强,而在于合并的规则怎么定。
context:查询侧的可选环节,位于内容取回之前。一个 cross-encoder 模型「re-scores results by evaluating the query and document together」。
费曼一下:前面的检索是把问题和文档各自变成向量再比距离,两边从没真正见过面。重排则是把问题和候选文档摆在一起通读一遍再打分——更准,但代价是每个候选都要重算一次。
context:查询工作流的两个入口,也是两个出口。用 Search 端点时,内容在 content retrieval 这一步就返回;用 Chat Completions 端点时,再由文本生成模型基于取回内容生成回答。
费曼一下:一个只负责把材料找齐交给你,一个负责把材料读完写成答案。选哪个,取决于你想不想自己掌控生成那一步。
context:查询链路的第一个可选环节,用 Workers AI 的某个 LLM 把原始输入「transforming the original query into a more effective search query」,以提升检索质量。
费曼一下:用户问得含糊,检索就找得含糊。先让模型把问题重新问一遍,问得更适合被检索,后面每一步的质量都跟着抬升。
context:文章结尾的定位说明——AI Search 建在 Vectorize 之上,并围绕它补齐搜索流水线的其余部分;想自己管向量用 Vectorize,想要托管搜索用 AI Search。
费曼一下:同一个厂商把同一件事切成两个价位卖。你要么买向量数据库自己编排流程,要么买整条流水线交出编排权。选择的实质是:这一层的判断,你想不想自己做。
graph TD
C1["AI Search 托管搜索服务"]
C2["索引 异步过程"]
C3["查询 同步过程"]
C4["Markdown 转换"]
C5["图像 vision-to-language"]
C6["分块 Chunking"]
C7["嵌入模型两端对称"]
C8["BM25 关键词索引"]
C9["查询改写"]
C10["向量检索"]
C11["混合检索与融合"]
C12["重排 cross-encoder"]
C13["Search 与 Chat Completions"]
C14["Vectorize 自管向量"]
C1 -->|层级| C2
C1 -->|层级| C3
C2 -->|首步| C4
C4 -->|覆盖| C5
C4 -->|因果| C6
C6 -->|因果| C7
C6 -->|可选| C8
C7 -->|支撑| C10
C8 -->|支撑| C11
C10 -->|支撑| C11
C3 -->|可选入口| C9
C9 -->|因果| C10
C11 -->|可选| C12
C12 -->|支撑| C13
C3 -->|两个出口| C13
C1 ---|分工| C14
把检索做成产品,最见功力的地方不是模型,而是把一件事拆成两件事:一件异步,一件同步。内容进来的时候不着急,转换、分块、嵌入、建索引,慢慢做完;用户提问的时候一秒都等不得,向量比对、关键词命中、融合、重排,一路跑到答案。这条分界线画对了,后面的工程问题才有解;画错了,要么索引拖垮响应,要么响应逼着索引偷工减料。
真正精巧的设计藏在两端的对称里。你的内容被某个嵌入模型转成向量,用户的问题也必须被同一个模型转成向量——原文写得很克制,只说 the same embedding model used to embed your data。这听着像实现细节,其实是整套语义检索成立的前提:只有落在同一个坐标系里,距离才有意义。不少人自建检索时换了嵌入模型却没重建索引,效果莫名其妙地垮掉,根子就在这句话上。
第二个值得琢磨的动作,是把一切先变成 Markdown。PDF、网页、图片,形态天差地别,但只要统一成结构化文本,后面的分块和嵌入就只需要面对一种输入。图片的处理尤其能说明问题:先做目标检测,再做 vision-to-language,把画面翻译成文字,然后并入同一条流水线。与其让每个下游环节都学会认识十几种格式,不如在最上游一次性收敛——这是工程上典型的以一次转换换全局的简单。
查询那条链上,一半的步骤标着 optional:查询改写、关键词检索、融合、重排。它们不是可有可无的装饰,而是留给你的旋钮,而且装在不同位置——改写作用在提问,关键词与融合作用在召回,重排作用在排序。默认路径最短最快,每拧开一个,都是拿延迟和成本换准确率。拧到哪一格,取决于你的场景能容忍什么,而不是取决于哪一档听起来更高级。
最后一句最该记住:AI Search 建在 Vectorize 之上,把剩下的流水线围着它补齐了。想自己管向量就用 Vectorize,想要托管的搜索就用 AI Search。选择托管从来不只是选择省事,而是承认自己在这一层没有独特的判断——然后把判断力省下来,留给你真正与众不同的那一层。