基于Dify和Tablestore快速搭建RAG应用

企业私有知识问答系统常面临回答准确性不足的挑战。通过Dify集成阿里云表格存储(Tablestore)向量数据库构建RAG(检索增强生成)应用,可实现高精度知识检索和智能问答能力。

方案介绍

Tablestore作为高性能向量数据库,提供毫秒级查询响应,支持向量检索与全文检索混合的检索模式,单表可存储百亿级向量数据。Dify负责应用编排和用户交互界面,大幅简化RAG应用的构建和部署流程。

RAG应用通过以下核心流程实现智能问答:

  1. 知识向量化:Dify将企业文档自动切分为知识片段并转换为向量表示,统一存储到Tablestore向量数据库中。

  2. 相似度检索:当用户提问时,系统在Tablestore中快速检索与问题最相关的知识片段。

  3. 增强生成:将检索到的相关知识与用户问题组合,输入大语言模型生成准确且有依据的回答。

image

准备部署环境

创建Tablestore实例

Tablestore将作为RAG应用的向量数据库,用于存储文档的向量化表示并提供高效的相似度检索能力。

  1. 登录表格存储控制台,单击创建实例,选择VCU模式(原预留模式),单击前往开通

  2. 按照下方配置列表选择实例参数,其余配置项可保持默认设置。

    • 地域:选择实例所在地域,如 华东1(杭州)

    • 预留VCU:修改为0,表示不为实例预留计算资源。

    • 弹性能力:选择启用

    • 存储类型:选择高性能

  3. 依次单击立即购买 > 去支付 > 订购,完成实例创建。

创建ECS实例

ECS实例将作为Dify应用的运行环境,需要具备足够的计算资源来支持Docker容器集群的运行。

  1. 登录ECS控制台,单击创建实例

  2. 按照下方配置列表创建ECS实例,其余配置项可保持默认设置。

    • 付费类型:选择按量付费

    • 地域:选择实例所在地域,由于网络原因,本文使用的是中国香港地域。

    • 网络及可用区:选择默认的专有网络和可用区。

    • 实例:单击全部规格,搜索并选择 ecs.e-c1m2.large

      说明

      如果实例规格已售罄,请选择其它实例规格。

    • 镜像:选择公共镜像Alibaba Cloud Linux(Alibaba Cloud Linux 3.2104 LTS 64位)。

    • 系统盘:设置ESSD Entry的容量为 40 GiB。

    • 公网IP:勾选分配公网 IPv4 地址

    • 带宽计费模式:选择按使用流量,以节约成本。

    • 带宽峰值:选择5 Mbps或以上。

    • 安全组:选择已有安全组

    • 登录凭证:选择自定义密码,登录名选择root登录密码请自行设置并妥善保存。

部署和访问Dify

步骤一:安装Docker环境

Dify采用容器化部署方式,需要先在ECS实例上安装DockerDocker Compose来支持多服务容器编排。

  1. 安装dnf-plugins-core插件。

    dnf -y install dnf-plugins-core
  2. 配置Docker官方仓库源。

    dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
  3. 安装 Docker 引擎和 Docker Compose 插件。

    dnf -y install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
  4. 启动并设置Docker服务开机自启。

    systemctl enable --now docker

步骤二:部署Dify服务

接下来将获取Dify源码并配置环境变量,特别是配置Tablestore作为向量数据库的连接参数。

  1. 安装Git版本控制工具。

    yum -y install git
  2. 克隆Dify官方源码仓库。

    git clone https://github.com/langgenius/dify.git
  3. 进入Docker部署目录。

    cd dify/docker
  4. 复制环境配置文件模板。

    cp .env.example .env
  5. 编辑环境配置文件。

    vi .env

    按照以下配置项进行修改:

    配置项

    说明

    VECTOR_STORE

    向量数据库类型,设置为tablestore

    TABLESTORE_ENDPOINT

    重要

    新创建的表格存储实例默认关闭公网访问,如需使用公网访问地址,请前往表格存储控制台实例管理网络管理页签,在允许网络类型设置中勾选公网,并单击设置保存配置。

    前往表格存储控制台,在实例列表中单击实例别名进入实例管理页面,复制实例名称和实例访问地址。根据部署情况选择访问地址:

    • ECSTablestore在同一地域:可选择公网地址或者VPC地址。

    • ECSTablestore不在同一地域:必须使用公网地址。

    TABLESTORE_INSTANCE_NAME

    TABLESTORE_ACCESS_KEY_ID

    前往AccessKey管理页面创建云账号AccessKey,获取并保存ACCESS_KEY_IDACCESS_KEY_SECRET。

    TABLESTORE_ACCESS_KEY_SECRET

  6. 启动Dify容器集群。

    docker compose up -d

    启动成功后,将看到如下输出信息。

     ✔ Network docker_default             Created                                                                                                                                                            0.1s
     ✔ Network docker_ssrf_proxy_network  Created                                                                                                                                                            0.1s
     ✔ Container docker-sandbox-1         Started                                                                                                                                                            0.8s
     ✔ Container docker-redis-1           Started                                                                                                                                                            1.0s
     ✔ Container docker-ssrf_proxy-1      Started                                                                                                                                                            1.3s
     ✔ Container docker-web-1             Started                                                                                                                                                            1.0s
     ✔ Container docker-db-1              Started                                                                                                                                                            0.9s
     ✔ Container docker-plugin_daemon-1   Started                                                                                                                                                            2.4s
     ✔ Container docker-api-1             Started                                                                                                                                                            2.4s
     ✔ Container docker-worker-1          Started                                                                                                                                                            2.3s
     ✔ Container docker-nginx-1           Started                                                                                                                                                            3.8s

