端到端项目
项目三 Workers AI 与 Vectorize 知识助手
用双语 embeddings、可追溯 metadata、受保护索引入口和无上下文分支完成最小 RAG。
编辑与核验:橙宝书编辑团队 ·
PROJECT 03进阶约 70 分钟产出:带来源的最小 RAG
完成标准
/index 与 /ask 分别需要 Secret,Vectorize metadata 可追溯原文;查询只传 embedding.data[0],空命中返回 404 no_context,不让模型无依据回答。
详细说明
管理员携带 ingest secret 调用 Worker 的索引入口;Worker 用 Workers AI 的 bge-m3 生成多语言向量,并把向量、原文和来源写入 Vectorize。用户提问时 Worker 生成查询向量,只把 data 数组的第一条向量传给 Vectorize,取回最多三条包含 metadata 的结果;无结果直接返回 no_context,有结果才组成受限 prompt 调用生成模型并返回答案与来源。
- 01索引
Secret 保护的文档写入入口。
- 02向量化
bge-m3 生成中英文 embeddings。
- 03检索
Vectorize 返回原文与来源 metadata。
- 04回答
只有命中上下文才调用生成模型。
文件与资源
README.md
wrangler.jsonc
index.mjs
源码位于 examples/ai-knowledge-assistant/。INGEST_KEY 与 QUERY_KEY 都是 Secret,不能进入 vars。
准备与验证
创建双语向量索引
pnpm wrangler vectorize create orange-book-knowledge --preset @cf/baai/bge-m3该命令创建远程资源,会消耗账号权限;执行前确认目标账号。--preset 让 Wrangler 根据当前 embeddings 模型配置维度与 metric。
设置 Secret 并启动
cp examples/ai-knowledge-assistant/.dev.vars.example examples/ai-knowledge-assistant/.dev.vars
pnpm wrangler dev --config examples/ai-knowledge-assistant/wrangler.jsonc替换 .dev.vars 中两个占位值并且不要提交该文件。Workers AI 与 Vectorize 会使用远程服务额度,不属于完全离线预览;生产 Secret 需在确认目标账号后另行设置。
索引一条内容
curl -i http://127.0.0.1:8787/index \
-H 'content-type: application/json' \
-H 'x-ingest-key: <your-local-secret>' \
--data '{"documents":[{"id":"tls-strict","text":"新站优先使用 Full strict。","source":"/zh/docs/fundamentals/tls-modes"}]}'返回 202 indexing 后等待几秒再查询,因为 Vectorize upsert 异步可见。
提问并检查来源
curl -i http://127.0.0.1:8787/ask \
-H 'content-type: application/json' \
-H 'x-query-key: <your-local-query-secret>' \
--data '{"question":"新站应该选择什么 TLS 模式?"}'检查 sources 来自已索引 metadata;删除索引内容后应走 no_context,而不是编造答案。
回滚与安全边界
- 首先撤销公开路由或回滚 Worker 版本;索引数据单独备份/重建。
- 轮换泄露的
INGEST_KEY或QUERY_KEY;仅删除代码无效。 QUERY_KEY只是服务端教学保护,不能嵌入浏览器;公开 UI 还需要用户认证、滥用防护和成本限制。- 模型名是时效配置,发布前检查模型目录、定价和数据处理政策。
- 检索内容按不可信参考数据进入 Prompt;本例只生成文本,不执行模型或文档提出的动作。
官方来源
这篇内容帮你完成目标了吗?
内测反馈只在当前浏览器生成,不会自动上传。