基于PAI-EAS和Tablestore快速搭建RAG应用

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

方案介绍

模型在线服务(EAS)PAI产品为实现一站式模型开发部署应用,针对在线推理场景提供的模型在线服务,支持将模型服务部署在公共资源组或专属资源组,实现基于异构硬件(CPUGPU)的模型加载和数据请求的实时响应。

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

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

image

注意事项

本文示例选用的LLM模型为 DeepSeek-R1-Distill-Qwen-1.5B,部署资源规格为 ecs.gn7i-c16g1.4xlarge,具体计费请参见模型在线服务(EAS)计费说明

说明

如果您只是为了体验部署流程,请在体验完成后及时删除部署的服务,避免资源长时间计费。

准备工作

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

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

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

  2. 开通PAI服务并创建默认工作空间

    重要

    开通PAI服务的地域必须和表格存储的实例所在地域保持一致。

操作步骤

步骤一:部署RAG应用

  1. PAI控制台左侧菜单栏的模型部署下单击模型在线服务(EAS)

  2. 在模型在线服务(EAS)页面中单击部署服务,选择JSON独立部署

  3. JSON独立部署页面,输入部署配置,单击部署。在弹出的是否确认进行部署弹窗中,单击确定进行部署。

    示例配置文件及参数说明

    示例配置文件

    {
      "SupportedInstanceTypes": [
          "ecs.gn7i-c16g1.4xlarge",
          "ecs.gn7i-c32g1.16xlarge",
          "ecs.gn7i-c32g1.32xlarge",
          "ecs.gn7i-c32g1.8xlarge",
          "ecs.gn7i-c8g1.2xlarge",
          "ecs.gn7i-c8g1.2xlarge.limit",
          "ecs.gn8is-2x.8xlarge",
          "ecs.gn8is-4x.16xlarge",
          "ecs.gn8is-8x.32xlarge",
          "ecs.gn8is.2xlarge",
          "ecs.gn8is.4xlarge",
          "ecs.gn8v.6xlarge",
          "ecs.gn8v-2x.12xlarge",
          "ecs.gn8v-4x.24xlarge",
          "ecs.gn8v-8x.48xlarge",
          "ml.gu7i.c128m752.4-gu30",
          "ml.gu7i.c16m60.1-gu30",
          "ml.gu7i.c32m188.1-gu30",
          "ml.gu7i.c64m376.2-gu30",
          "ml.gu7i.c8m30.1-gu30",
          "ml.gu8is.c128m1024.8-gu60",
          "ml.gu8is.c16m128.1-gu60",
          "ml.gu8is.c32m256.2-gu60",
          "ml.gu8is.c64m512.4-gu60",
          "ml.gu8v.c192m1024.8-gu120",
          "ml.gu8v.c24m128.1-gu120",
          "ml.gu8v.c48m256.2-gu120",
          "ml.gu8v.c96m512.4-gu120"
      ],
      "cloud": {
          "computing": {
              "instances": [
                  {
                      "type": "ecs.gn7i-c16g1.4xlarge"
                  }
              ]
          },
          "networking": {
              "security_group_id": "sg-bp****************dj",
              "vpc_id": "vpc-bp*****************po",
              "vswitch_id": "vsw-bp*****************eu"
          }
      },
      "containers": [
          {
              "image": "eas-registry-vpc.cn-hangzhou.cr.aliyuncs.com/pai-eas/pai-rag:0.2.0-nginx",
              "port": 8680,
              "script": "/docker-entrypoint.sh nginx"
          },
          {
              "env": [
                  {
                      "name": "PAIRAG_RAG__SETTING__interactive",
                      "value": "false"
                  }
              ],
              "image": "eas-registry-vpc.cn-hangzhou.cr.aliyuncs.com/pai-eas/pai-rag:0.2.0-ui",
              "port": 8002,
              "script": "pai_rag ui"
          },
          {
              "env": [
                  {
                      "name": "PAIRAG_RAG__INDEX__VECTOR_STORE__type",
                      "value": "tablestore"
                  },
                  {
                      "name": "PAIRAG_RAG__INDEX__VECTOR_STORE__endpoint",
                      "value": "https://d0********9c.cn-hangzhou.vpc.tablestore.aliyuncs.com"
                  },
                  {
                      "name": "PAIRAG_RAG__INDEX__VECTOR_STORE__instance_name",
                      "value": "d0********9c"
                  },
                  {
                      "name": "PAIRAG_RAG__INDEX__VECTOR_STORE__access_key_id",
                      "value": "LT********************u7"
                  },
                  {
                      "name": "PAIRAG_RAG__INDEX__VECTOR_STORE__access_key_secret",
                      "value": "nI**************************GF"
                  },
                  {
                      "name": "PAIRAG_RAG__INDEX__VECTOR_STORE__table_name",
                      "value": "pai_rag"
                  },
                  {
                      "name": "PAIRAG_RAG__DATA_READER__enable_image_ocr",
                      "value": "false"
                  },
                  {
                      "name": "PAIRAG_RAG__LLM__source",
                      "value": "PaiEas"
                  },
                  {
                      "name": "PAIRAG_RAG__LLM__endpoint",
                      "value": "http://127.0.0.1:8000"
                  },
                  {
                      "name": "PAIRAG_RAG__LLM__token",
                      "value": "abc"
                  },
                  {
                      "name": "PAIRAG_RAG__EMBEDDING__source",
                      "value": "HuggingFace"
                  },
                  {
                      "name": "PAIRAG_RAG__EMBEDDING__model_name",
                      "value": "bge-small-zh-v1.5"
                  }
              ],
              "image": "eas-registry-vpc.cn-hangzhou.cr.aliyuncs.com/pai-eas/pai-rag:0.2.0",
              "port": 8001,
              "script": "pai_rag serve"
          },
          {
              "image": "eas-registry-vpc.cn-hangzhou.cr.aliyuncs.com/pai-eas/sglang:v0.4.1.post6-cu124_netcat_accelerated",
              "port": 8000,
              "script": "gpu_count=$(nvidia-smi --query-gpu=count --format=csv,noheader | wc -l); python3 -m sglang.launch_server --model-path /model_dir --host 0.0.0.0 --port 8000 --tp $gpu_count --trust-remote-code --enable-metrics --served-model-name DeepSeek-R1-Distill-Qwen-1.5B"
          }
      ],
      "labels": {
          "PAI_RAG_VERSION": "0.1_custom",
          "system_eas_deployment_type": "rag",
          "system_eas_rag_open_source_model_acc_type": "SGLang-Accelerate:Single-Node-Standard",
          "system_eas_rag_open_source_model_name": "DeepSeek-R1-Distill-Qwen-1.5B"
      },
      "metadata": {
          "cpu": 16,
          "enable_webservice": true,
          "gpu": 1,
          "instance": 1,
          "memory": 60000,
          "name": "rag_tablestore",
          "rpc": {
              "keepalive": 900000000
          },
          "shm_size": 100
      },
      "storage": [
          {
              "mount_path": "/model_dir/",
              "oss": {
                  "endpoint": "cn-hangzhou-internal.oss-data-acc.aliyuncs.com",
                  "path": "oss://pai-quickstart-cn-hangzhou/modelscope/models/DeepSeek-R1-Distill-Qwen-1.5B/"
              },
              "properties": {
                  "resource_type": "model",
                  "resource_use": "base"
              }
          }
      ]
    }

    参数说明

    • 向量检索库设置

      通过 env 环境变量进行设置,需要设置的环境变量内容如下表所示。

      环境变量

      说明

      PAIRAG_RAG__INDEX__VECTOR_STORE__type

      向量检索库类型,值固定为tablestore。

      PAIRAG_RAG__INDEX__VECTOR_STORE__endpoint

      表格存储的访问地址。

      PAIRAG_RAG__INDEX__VECTOR_STORE__instance_name

      表格存储的实例名称。

      PAIRAG_RAG__INDEX__VECTOR_STORE__access_key_id

      阿里云账号或者RAM用户的AccessKey ID。

      PAIRAG_RAG__INDEX__VECTOR_STORE__access_key_secret

      阿里云账号或者RAM用户的AccessKey Secret。

      PAIRAG_RAG__INDEX__VECTOR_STORE__table_name

      存储向量数据的数据表名称。

    • 专有网络配置

      通过 cloud.networking 配置专有网络,如果没有专有网络配置需求,您可以删除示例配置文件内的相应内容。

      参数

      说明

      vpc_id

      专有网络ID。

      vswitch_id

      交换机ID。

      security_group_id

      安全组ID。

    如果您想了解EAS部署的其它参数,请参见JSON部署参数说明

    操作完成后,将自动进入部署流程,整个部署流程大概需要5分钟。部署完成后,服务状态将变为运行中。

    说明

    如果指定的向量数据表不存在,部署过程会自动在表格存储实例下创建数据表以及多元索引。

    image

步骤二:使用RAG应用

  1. 在服务列表,单击服务方式下方的查看Web应用,在弹窗中单击跳转Web应用

  2. 在仪表盘的Upload页面,上传知识库文件,例如rag_chatbot_test_doc.txt

    image

    知识库文件解析上传完成后,您可以在表格存储控制台查看写入的向量数据。

    image

  3. 在仪表盘的Chat页面,输入问题,单击Submit,进行知识问答。

    image

如果您想了解更多关于WebUI页面调试的内容,例如修改向量检索库和大语言模型、知识库支持的文件类型等,请参见大模型RAG对话系统

相关文档