跳转到内容
搜索文档

相似度缓存

最后更新 查看 MarkdownAgent 设置

AI Search 中的基于相似度的缓存,可让你为与先前请求相似的查询从 Cloudflare 缓存提供响应,而不是为每个请求创建新的、唯一的响应。通过复用含义相近问题的答案,可加快响应速度并降低成本。

工作原理

与基本缓存(每次请求都创建新响应)不同,使用基于相似度的缓存时,收到请求后会发生以下情况:

  1. AI Search 检查是否曾回答过相似的提示(基于你选择的阈值)。
  2. 若找到匹配,则立即返回缓存的响应。
  3. 若未找到匹配,则生成新响应并将其缓存。

要查看响应是否来自缓存,请检查 cf-aig-cache-status 标头:HIT 表示缓存命中,MISS 表示新生成。

使用相似度缓存时的注意事项

使用相似度缓存时请考虑以下行为:

  • 易失缓存:若两个相似请求同时到达,第一个可能来不及为第二个完成缓存,导致 MISS
  • 可配置时长:缓存响应根据实例的 cache_ttl 设置过期。默认值为 48 小时。
  • 数据依赖:缓存响应与特定文档 chunk 绑定。若这些 chunk 更改或被删除,缓存会清除以保持答案新鲜。

相似度匹配的工作原理

AI Search 的相似度缓存使用 MinHash 与 Locality-Sensitive Hashing (LSH) 来查找并复用措辞相似的提示的响应。

当新提示进入时,工作流程如下:

  1. 提示被拆分为重叠的小词块(称为 shingle),例如 "what's the" 或 "the weather"。
  2. 这些 shingle 通过 MinHash 转为“指纹”。两个提示重叠越多,其指纹越相似。
  3. 指纹放入 LSH 桶中,帮助 AI Search 快速找到相似提示,而无需逐一比较。
  4. 若同一桶中的过去提示足够相似(基于你配置的阈值),AI Search 会复用其缓存响应。

选择阈值

相似度阈值决定两个提示需要多接近才能复用缓存响应。你可以在实例级别设置阈值,或按请求覆盖。

阈值 API 值 说明 匹配示例
Exact super_strict_match 仅近乎相同的匹配 "What's the weather like today?" 匹配 "What is the weather like today?"
Strong close_enough(默认) 高语义相似度 "What's the weather like today?" 匹配 "How's the weather today?"
Broad flexible_friend 中等匹配,命中更多 "What's the weather like today?" 匹配 "Tell me today's weather"
Loose anything_goes 低相似度,最大复用 "What's the weather like today?" 匹配 "Give me the forecast"

设置缓存时长

创建或更新实例时设置 cache_ttl,以控制实例保留缓存响应的时长。允许的值包括:

时长 API 值
10 分钟 600
30 分钟 1800
1 小时 3600
2 小时 7200
6 小时 21600
12 小时 43200
24 小时 86400
48 小时 172800
72 小时 259200
6 天 518400

清除缓存响应

要立即清除实例的所有缓存响应,使用清除缓存操作:

curl -X POST "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/ai-search/instances/$INSTANCE_NAME/purge_cache" \
  -H "Authorization: Bearer $CLOUDFLARE_API_TOKEN"

清除缓存会轮换实例的内部缓存密钥,因此新查询不会复用先前的缓存响应。

你也可以从 Cloudflare 仪表板的实例设置页面清除缓存响应。

按请求缓存覆盖

你可以使用 ai_search_options 中的 cache 参数,按请求覆盖实例级缓存设置:

const instance = env.AI_SEARCH.get("my-instance");

const results = await instance.search({
	messages: [{ role: "user", content: "What is Cloudflare?" }],
	ai_search_options: {
		cache: {
			enabled: true,
			cache_threshold: "flexible_friend",
		},
	},
});

这篇文档对您有帮助吗?