赛尔校园公共服务平台 Logo
平台使用
阿里云
百度云
移动云
智算服务
教育生态
登录 →
赛尔校园公共服务平台 Logo
平台使用 阿里云 百度云 移动云 智算服务 教育生态
登录
  1. 首页
  2. 阿里云
  3. 表格存储
  4. 实践教程
  5. AI实践
  6. 基于Dify和Tablestore快速搭建RAG应用

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

  • AI实践
  • 发布于 2025-04-22
  • 0 次阅读
文档编辑
文档编辑

本文介绍如何通过Dify快速搭建RAG应用,并使用Tablestore作为向量数据库,提高知识库检索的准确性和效率。

方案介绍

Dify 是一款开源的大语言模型(LLM) 应用开发平台。它融合了后端即服务(Backend as Service)和 LLMOps 的理念,使开发者可以快速搭建生产级的生成式 AI 应用。即使您是非技术人员,也能参与到 AI 应用的定义和数据运营过程中。

表格存储(Tablestore)是低成本、高性能的海量数据存储与检索系统,可以提供高召回(多路召回、标量/向量混合检索)、高性能(实时索引、毫秒级查询、单表上限百亿向量)、稳定安全(独立VPC、可用性99.99%、数据可靠性12个9)的向量检索功能。

RAG(Retrieval-Augmented Generation,检索增强生成)技术通过从外部知识库检索相关信息,并将其与用户输入合并后传入大语言模型(LLM),从而增强模型在私有领域知识问答方面的能力。使用Tablestore作为RAG应用的向量检索库时,知识库文件上传、存储以及检索的流程如下图所示。

image

准备工作

  1. 准备表格存储向量数据库。

    1. 开通表格存储服务并创建实例。

    2. 为阿里云账号或具有表格存储访问权限的RAM用户创建AccessKey。

  2. 准备部署Dify的服务器。由于网络原因,本文使用的是中国香港地域的ECS实例,实例规格为 ecs.e-c1m2.xlarge,操作系统为Alibaba Cloud Linux 3.2104 LTS 64位。

部署流程

本文示例通过Docker Compose的方式部署Dify,如果您希望以本地源码方式部署Dify,请参见附录1:本地代码部署。

步骤一:安装Docker

  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

  1. 安装Git。

    yum -y install git
  2. 下载源码。

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

    cd dify/docker
  4. 复制配置文件。

    cp .env.example .env
  5. 修改配置文件。

    vi .env

    修改以下配置,指定向量数据库为tablestore,并提供表格存储的访问地址Endpoint、实例名称以及AccessKey信息。如果您使用的是ECS,请根据地域情况选择访问地址:

    • ECS与表格存储在同一地域:选择公网地址或者VPC地址。

    • ECS与表格存储不在同一地域:选择公网地址。

    VECTOR_STORE=tablestore
    TABLESTORE_ENDPOINT=https://k01r********.cn-hangzhou.ots.aliyuncs.com
    TABLESTORE_INSTANCE_NAME=k01r********
    TABLESTORE_ACCESS_KEY_ID=LTAI********************
    TABLESTORE_ACCESS_KEY_SECRET=******************************
  6. 启动Docker容器。

    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

搭建RAG应用

步骤一:访问Dify

您可以通过 http://server_ip 访问Dify。初次登录会自动跳转初始化页面设置管理员账户,设置完成后跳转登录页进行登录。本文示例中,server_ip 为ECS实例的公网IP。

重要

如果您使用的是ECS,需要添加安全组规则,在入方向规则中添加自定义TCP端口的允许访问策略,访问目的端口为80。

image

步骤二:系统模型设置

您可以根据需要选择模型供应商进行安装并设置API-KEY。本文以通义千问为例进行操作,操作前需要获取百炼的API Key。

  1. 在首页单击右上角头像,在弹出的菜单中单击设置。

  2. 在设置页面单击模型供应商,根据需要选择模型供应商,单击安装。

  3. 安装完成后,在待配置的模型列表中设置模型供应商的API-KEY。

    image

  4. 配置完API-KEY后,将自动设置系统模型(需要手动刷新,例如切换菜单或重新进入设置)。您可以单击系统模型设置查看或修改模型。

    image

