AI 聊天机器人
概述
RAG 工作器是一款专为检索增强生成(RAG)任务设计的工具,旨在通过相关文档检索和摘要技术提升 AI 聊天机器人的功能。该工具集成于 Hugo 网站,并通过 Cloudflare Workers 实现无服务器部署。
主要特性
- 多语言支持:支持中英文内容检索与处理
- 嵌入模型可选:可使用 Qwen 或 Gemini 嵌入模型进行高效文档向量化
- 高效存储与检索:利用 Cloudflare Vectorize 存储嵌入并实现快速检索
- 角色一致性与自定义提示词:根据文档上下文和用户历史构建自定义提示词
- 目录递归导入:可批量处理 Markdown 文件(自动过滤 Hugo draft,支持 cascade 继承)
架构与组件
组件 | 说明 |
---|---|
worker.ts | 处理 HTTP 请求、路由,并构建提示词 |
retriever.ts | 向量相似度检索文档,支持语言过滤和回退 |
prompt.ts | 根据检索结果、语言和历史对话生成 Prompt |
fast-ingest.ts | 批量导入内容,并行处理优化吞吐量 |
ingest-directory | 目录递归导入脚本(推荐主入口) |
其他脚本 | manual-ingest 、generate-titles 、full-reindex 等 |
使用指南
环境准备
- Cloudflare 账户 + 已安装
wrangler
- 创建 Vectorize 索引并在
wrangler.toml
绑定:
[[vectorize]]
binding = "VECTORIZE"
index_name = "website-rag"
- 配置 Secrets / Vars:
wrangler secret put ADMIN_TOKEN # 登录 Vectorize
wrangler secret put GOOGLE_API_KEY # 若 PROVIDER=gemini
wrangler secret put QWEN_API_KEY # 若 PROVIDER=qwen
# (可选) wrangler secret put QWEN_BASE
# (可选) wrangler secret put QWEN_EMBED_MODEL
- wrangler.toml 中还需配置:PROVIDER、EMBED_DIM、LLM_MODEL
本地开发与部署
# 安装依赖
npm install
# 启动开发模式
cd tools/rag-worker
npm run dev
# 部署到 Cloudflare
cd tools/rag-worker
npm run deploy
内容导入
# 高速批量导入(推荐)
cd tools/rag-worker
npm run fast-ingest
# 目录递归导入(支持多目录、自动过滤 Hugo draft)
npm run ingest-directory -- ../../content/zh/book
npm run ingest-directory -- ../../content/zh/book ../../content/en/docs
# 手动指定文件导入
npm run manual-ingest
# 生成双语标题对照
npm run generate-titles
# 重新索引所有条目
npm run full-reindex
测试
cd tools/rag-worker
npm test
npm run test:e2e
网站 RAG 聊天机器人
使用 Cloudflare Workers 构建可嵌入网站的聊天机器人,数据源为 website/content/ 中的 Markdown 内容。
工作流程
Markdown -> 纯文本 -> 分片 -> 嵌入向量 -> 写入 Vectorize
/chat -> 查询 Top-K -> 拼接 Prompt -> 调用 LLM -> 生成回答(含 source/url)
支持将 widget.js 嵌入到 Hugo 网站前端,轻松部署交互式 RAG Chatbot。
文档目录
- docs/README.md:文档索引
- docs/directory-recursive-processing.md:目录递归导入功能说明
- 其他技术文档见 docs/ 目录
🚀 新增功能:目录递归处理(智能导入)
# 安装依赖
npm install
# 设置环境变量
export ADMIN_TOKEN=your-token
export WORKER_URL=<https://your-worker.workers.dev>
export QWEN_API_KEY=your-key # 或 GOOGLE_API_KEY
# 一键导入整个目录
npm run ingest-directory -- ../../content/zh/book
# 同时处理多个目录
npm run ingest-directory -- ../../content/zh/book ../../content/en/docs
✨ 自动排除 Hugo draft,支持 cascade 继承。