AI Search 是一个官方原生插件,它会把已发布的内容索引到 Cloudflare AI Search 实例中,并为站点提供搜索结果。内容发生变化时,它会保持索引同步更新,并且可以在 Cloudflare Workers 和 Node.js 上运行。
安装
从 npm 安装该包:
pnpm add @emdash-cms/plugin-ai-search
在 astro.config.mjs 的 plugins 中添加 aiSearch():
import { defineConfig } from "astro/config";
import emdash from "emdash/astro";
import { aiSearch } from "@emdash-cms/plugin-ai-search";
export default defineConfig({
integrations: [
emdash({
plugins: [aiSearch()],
}),
],
});
然后通过 Workers 绑定或 API 令牌将插件连接到 AI Search。如果站点同时配置了两者,插件会使用绑定。
使用 Workers 绑定连接
在 Cloudflare Workers 上,向 wrangler.jsonc 添加一个 AI Search 命名空间绑定:
{
"ai_search_namespaces": [{ "binding": "AI_SEARCH", "namespace": "default" }],
}
使用 API 令牌连接
在任何平台上,插件都可以通过 Cloudflare REST API 访问 AI Search。这需要你的 Cloudflare 账户 ID,以及一个拥有 AI Search Edit 和 AI Search Run 账户权限的 API 令牌。请在 Cloudflare 控制台的 Manage account > Account API tokens 下创建账户 API 令牌。与用户令牌不同,即使创建者离开该账户,账户令牌依然有效。拥有相同权限的用户令牌同样可用。
将凭据设置为环境变量:
EMDASH_AI_SEARCH_ACCOUNT_ID=your-account-id
EMDASH_AI_SEARCH_API_TOKEN=your-api-token
你也可以在管理后台的插件设置页面中输入它们。EmDash 会加密存储该令牌,因此在那里保存令牌需要设置 EMDASH_ENCRYPTION_KEY;请参阅 Secrets。环境变量的优先级高于在管理后台中保存的值,管理后台只会显示该变量已设置,而不会显示它的值。
插件使用账户的 default 命名空间。若要使用其他命名空间,请设置 EMDASH_AI_SEARCH_NAMESPACE。请在构建索引之前选定命名空间,因为插件会把它的实例保存在该命名空间中。如果之后再更改,设置页面会提示实例缺失。请选择 Edit setup 并完成设置,以创建实例并重建索引。在设置页面中更改账户时,会自动完成这一过程。
使用 API 令牌时,索引、管理后台以及每一次访客搜索都会发起 Cloudflare API 请求,而 Cloudflare 会将每个令牌的请求数限制为每 5 分钟 1,200 次。Workers 绑定不计入该限制,因此运行在 Workers 上的高流量站点应使用绑定。
为了不超出限制,索引最多只使用该限制的一半,因此构建索引大约需要每 7,000 条记录一小时。此外,每个 EmDash 进程允许每位访客每分钟搜索 30 次,按 IP 地址计数。位于反向代理之后的自托管站点必须配置 trustedProxyHeaders,搜索限制才会生效;没有可信的客户端 IP 时,搜索不受限制。
选项
| 选项 | 默认值 | 说明 |
|---|---|---|
binding | AI_SEARCH | wrangler.jsonc 中 ai_search_namespaces 绑定的名称。 |
instance | emdash | 插件在该命名空间内创建并拥有的 AI Search 实例。 |
环境变量
| 变量 | 说明 |
|---|---|
EMDASH_AI_SEARCH_ACCOUNT_ID | 用于 REST API 的 Cloudflare 账户 ID。 |
EMDASH_AI_SEARCH_API_TOKEN | 拥有 AI Search Edit 和 AI Search Run 权限的 Cloudflare API 令牌。 |
EMDASH_AI_SEARCH_NAMESPACE | 用于 REST API 的 AI Search 命名空间。默认为 default。 |
当 Workers 绑定可用时,插件会忽略这些变量。
为站点添加搜索
把 AiSearch 组件添加到布局中。它会渲染一个搜索按钮并打开搜索弹窗,也可以通过 Cmd/Ctrl+K 打开,因此每个页面只渲染一次:
---
import { AiSearch } from "@emdash-cms/plugin-ai-search/astro";
---
<AiSearch placeholder="Search content" />
构建索引
部署之后,在管理后台打开 AI Search。如果插件还无法访问 AI Search,该页面会要求你输入账户 ID 和 API 令牌。随后,设置向导会选择要索引的内容,为每个来源显示一个示例结果地址,并在你选择 Build index 时构建索引。构建一开始,搜索就可以使用,结果会随着文档被索引而陆续出现。之后的内容变更会自动更新索引。