跳转到内容
搜索文档

R2

最后更新 查看 MarkdownAgent 设置

你可以将 Cloudflare R2 bucket 连接为 AI Search 实例的数据源。AI Search 会自动为存储在 bucket 中的文件建立索引。

快速入门

你可以在通过仪表板REST APIWrangler 创建新实例时连接 R2 bucket。R2 是可选数据源,可与内置存储一起添加。

如果此前从未创建过基于 R2 的实例,建议使用仪表板或 Wrangler CLI,它们会自动为你创建并注册服务 API 令牌。如果使用 REST API 或 Workers 绑定,则需要创建服务 API 令牌,并在创建请求中传入 token_id。设置说明请参阅 Service API token

开始前,请配置一个包含数据的 R2 bucket。不受支持或超出大小限制的文件将在索引期间被跳过,并记录为错误。

路径过滤

你可以通过为对象路径定义包含和排除规则,控制哪些文件被索引。使用此功能可将索引限制为特定文件夹,或排除你不希望可搜索的文件。

例如,仅索引文档同时排除草稿:

  • Include: /docs/**
  • Exclude: /docs/drafts/**

有关模式语法、过滤行为及更多示例,请参阅 Path filtering

有关支持的文件类型和大小限制,请参阅 Data source

自定义元数据

你可以为 R2 对象附加自定义元数据,用于过滤搜索结果。AI Search 从 S3 兼容的自定义标头(x-amz-meta-*)读取元数据。

在提取元数据之前,必须在 AI Search 配置中定义架构

上传时设置元数据

使用 R2 Workers 绑定 上传对象时,使用 customMetadata 选项:

await env.MY_BUCKET.put("docs/document.pdf", fileContent, {
	customMetadata: {
		category: "documentation",
		version: "2.5",
		is_public: "true",
	},
});

使用 AWS SDK for JavaScriptMetadata 选项:

import { S3Client, PutObjectCommand } from "@aws-sdk/client-s3";

const client = new S3Client({
	region: "auto",
	endpoint: `https://${accountId}.r2.cloudflarestorage.com`,
	credentials: {
		accessKeyId: R2_ACCESS_KEY_ID,
		secretAccessKey: R2_SECRET_ACCESS_KEY,
	},
});

await client.send(
	new PutObjectCommand({
		Bucket: "your-bucket",
		Key: "docs/document.pdf",
		Body: fileContent,
		Metadata: {
			category: "documentation",
			version: "2.5",
			is_public: "true",
		},
	}),
);

使用 Wrangler--header 标志设置 x-amz-meta-* 标头:

wrangler r2 object put your-bucket/docs/document.pdf \
  --file=./document.pdf \
  --header="x-amz-meta-category:documentation" \
  --header="x-amz-meta-version:2.5" \
  --header="x-amz-meta-is_public:true"

元数据提取工作原理

在索引期间从 R2 获取文件时:

  1. 从对象读取所有 x-amz-meta-* 标头。
  2. 剥离 x-amz-meta- 前缀(例如,x-amz-meta-category 变为 category)。
  3. 将字段名与你的架构匹配(不区分大小写)。
  4. 将值转换为配置的数据类型。
  5. 无效值(例如,对 number 类型使用非数字字符串)会被静默忽略。

Unicode 支持

元数据值通过 MIME-Word 编码(RFC 2047)支持 Unicode 字符。大多数 S3 兼容工具会自动处理此编码。

这篇文档对您有帮助吗?