步骤三:创建知识库

  1. 在首页单击知识库,在知识库页签单击创建知识库。

    image

  2. 单击创建一个空知识库。在创建空知识库对话框中,输入知识库名称,单击创建,完成知识库创建。

    image

  3. 在知识库页面单击添加文件,选择需要上传的文件,单击下一步进入文本分段与清洗设置。

    image

  4. 根据需要设置文本分段与清洗方式,设置完成后单击保存并处理,等待文件上传完成。

    image

    上传完成后,您可以单击前往文档查看已上传的文档列表。

    image

    您也可以在表格存储控制台查看保存到表格存储的向量数据。

    image

步骤四:创建和使用聊天助手

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

    image

  2. 在创建空白应用页面,选择聊天助手,输入应用名称后,单击创建。

    image

  3. 直接对聊天助手进行提问,此时聊天助手的回答并不准确。

    image

  4. 在聊天助手中选择知识库后,再对聊天助手进行提问。结合知识库文档,聊天助手能提供准确的回答。

    image

相关文档

  • Dify环境变量说明

  • Dify部署常见问题

  • Dify应用案例

附录

附录1:本地代码部署

步骤一:安装依赖软件

  1. 安装Docker,用于启动Dify服务之前部署PostgreSQL、Redis等依赖。

    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
  2. 安装Git,用于下载Dify源码。

    yum -y install git
  3. 安装Python,运行Dify需要Python 3.12及以上版本,本文使用Pyenv方式进行安装。

    1. 安装Pyenv。

      curl -fsSL https://pyenv.run | bash
    2. 配置环境变量。

      echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
      echo '[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
      echo 'eval "$(pyenv init - bash)"' >> ~/.bashrc
    3. 重启Shell。

      exec "$SHELL"
    4. 安装Python依赖。

      yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel xz-devel libffi-devel libuuid-devel libtirpc-devel libnsl2-devel
    5. 安装Python。

      pyenv install 3.12
    6. 切换Python环境。

      pyenv global 3.12
  4. 安装Poetry,Dify API服务使用Poetry来管理依赖。

    1. 安装Poetry。

      curl -sSL https://install.python-poetry.org | python3 -
    2. 配置环境变量。

      echo 'export PATH="/root/.local/bin:$PATH"' >> ~/.bashrc
    3. 重启Shell。

      exec "$SHELL"
  5. 安装Node.js,用于部署Dify Web服务。

    1. 安装Unzip。

      yum -y install unzip
    2. 安装fnm。

      curl -o- https://fnm.vercel.app/install | bash
    3. 重启环境变量配置。

      source /root/.bashrc
    4. 安装Node.js。

      fnm install 22
    5. 安装Pnpm。

      npm install pnpm -g

步骤二:下载源码

git clone https://github.com/langgenius/dify.git

步骤三:部署PostgreSQL等依赖

进入源码的 docker 目录,进行以下操作。

  1. 复制配置文件。

    cp middleware.env.example middleware.env
  2. 部署启动依赖。

    docker compose -f docker-compose.middleware.yaml up -d

步骤四:启动API服务

进入源码的 api 目录,进行以下操作。

  1. 复制配置文件。

    cp .env.example .env
  2. 生成随机密钥。

    awk -v key="$(openssl rand -base64 42)" '/^SECRET_KEY=/ {sub(/=.*/, "=" key)} 1' .env > temp_env && mv temp_env .env

    请按提示输入 y 进行文件覆盖。

  3. 修改配置文件。

    vi .env

    修改以下配置,指定向量数据库为tablestore,并提供表格存储的访问地址Endpoint、实例名称以及AccessKey信息。如果您使用的是ECS,请根据地域情况选择访问地址:

    • ECS与表格存储在同一地域:选择公网地址或者VPC地址。

    • ECS与表格存储不在同一地域:选择公网地址。

    VECTOR_STORE=tablestore
    TABLESTORE_ENDPOINT=https://k01r********.cn-hangzhou.ots.aliyuncs.com
    TABLESTORE_INSTANCE_NAME=k01r********
    TABLESTORE_ACCESS_KEY_ID=LTAI********************
    TABLESTORE_ACCESS_KEY_SECRET=******************************

    您还需要根据实际情况修改 CONSOLE_API_URL、CONSOLE_WEB_URL、SERVICE_API_URL、APP_WEB_URL 和 FILES_URL。本文示例中,需要将 127.0.0.1 替换为 ECS实例的公网IP地址。

  4. 指定Python环境。

    poetry env use 3.12
  5. 使用Poetry管理依赖。

    poetry install
  6. 执行数据库迁移。

    poetry run flask db upgrade
  7. 启动API服务。

    poetry run flask run --host 0.0.0.0 --port=5001 --debug

    运行成功后您可以看到以下输出。

    2025-04-10 02:42:41,916 INFO [utils.py:162]  NumExpr defaulting to 4 threads.
     * Debug mode: on
    2025-04-10 02:42:50,438 INFO [_internal.py:97]  WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
     * Running on all addresses (0.0.0.0)
     * Running on http://127.0.0.1:5001
     * Running on http://172.25.42.112:5001
    2025-04-10 02:42:50,438 INFO [_internal.py:97]  Press CTRL+C to quit
    2025-04-10 02:42:50,445 INFO [_internal.py:97]   * Restarting with stat
    2025-04-10 02:42:54,32 INFO [utils.py:162]  NumExpr defaulting to 4 threads.
    2025-04-10 02:42:57,640 WARNING [_internal.py:97]   * Debugger is active!
    2025-04-10 02:42:57,642 INFO [_internal.py:97]   * Debugger PIN: 792-769-991

