技术栈选择与架构设计

良好的架构设计是构建高效、可扩展的 RAG 系统的基础。本章将深入探讨我们为聊天机器人选择的技术栈,包括 Cloudflare Workers、Vectorize 向量数据库以及千问大语言模型等核心组件。我们将详细解析整体架构的各个层次,介绍 Cloudflare 提供的 RAG 参考架构,并分析 Vectorize 在系统中的关键作用。通过理解这些设计决策,您将能够构建出既满足当前需求又具备未来扩展性的 AI 应用。

整体架构概览

我们的 RAG 聊天机器人采用了现代化的无服务器架构,整个系统可以分为数据源层、数据处理层、存储层、计算层、AI 服务层和展示层等核心层次。整个系统的数据流程可以分为数据摄取阶段(离线)和对话交互阶段(实时)两个主要部分。

下图展示了 RAG 聊天机器人的架构。

RAG 聊天机器人架构
RAG 聊天机器人架构

在数据摄取阶段,系统会从 Hugo 网站的 content/ 目录收集 Markdown 文档,使用 fast-ingest.ts 脚本解析并分块文档内容,通过千问或 Gemini API 生成文档嵌入向量,最后将向量和元数据存储到 Cloudflare Vectorize 数据库中。

在对话交互阶段,用户通过网站上的聊天 Widget 发送问题,Cloudflare Worker 接收请求并向量化用户查询,在 Vectorize 中检索最相关的文档片段,构建包含上下文的提示词,调用大语言模型生成回答,最后返回格式化的响应给用户。

Cloudflare RAG 参考架构

Cloudflare 提供了一套 RAG 参考架构,展示了如何在无服务器环境中构建高效、可扩展的 RAG 系统。该架构充分利用了 Cloudflare 的边缘计算平台和相关服务。

在知识库构建阶段,系统会自动从 Hugo 网站的 content/ 目录收集 Markdown 文档,通过本地或云端脚本(如 fast-ingest.ts)进行内容解析和分块,然后调用千问或 Gemini 等嵌入模型生成文档向量,最终将向量及其元数据直接存储到 Cloudflare Vectorize 向量数据库中。整个流程无需消息队列或关系型数据库,简化了架构,提升了处理效率。

在知识查询阶段,用户通过网站聊天 Widget 提交问题,Cloudflare Worker 作为 API 端点接收请求,首先将用户查询转化为向量表示,然后在 Vectorize 中检索最相关的文档片段。检索结果与原始查询一同构建提示词,调用大语言模型(如千问或 Gemini)生成最终回答,并将响应返回给用户。

该架构的主要优势包括:充分利用 Cloudflare Workers 的无服务器特性,自动扩缩容,无需服务器运维;依托全球 200 多个数据中心的边缘计算能力,提供低延迟响应;架构简洁,组件解耦,便于扩展和维护;按使用量计费,具备良好的成本效益。

通过采用这种架构,开发者可以快速构建和部署高性能的 RAG 应用,充分发挥 Cloudflare 全球网络和 Vectorize 服务的优势。

核心技术栈介绍

在后端架构方面,我们选择了 Cloudflare Workers 作为边缘计算平台,提供全球分布的低延迟响应,同时使用 Cloudflare Vectorize 作为向量数据库,存储文档嵌入和处理相似度搜索,并采用 TypeScript 作为开发语言以确保类型安全。

AI 模型服务方面,系统支持千问(Qwen)和 Google 的 Gemini 两种选择。千问是阿里云提供的大语言模型和嵌入模型,特别适合中文内容处理,而 Gemini 是 Google 提供的多模态 AI 模型,适合处理多种类型的内容。嵌入模型可以选择千问的 text-embedding-v4 或 Gemini 的 text-embedding-004。

提示
对于中国大陆用户,建议使用千问模型,因为 Google 的服务在中国被封禁,而且千问模型在中文处理上表现更佳。千问的嵌入模型(如 text-embedding-v4)和大语言模型(如 qwen-turbo-latest)都提供了高质量的中文支持,且更具成本优势(只有 Gemini API 约一半的价格)。

