一个运行在 Cloudflare 边缘网络的智能对话式 AI 助手,支持对话、任务管理、网络搜索、深度研究和 RAG 文档问答。零服务器费用,无须自建 LLM API。
在线体验: https://ai-agent-worker.irashenhello.workers.dev
- 基于 Llama 3.1 8B(Cloudflare Workers AI 免费额度),流式输出,响应快
- 对话历史自动保存,多会话管理,每个会话自动生成标题
- 支持设置 AI 助手昵称和用户名,个性化体验
- 完全不用表单,纯对话管理任务:「帮我记一下买咖啡」 「删除那个任务」 「标记买咖啡完成」
- LLM 理解意图,自动解析并操作 D1 数据库
- 接入 Serper.dev(Google 搜索 API),直接说「搜索 xxx」即可
- 返回带标题、摘要和链接的结构化结果
- 说「研究一下 xxx」,自动拆解为多个搜索词,并行搜索,整合结果生成结构化报告
- 上传 PDF、Word、TXT、Markdown 文件,自动解析、分块、向量化(768 维 embedding)
- 基于 Qdrant Cloud 向量数据库做语义检索,相关内容注入 LLM 上下文
┌─────────────────────────┐
│ 用户浏览器(纯 JS) │
└─────────────┬───────────┘
│ HTTPS
┌─────────────▼───────────┐
│ Cloudflare Worker │
│ (Hono Router, 边缘) │
│ │
│ ┌─────────────────┐ │
│ │ 意图检测路由 │ │
│ │ task_agent │ │
│ │ search_agent │ │
│ │ research_agent │ │
│ │ user_info_agent │ │
│ └────────┬─────────┘ │
│ │ │
│ ┌────────▼─────────┐ │
│ │ Workers AI │ │
│ │ Llama 3.1 8B │ │
│ └─────────────────┘ │
└───────────┬─────────────┘
│
┌─────────────────────┼─────────────────────┐
│ │ │
┌─────────▼─────────┐ ┌────────▼──────────┐ ┌────────▼──────────┐
│ Cloudflare D1 │ │ Qdrant Cloud │ │ Serper.dev │
│ (SQLite, 用户/ │ │ (向量数据库, │ │ (Google 搜索) │
│ 会话/任务/消息) │ │ RAG 索引) │ │ │
└───────────────────┘ └───────────────────┘ └───────────────────┘
| 层级 | 技术选型 | 说明 |
|---|---|---|
| 运行时 | Cloudflare Worker | 边缘部署,响应快,零服务器成本 |
| AI 模型 | Workers AI @cf/meta/llama-3.1-8b-instruct |
Cloudflare 内置,免费额度 |
| Embedding | Workers AI @cf/baai/bge-base-en-v1.5 |
768 维中文向量 |
| 关系数据库 | Cloudflare D1(SQLite) | 用户、会话、任务、消息、文件元数据 |
| 向量数据库 | Qdrant Cloud | RAG 向量检索,支持语义搜索 |
| 搜索 | Serper.dev | Google 搜索 API,支持中文 |
| 框架 | Hono | 轻量、高性能,兼容 Workers API |
| ORM | Drizzle ORM | 类型安全,迁移管理 |
| 前端 | 纯 HTML + JS(无构建工具) | 内联到 Worker,零额外资源 |
users ──────< sessions ──────< messages
│ (对话历史)
│
├────< tasks (任务)
│
└────< files (上传文件 + 元数据)
│
└─ 向量索引存储在 Qdrant Cloud
ai-agent-worker/
├── public/
│ ├── index.html # 完整前端(HTML + 内联 CSS + 内联 JS)
│ └── app.js # 前端 JS(prebuild 后内联到 index.html)
├── src/
│ ├── index.ts # Hono 入口 + 所有 API 路由 + 内联 HTML 导出
│ ├── env.d.ts # TypeScript 模块声明
│ ├── generated/
│ │ └── index-html.ts # prebuild 生成:HTML 字符串常量
│ ├── agents/
│ │ └── agent.ts # 核心 Agent:意图检测 + 5 个子代理
│ ├── lib/
│ │ ├── db.ts # Drizzle D1 连接封装
│ │ ├── llm.ts # Workers AI 对话 + embedding 封装
│ │ ├── search.ts # Serper.dev 搜索封装
│ │ ├── vector.ts # Qdrant 向量插入 / 搜索 / 删除
│ │ └── file.ts # 文件解析 + 语义分块(512 字 / 64 字重叠)
│ └── schema/
│ ├── index.ts # Schema 导出
│ └── tables.ts # Drizzle 表定义(users / sessions / messages / tasks / files)
├── scripts/
│ └── prebuild.cjs # 构建前脚本:内联 JS 到 HTML,生成 index-html.ts
├── drizzle/
│ └── 0000_init.sql # D1 数据库初始化 SQL
├── wrangler.toml # Worker 配置(D1 绑定、AI 绑定、环境变量)
├── package.json
└── tsconfig.json
- Cloudflare 账号
- Qdrant Cloud 免费集群(或自托管)
- Serper.dev API Key(免费注册有额度)
# 1. 克隆
git clone https://github.com/irashen6/cloudflare-ai-task-agent.git
cd cloudflare-ai-task-agent
# 2. 安装依赖
npm install
# 3. 配置 wrangler.toml
# 填入你的 account_id、database_id、QDRANT_HOST、QDRANT_API_KEY
# 4. 创建 D1 数据库(如还没有)
wrangler d1 create ai-agent-db
# 将返回的 database_id 填入 wrangler.toml 的 [[d1_databases]]
# 5. 推送数据库 schema
wrangler d1 execute ai-agent-db --remote --file=drizzle/0000_init.sql
# 6. 部署
npm run deploy # 等价于: node scripts/prebuild.cjs && wrangler deploy
# 7. 访问
# https://<your-worker>.workers.dev/npm install
npm run dev # 等价于: node scripts/prebuild.cjs && wrangler dev
# 访问 http://localhost:8787/注意需要创建d1数据库,步骤2安装依赖里的第四步,否则发任何消息都会报错 wrangler d1 execute ai-agent-db --local --file=drizzle/0000_init.sql
| 变量 | 说明 | 默认值 | 必需 |
|---|---|---|---|
LLM_MODEL |
Workers AI 模型路径 | @cf/meta/llama-3.1-8b-instruct |
否 |
SERPER_API_KEY |
Serper.dev API Key(Google 搜索) | — | 是 |
QDRANT_HOST |
Qdrant Cloud 集群地址 | — | 是 |
QDRANT_API_KEY |
Qdrant Cloud API Key | — | 是 |
所有 API 以 x-user-id 请求头识别用户(UUID,存储在浏览器 localStorage)。
| 端点 | 方法 | 说明 | 请求体 |
|---|---|---|---|
/api/chat |
POST | 对话(非流式,返回 JSON) | { message, sessionId? } |
/api/chat/stream |
POST | 对话(流式,SSE) | { message, sessionId? } |
/api/sessions |
GET | 会话列表 | — |
/api/tasks |
GET | 任务列表 | — |
/api/tasks |
POST | 创建任务 | { title } |
/api/tasks/:id |
PATCH | 更新任务状态 | { status } |
/api/tasks/:id |
DELETE | 删除任务 | — |
/api/files |
GET | 文件列表 | — |
/api/files |
POST | 上传文件(FormData) | file |
/api/files/:id |
DELETE | 删除文件及向量 | — |
/api/user |
GET | 获取用户信息 | — |
/api/user |
POST | 更新用户信息 | { name?, email?, aiNickname? } |
用户消息
│
▼
意图检测(LLM JSON 输出)
│
├─ task_management ──→ runTaskAgent
│ - 查看列表(关键词匹配)
│ - 创建/删除/完成(RAG 解析 JSON)
│
├─ web_search ──→ runSearchAgent → Serper.dev API
│
├─ research ──→ runResearchAgent
│ 1. LLM 拆解为 3-5 个搜索词
│ 2. 并行搜索
│ 3. 汇总结果生成结构化报告
│
├─ user_info ──→ runUserInfoAgent
│ - 首次使用:收集姓名+邮箱
│ - 正则 + LLM 双轨解析
│
└─ general ──→ askLLM
- 系统提示词注入用户信息、RAG 上下文、历史对话
- 返回回复字符串 → 存入 D1 → 返回前端
- 零成本 AI:使用 Cloudflare Workers AI 内置的 Llama 3.1 8B 模型,完全免费,无须 OpenAI / Claude API Key
- 边缘部署:Worker 运行在全球 300+ 个 PoP,就近接入,延迟低
- 完整 RAG 管线:文件上传 → 分块 → embedding → 向量索引 → 语义检索 → LLM 回答,全链路自托管
- 多代理架构:意图检测统一路由,各子代理职责单一,可独立扩展
- 零前端构建工具:纯 HTML/JS 内联到 Worker,二进制文件极小(< 300KB),无 CDN 依赖
- 会话记忆:D1 存储历史消息,每次对话注入最近 20 条上下文
- 无外部数据库依赖:用户数据、会话、任务全在 D1,向量在 Qdrant,无状态设计
MIT