步骤五:启动Worker服务

进入源码的 api 目录,运行以下命令启动Worker服务,用于消费异步队列任务,如知识库文件导入、更新知识库文档等异步操作。

poetry run celery -A app.celery worker -P gevent -c 1 -Q dataset,generation,mail,ops_trace --loglevel INFO

运行成功后您可以看到以下输出。

2025-04-10 02:48:11,265 INFO [connection.py:22]  Connected to redis://:**@localhost:6379/1
2025-04-10 02:48:11,268 INFO [mingle.py:40]  mingle: searching for neighbors
2025-04-10 02:48:12,282 INFO [mingle.py:49]  mingle: all alone
2025-04-10 02:48:12,300 INFO [pidbox.py:111]  pidbox: Connected to redis://:**@localhost:6379/1.
2025-04-10 02:48:12,311 INFO [worker.py:175]  celery@iZj6c8qls7on04kyr3cw79Z ready.

步骤六:启动Web服务

进入源码的 web 目录,进行以下操作。

  1. 安装依赖。

    pnpm install
  2. 复制配置文件。

    cp .env.example .env.local
  3. 修改配置文件。

    vi .env.local

    根据实际API服务地址修改 NEXT_PUBLIC_API_PREFIX 和 NEXT_PUBLIC_PUBLIC_API_PREFIX。本文示例中,需要将 127.0.0.1 替换为 ECS实例的公网IP地址。

  4. 构建代码。

    pnpm build

    如果在构建过程中出现 FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memory 报错,可以尝试重新执行构建命令。

  5. 运行Web服务。

    pnpm start

    运行成功后,您可以看到以下输出。

       ▲ Next.js 15.2.3
       - Local:        http://localhost:3000
       - Network:      http://0.0.0.0:3000
    
     ✓ Starting...
     ✓ Ready in 80ms
相关文章

基于MCP协议的Tablestore实现 2025-04-22 14:37

表格存储(Tablestore)集成了MCP协议,通过向量和标量的混合检索能力,提供高效的数据存储与检索解决方案。通过本文您可以了解表格存储MCP服务及使用方法。 功能介绍 MCP(Model Context Protocol,模型上下文协议)是一个开放标准协议,旨在通过标准化API连接大型语言模型

基于Dify和Tablestore快速搭建RAG应用 2025-04-22 14:37

本文介绍如何通过Dify快速搭建RAG应用,并使用Tablestore作为向量数据库,提高知识库检索的准确性和效率。 方案介绍 Dify 是一款开源的大语言模型(LLM) 应用开发平台。它融合了后端即服务(Backend as Service)和 LLMOps 的理念,使开发者可以快速搭建生产级的生

基于PAI-EAS和Tablestore快速搭建RAG应用 2025-04-22 14:37

在人工智能平台PAI部署大模型RAG对话系统时,您可以使用表格存储(Tablestore)作为向量检索数据库。本文以JSON独立部署的方式介绍如何将Tablestore作为RAG对话系统的向量检索库。

目录
Copyright © 2025 your company All Rights Reserved. Powered by 赛尔网络.
京ICP备14022346号-15
gongan beian 京公网安备11010802041014号