步骤三:配置安全组访问规则

为了能够通过公网访问Dify管理界面,需要在ECS安全组中开放相应的端口访问权限。

  1. 前往ECS控制台,在目标实例中单击网络与安全组 > 添加入方向规则

  2. 配置安全组规则:选择授权策略允许协议类型Web HTTP 流量访问,在访问目的(本实例)中输入Dify服务端口(默认80端口)并添加,如下图所示。

    image

  3. 单击确定,完成安全组访问规则配置。

步骤四:访问Dify管理界面

通过浏览器访问 http://server_ip,其中 server_ipECS实例的公网IP地址。首次访问将自动跳转到初始化页面,按照提示设置管理员账户,设置完成后系统将自动完成登录。

image

构建RAG应用并验证效果

步骤一:配置模型服务和API-KEY

RAG应用需要大语言模型来理解问题和生成回答,同时需要Embedding模型将文本转换为向量表示。

  1. 安装模型供应商并配置API Key。

    1. Dify首页单击用户头像,在下拉菜单中单击设置

    2. 在设置页面单击模型供应商,选择通义千问,单击安装

    3. 安装完成后,在待配置的模型列表中单击设置

      image

    4. 根据页面提示获取阿里云百炼的API Key并完成配置,然后单击保存

      image

  2. 配置系统默认模型。

    1. 在模型供应商页面单击模型列表右侧的系统模型设置

    2. 根据以下推荐配置设置各类模型,也可根据实际需求选择其他模型。

      • 系统推理模型:选择qwen3-max-preview

      • Embedding模型:选择text-embedding-v4

      • Rerank模型:选择gte-rerank-v2

      • 语音转文本模型:选择paraformer-realtime-v2

      • 文本转语音模型:选择tts-1

模型配置完成后,单击ESC返回Dify首页。

步骤二:创建知识库

知识库是RAG应用的核心组件,用于存储企业文档并提供智能检索能力。文档将自动切分、向量化并存储到Tablestore中。

  1. Dify首页单击知识库,然后单击创建知识库

    image

  2. 单击创建一个空知识库。在弹出的创建空知识库对话框中,输入知识库名称(例如Tablestore),然后单击创建,完成知识库创建。

    image

  3. 在知识库详情页面单击添加文件,选择示例文件百炼系列手机产品介绍.docx进行上传,单击下一步进入文本分段与清洗设置。

    image

  4. 配置知识处理参数:选择索引方式高质量检索设置混合检索。参数配置完成后单击保存并处理,可单击前往文档查看上传文档的处理状态。

    image

    可以前往表格存储控制台查看已保存到向量数据库的知识数据。

    image

步骤三:创建智能问答助手并验证RAG效果

最后创建一个聊天助手应用,通过对比加入知识库前后的回答效果,验证RAG应用的检索增强能力。

  1. Dify首页单击工作室,然后单击创建空白应用

    image

  2. 选择新手适用模板,然后选择聊天助手应用类型,输入应用名称后单击创建

    image

  3. 直接向聊天助手提问测试,例如询问百炼有哪些手机型号,此时助手的回答可能不够准确或详细。

    image

  4. 在应用编排页面单击知识库右侧的添加,选择之前创建的知识库,然后根据页面提示单击重新开始重置调试区域。

    image

  5. 再次向聊天助手提出相同问题。结合知识库中的文档内容,助手现在能够提供准确且详细的回答。

    image

应用于生产环境

最佳实践

为确保Dify应用在生产环境中的高可用性,建议使用ACK进行部署。具体实施方案请参见解决方案快速部署 Dify,高效搭建 AI 应用并选择生产环境部署(使用 ACK 部署)。

风险防范

  • 权限管控:通过RAM用户进行资源访问管理,严格控制权限范围,仅授予TablestoreECS相关的必要操作权限。

  • 操作审计:启用操作审计功能,完整记录关键资源的访问和修改操作日志,确保操作行为可追溯。

  • 数据备份:定期对Tablestore进行数据备份,有效防范因意外故障或人为误操作导致的数据丢失风险。

成本优化

基于业务流量峰值特征,为Tablestore实例合理配置预留VCU资源以优化成本支出,同时开启弹性能力以应对突发流量增长,详情请参见VCU计费模式

资源清理

体验完成后,如果不计划进行生产环境部署,建议及时清理相关云资源以避免产生不必要的费用。

  1. 释放 ECS 实例

    前往ECS控制台,找到目标实例,单击全部操作 > 释放,按照页面指引完成实例释放。

  2. 删除 Tablestore 数据表

    前往表格存储控制台,在实例列表中单击目标实例别名, 在实例管理页面先单击目标数据表右侧的索引管理,在索引管理页面删除多元索引,然后返回数据表列表,单击目标数据表右侧的 > 删除,删除数据表。

  3. 释放 Tablestore 实例

    当预留VCU设置为0且实例内无数据时,不会产生费用。如需彻底清理资源,可按以下步骤释放Tablestore实例。

    1. 前往资源退订页面,选择商品名称表格存储标准实例,单击搜索

    2. 在目标订单的操作列单击退订资源,仔细阅读退订规则并确认后单击立即退订,选择退订原因(如业务变化不再需要)后单击确定后完成资源退订。如出现身份验证提示,请按照页面指引完成验证。

      image

相关文档