1. AI Search 不只调用一个模型
刚接触 RAG 时,我们很容易把模型理解成最后负责回答问题的 LLM。实际上,AI Search 从文档入库到生成答案,可能先后使用多种模型。它们解决的问题不同,也不能互相替代。
Embedding 模型负责把文档和问题转换成向量;查询改写模型负责把「那两天以上呢」补全为可以独立检索的问题;Reranker 重新判断候选资料与问题的相关度;生成模型阅读最终资料并组织回答。如果数据源包含图片,还会有模型参与图片转 Markdown,不过这部分通常不需要我们单独选型。
因此,所谓模型选型不是从模型榜单里挑一个最大的名字,而是决定每个阶段是否需要模型、应该使用什么模型,以及增加的质量能否覆盖延迟与费用。
2. 四种模型的调用位置
下面这张图标出了四种模型在索引和查询链路中的位置:
Embedding 同时出现在两条链路里。文档入库时,每个 Chunk 都要计算一次向量;用户查询时,问题也要使用同一个模型计算向量。两边的向量只有处在相同空间里,才能比较距离。
查询改写、Reranker 和生成模型只在在线查询阶段出现,而且后两项都可以关闭。应用只调用 search() 时,生成模型不会运行;关闭查询改写和重排后,一次查询甚至可能只产生一次问题 Embedding 调用。
图片转 Markdown 是另一类索引调用。AI Search 会使用目标检测和摘要模型理解图片,但当前并不要求我们为这一环节选择具体模型。包含扫描件、截图和图表时,应该查看转换后的 Markdown 是否保留关键信息,并在 AI Gateway 中单独观察这部分索引用量。
这也是控制成本的第一条原则:先确定当前问题是否需要这个模型,再比较同一类模型中的价格。
3. 哪些模型可以更换
Embedding 模型在实例创建后不能直接替换。更换模型意味着全部文档需要重新生成向量,因此 Cloudflare 要求创建新实例。生产系统通常建立 knowledge-v2,让新旧实例使用同一份评测集并行测试,通过后再切换 Binding。
生成模型可以在实例设置中修改,也可以在单次 chatCompletions() 请求中通过 model 覆盖。Reranker 可以在实例级开启,也可以在查询时临时启用。查询改写同样可以按请求控制,只有传入 messages 时才会生效;使用简单 query 参数时不会执行改写。
控制台还提供 Smart Default。它适合原型,因为 Cloudflare 会自动选择并升级推荐模型;但自动变化会让同一批问题在不同时间得到不同结果。需要稳定评测和可回放日志的生产系统,更适合显式固定模型,并把模型名写入策略版本。
模型配置文档 会持续更新支持范围。下面的价格与模型列表以 2026 年 8 月的官方文档为准,实际部署前仍应重新核对。
4. Embedding 模型
Embedding 决定候选资料能不能被召回。生成模型再强,也无法使用没有进入候选集的文档,因此它通常是整套 RAG 中更应该先评测的模型。
AI Search 当前支持多种 Workers AI 与第三方 Embedding。中文技术知识库最值得先比较的是下面两种 Cloudflare 原生模型:
| 模型 | AI Search 输入上限 | 向量维度 | 当前价格 | 适用范围 |
|---|---|---|---|---|
@cf/baai/bge-m3 | 512 Token | 1024 | $0.012 / 百万输入 Token | 多语言短 Chunk、中文与英文混合资料 |
@cf/qwen/qwen3-embedding-0.6b | 8192 Token | 1024 | $0.012 / 百万输入 Token | 中文技术文档、较长段落、代码与自然语言混排 |
@cf/baai/bge-large-en-v1.5 | 512 Token | 1024 | $0.204 / 百万输入 Token | 纯英文知识库的对照实验 |
BGE-M3 是多语言、多粒度 Embedding,适合拿来建立稳定基线。Qwen3 Embedding 的 AI Search 输入上限更高,面对较长中文段落时不容易因为模型上限被截断。两者当前价格相同,所以第一轮选择不必靠费用决定,可以直接比较自己的中文评测结果。
输入上限高不等于 Chunk 应该切到 8192 Token。过大的 Chunk 会把多个主题压进同一个向量,检索结果看似包含答案,实际却夹杂大量无关内容。员工制度、技术文章和 FAQ 仍可以从 400 到 700 Token 开始,只把更长上限当作处理完整函数、表格说明或特殊长段落时的余量。
对于本课程的中文技术知识库,我会先用 @cf/qwen/qwen3-embedding-0.6b 创建 v1,再用 BGE-M3 建立一个对照实例。真正决定结果的是 Recall@5、Recall@20 和 MRR:正确文章有没有进入前 5、前 20,以及第一次出现排在第几名。
5. Embedding 的价格
Embedding 费用分为索引和查询两部分。假设知识库切块后共有 1000 万 Token,使用每百万 Token 0.012 美元的模型,首次索引费用为:
每月有 10 万次查询,每个问题平均 40 Token,查询 Embedding 费用为:
这说明 Embedding 单价通常不是账单的大头。更值得关注的是更换模型需要全量重建索引,以及模型选错后造成的召回损失。索引便宜,并不意味着可以不做版本管理。
6. 查询改写模型
查询改写解决的是对话上下文问题。用户第一次问「年假怎样审批」时,问题已经完整,AI Search 会直接使用原文。第二次只问「那两天以上呢」,系统才需要结合历史消息,把它改写为「连续两天及以上的年假需要哪些人审批」。
开启后,AI Search 会把对话历史、最新问题和改写 Prompt 交给当前配置的 LLM,再对改写结果计算 Embedding。这会增加一次模型调用和一段网络延迟。
它适合多轮问答、代词较多的客服对话和口语化搜索,不适合错误码、函数名或已经完整的单轮问题。ERR_AUTH_1042 如果被模型改写成「认证错误如何解决」,反而可能丢掉最重要的精确关键词。
评测时要记录改写前后的文本,并检查版本号、否定词、数量和时间条件是否保留。只有启用后提高了多轮问题的 Recall@K,同时没有破坏精确查询,才应该留在生产配置中。
7. Reranker 模型
Embedding 检索会分别计算问题与文档的向量,再比较距离。Reranker 则把问题和候选 Chunk 放在一起阅读,直接判断这段资料是否回答了问题。它的计算更细,但不能扫描整个知识库,所以必须放在初步召回之后。
AI Search 当前生产列表中的 Reranker 是 @cf/baai/bge-reranker-base,输入上限为 512 Token,价格为每百万输入 Token 0.003 美元。它更适合下面这种情况:正确文档已经进入前 20,但经常排不到前 5。正确文档完全没有被 Embedding 或关键词检索召回时,开启重排没有帮助。
假设每月 10 万次查询,每次交给 Reranker 8 个候选,每个候选连同问题平均按 400 Token 估算,费用约为:
直接费用并不高,真正的代价通常是新增的 P95 延迟。我们应比较重排前后的 MRR、Top-1 命中率和 P95,而不是只看最终回答似乎更流畅。
8. 生成模型
生成模型负责阅读最终 Chunk、遵守 System Prompt、组织中文回答并标注引用。它不负责修复召回,因此评测时应把检索结果固定下来,再比较不同生成模型。否则模型 A 与模型 B 看到的资料不同,结果没有可比性。
下面选择几种 AI Search 当前支持的 Workers AI 模型进行对照:
| 模型 | 上下文窗口 | 输入价格 | 输出价格 | 适用范围 |
|---|---|---|---|---|
@cf/qwen/qwen3-30b-a3b-fp8 | 32K | $0.051 / M | $0.335 / M | 中文问答、普通技术资料、成本敏感场景 |
@cf/zai-org/glm-4.7-flash | 131K | $0.060 / M | $0.400 / M | 中文长上下文、多份资料综合,可作为 Qwen 的对照 |
@cf/meta/llama-4-scout-17b-16e-instruct | 131K | $0.270 / M | $0.850 / M | 中英文混合、需要更长上下文的应用 |
@cf/meta/llama-3.3-70b-instruct-fp8-fast | 24K | $0.293 / M | $2.253 / M | 复杂指令的质量对照,简单 FAQ 通常不必承担这档费用 |
表中的适用范围是建立评测候选的依据,不是效果排名。上下文窗口、参数量和价格都不能直接证明某个模型更适合自己的资料。中文表达自然度、引用准确率、拒答能力和复杂条件覆盖率仍要用同一批问题测试。
对员工制度助手,可以先用 Qwen3 30B 建立成本基线。如果资料经常跨越多份长文档,增加 GLM 4.7 Flash 作为对照;只有高风险问题在基线模型上持续出现指令遵循或复杂条件遗漏,再测试更高价模型。
AI Search 也支持通过 AI Gateway 使用 OpenAI、Anthropic、Google 等提供商。第三方模型费用由对应提供商决定,还要考虑数据合规、跨服务延迟和故障边界。外部模型更适合作为明确质量目标下的升级方案,而不是创建实例时顺手打开的默认项。
9. 生成费用怎样估算
还是以每月 10 万次查询为例。假设每次生成读取 2000 Token,输出 300 Token,使用 Qwen3 30B:
模型生成合计约 20.25 美元,明显高于前面的查询 Embedding 与 Reranker。这也是为什么 max_num_results、Chunk Size 和回答长度会直接影响账单。
如果只有 30% 的问题属于需要改写的多轮追问,就只为这 3 万次请求增加改写成本。不要为了代码统一,让另外 70% 已经完整的问题也多调用一次 LLM。
10. 三套起步方案
中文技术博客可以从 Qwen3 Embedding、混合检索和 Qwen3 30B 开始。第一版先关闭查询改写与 Reranker,用评测集观察正确文档是否进入前 20;如果召回正常但排序不稳,再开启 BGE Reranker。
企业制度与客服知识库更看重拒答和条件完整性。可以使用 Qwen3 Embedding、混合检索、Metadata Filter 和 BGE Reranker,生成阶段让 Qwen3 30B 与 GLM 4.7 Flash 做对照。权限过滤必须发生在召回以前,不能寄希望于更强的生成模型主动忽略无权资料。
中英文混合的长文档库可以比较 BGE-M3 与 Qwen3 Embedding,生成模型加入 Llama 4 Scout。即使模型拥有 131K 上下文,也不要把整个手册全部塞进去;长上下文是处理必要证据的余量,不是跳过检索质量的理由。
这三套方案都只是合理起点。公开课程问答、私密记忆搜索和企业合规助手的错误成本完全不同,不应该共享同一份“最佳模型配置”。
11. 用评测决定效果
模型选型至少要准备 50 到 200 个真实问题,并标出期望来源、不能出现的来源和是否应该拒答。Embedding 比较 Recall@5、Recall@20 和 MRR;Reranker 比较 Top-1、MRR 与新增 P95;生成模型比较 Groundedness、引用准确率、条件覆盖率、拒答准确率和单次平均成本。
比较 Embedding 时,需要建立两个索引配置相同、只有模型不同的实例。比较 Reranker 时固定召回候选,比较生成模型时固定最终 Chunk。一次只改变一个变量,才能知道效果变化来自哪里。
评测结果可以保存成下面的结构:
01interface ModelEvaluation {02strategyVersion: string03embeddingModel: string04rerankerModel: string | null05generationModel: string06recallAt5: number07recallAt20: number08mrr: number09groundedness: number10citationAccuracy: number11abstentionAccuracy: number12p95LatencyMs: number13averageCostUsd: number14}
模型名字只是配置,评测结果才是技术选型依据。面试中如果被问到为什么选择某个模型,回答自己的数据规模、指标变化、延迟和单次成本,会比复述排行榜更有说服力。
12. AI Gateway 的边界
每个 AI Search 实例都会连接一个 AI Gateway,Embedding、查询改写、重排和生成调用都会经过它。我们可以在 Gateway 中观察请求数、Token、费用、延迟、错误和实际改写结果,也可以配置模型重试与回退。
不要在这个 Gateway 上直接开启通用响应缓存或粗粒度限流。缓存可能把旧 Embedding 返回给新的文本,悄悄破坏向量索引;限流则可能中断批量索引任务。搜索结果缓存应使用 AI Search 自己的 Similarity Cache,模型调用限制应结合索引与查询分别设计。AI Gateway 配置说明 对这两个风险有明确提醒。
13. 总结
AI Search 的模型选型包含四个不同问题:Embedding 决定能否召回,查询改写处理多轮指代,Reranker 改善候选排序,生成模型负责依据证据回答。对中文技术知识库,可以先使用 Qwen3 Embedding 与 Qwen3 30B 建立低成本基线,再分别用 BGE-M3、BGE Reranker 和 GLM 4.7 Flash 做单变量对照。
价格表只能告诉我们调用成本,不能证明效果。最终选择应同时满足检索指标、生成质量、P95 延迟和预算,并保留模型版本与评测记录。下一篇会使用这套起步配置创建 AI Search 实例,把模型选择真正落到索引和 Worker Binding 中。