前端组件方面,我们使用 Widget.js 作为轻量级聊天界面,支持 Markdown 渲染,同时采用 Hugo 作为静态网站生成器进行内容管理,并实现响应式设计以支持桌面和移动设备。

在开发工具方面,使用 Wrangler 作为 Cloudflare Workers 的开发和部署工具,Node.js 作为本地开发和数据处理环境,并采用 npm 或 pnpm 作为包管理器。

Cloudflare Vectorize 架构细节

Vectorize 在整体架构中扮演着关键角色,它连接了数据处理和实时查询两个阶段:

数据流设计

  1. 向量生成流程

    Markdown 文档 → 文本分块 → 嵌入模型 → 向量表示 → Vectorize 存储
    
  2. 向量查询流程

    用户查询 → 嵌入模型 → 查询向量 → Vectorize 检索 → 相关文档
    

数据模型设计

Vectorize 中存储的向量包含以下关键组成部分:

  1. 向量 ID:唯一标识符,通常基于文档路径和块索引生成
  2. 向量值:由嵌入模型生成的数值数组
  3. 元数据:与向量关联的描述性信息
  4. 命名空间:可选的向量分组标识

示例向量结构:

{
  id: "a1b2c3d4-0",  // 基于文档路径和块索引生成的唯一 ID
  values: [0.12, 0.45, 0.67, /* ... 1024 个维度 ... */],  // 1024 维向量
  metadata: {
    url: "https://jimmysong.io/blog/launch-ai-resource-page",           // 文档 URL
    title: "RAG 聊天机器人指南",          // 文档标题
    sourcePath: "content/zh/blog/launch-ai-resource-page/index.md",  // 源文件路径
    chunkIndex: 0,                      // 块索引
    language: "zh",                     // 语言
    tags: ["AI", "RAG", "Cloudflare"],  // 标签
    createdAt: "2025-07-31T10:00:00Z",  // 创建时间
    wordCount: 256                      // 字数统计
  },
  namespace: "zh"  // 命名空间(可选)
}

查询优化策略

为了提升查询性能,Vectorize 采用了多项优化措施。首先,系统会自动优化向量索引结构,确保在大规模数据集下依然能够高效检索。默认采用近似搜索算法,在保证检索准确性的同时显著提升响应速度。对于常用的过滤字段,Vectorize 支持元数据索引,便于实现基于标签、语言等属性的高效筛选。此外,通过命名空间机制,可以实现数据的逻辑隔离和针对性查询优化,满足多租户或多语言场景下的需求。

技术栈选择的考量

本系统之所以采用当前的技术栈,主要基于以下几个方面的综合考量:

  • 首先,Cloudflare Workers 提供了全球 200 多个数据中心的边缘计算能力,能够实现平均低于 50ms 的响应延迟,并支持自动扩缩容,极大简化了运维工作。
  • 按请求计费模式和 Vectorize 的免费额度,使得整体方案具备良好的成本效益,尤其适合个人博客和小型项目的快速上线。
  • 在开发体验方面,TypeScript 的类型安全保障和支持热重载的开发环境,使得开发流程更加高效和可靠。结合模块化架构设计,系统能够灵活集成多种 AI 服务商,并原生支持中英文等多语言内容,具备良好的可扩展性。

Vectorize 的独特优势

在众多向量数据库方案中,Cloudflare Vectorize 具备无缝集成 Cloudflare Workers 的能力,配置简单,易于上手。依托 Cloudflare 全球网络,能够为用户提供低延迟的向量检索服务。后台自动优化索引,支持单索引多达 500 万个向量,满足大规模应用需求。计费方式透明,按查询和存储维度计费,无隐藏费用。丰富的元数据支持和命名空间机制,进一步提升了数据管理和查询的灵活性。这些特性共同构成了 Vectorize 在 RAG 应用场景下的核心竞争力,使其成为快速部署和扩展 AI 应用的理想选择。

文章导航

独立页面

这是书籍中的独立页面。

书籍首页