自动化数据分析

PAI-RAG提供了自动化数据分析功能,支持database(连接的MySQL数据库)和datafile(上传的表格文件)两种数据类型。结合大语言模型(LLM),您可以提问问题并优化查询效果。本文将详细介绍如何使用PAI-RAG的自动化数据分析功能。

前提条件

已部署RAG服务,镜像选择官方镜像 > pai-rag:0.3.1。详情请参见自定义部署RAG服务

步骤一:配置大语言模型(LLM)

  1. 模型在线服务(EAS)页面,单击目标RAG服务名称,然后在页面右上角单击查看Web应用,按操作指引进入WebUI页面。

  2. 系统设置页面右侧,配置LLM服务,然后单击保存模型配置image

    支持配置以下两种类型的LLM服务,您可以任意选择一种:

    服务类型

    参数

    描述

    PAI EAS部署的开源大语言模型

    URL

    分别配置为LLM服务的访问地址(EAS_SERVICE_URL)和Token(EAS_TOKEN)。

    重要
    • RAG服务通过内网地址连接LLM服务:RAG服务和LLM服务需使用相同的专有网络。

    • RAG通过公网地址连接LLM服务:需为RAG服务配置具备公网访问能力的VPC,详情请参见配置公网连接

    请参考以下操作步骤进行获取:

    1. 部署LLM大语言模型

    2. 模型在线服务(EAS)页面,单击已部署的LLM服务名称,然后在基本信息区域,单击查看调用信息,在弹出的对话框中进行获取。image

    密钥

    模型名称

    填写部署LLM服务时选择的模型类别。例如Qwen2.5-7B-Instruct。

    百炼模型服务

    说明

    URL

    配置为https://dashscope.aliyuncs.com/compatible-mode/v1

    密钥

    请前往API_KEY管理页面获取密钥。

    模型名称

    支持qwen-max、qwen-turbo等。推荐使用qwen-max。

步骤二:进行数据分析

RAG服务的WebUI页面切换到数据分析页签,进行自动化数据分析。image

RAG支持分析两种数据类型:database(连接的MySQL数据库)和datafile(上传的表格文件)。以下内容将分别介绍如何自动化分析这两种类型的数据。

数据库分析配置

1.连接数据库

目前仅支持MySQL类型数据库,本方案以RDS MySQL数据库为例,您也可以使用其他的MySQL数据库。

准备好数据库后,在RAG服务WebUI页面的数据分析页签,选择待分析的数据类型database,配置以下参数后单击加载数据库信息,完成连接。若需更新描述信息,请修改后重新加载。image

  • 数据库基础配置

    参数

    描述

    数据库类型

    固定为mysql

    数据库端口号

    默认为3306。

    数据库主机地址

    填写数据库内网或外网连接地址。以RDS MySQL数据库为例,查询方法请参见查看和管理实例连接地址和端口

    说明
    • 使用内网地址时:RAG服务和RDS实例需使用相同的专有网络。

    • 使用外网地址时:需为RAG服务配置具备公网访问能力的VPC,详情请参见配置公网连接

    用户名

    账号名称。

    密码

    账号对应的密码。

    数据库名称

    目标数据库名称。

    数据表名称

    需要分析的数据表名称,多个数据表间使用半角逗号(,)分隔,格式为table_A,table_B。默认为空,表示使用目标数据库中所有数据表。

    重要

    MySQL数据库中必须至少包含一张表,否则无法加载数据库信息。

    表的描述性信息

    可选,用于补充字段描述,默认为空。支持添加对表格的整体描述或对数据表中字段的详细说明,格式为:{"table_A":"字段a表示xxx,字段b数据的格式为xxx","table_B":"这张表主要用于xxx"},且必须使用英文标点符号,例如半角双引号("")、半角冒号(:)、半角逗号(,)等。

    该功能主要用于临时调试和观察数据分析效果。如果描述信息较多,建议:

    • 将相关描述在数据库中作为相应数据表或列字段的comment,持久化添加。

    • 将相关描述信息整理成CSV文档上传,详情请参见表格文件分析配置

  • 大型数据库的增强方案

    参数

    描述

    通过向量嵌入技术优化数据库检索

    • 适用场景:当目标数据库中表的列数量较多(如所有表的字段总和大于50列)时,建议开启该功能。

    • 功能描述:基于用户问题对数据库结构信息和值信息进行向量检索,快速筛选出可能有用的表字段,避免输入LLM的提示词过长,导致超过最大允许长度或生成SQL效果下降。其中,基于值的检索会获取数据库中文本字段的非重复值,设置了最大列数和每列最大唯一值数量的上限。上限越大查询的值范围越广,生成SQL更准确,但延迟会更高。

    • 操作方法:选中Yes复选框,并配置以下参数:

      • 最大列数:参与检索的表字段的最大数量。

      • 最大唯一值数量:针对每个字段(列),允许参与检索的非重复值的最大数量。数值越大,可能耗费的时间越长。

    通过LLM选表选列

    • 适用场景:适用数据库多表多列场景。

    • 功能描述:利用大语言模型根据用户查询语句筛选可能有用的表列。

    • 操作方法:选中Yes复选框即可。

    使用数据库查询历史/示例

    • 适用场景:适用于希望利用历史查询或相似查询来提高生成SQL效果的场景。

    • 功能描述:通过提供数据库中的历史查询或相似查询,利用向量检索找到与当前查询问题相似度较高的querySQL作为参考,类似FAQ,有助于提高生成SQL的效果。

    • 操作方法:选中Yes复选框,可在上传Q-SQL JSON文件区域上传JSON格式的query-SQL文件。JSON文件内容格式示例如下:

      [
        {
          "query": "找出体重大于10的宠物的数量。",
          "SQL": "SELECT count(*) FROM pets WHERE weight  >  10"
        },
        {
          "query": "找出每种宠物的最大重量。列出最大重量和宠物类型。",
          "SQL": "SELECT max(weight) ,  petType FROM pets GROUP BY petType"
        },
        {
          "query": "找出20岁以上学生拥有的宠物数量。",
          "SQL": "SELECT count(*) FROM student AS T1 JOIN has_pet AS T2 ON T1.stuid  =  T2.stuid WHERE T1.age  >  20"
        }
      ]

    上传数据表描述信息

    • 功能描述:通过提供数据库中每张表的所有列描述,帮助大模型更好地理解字段含义,从而提高SQL生成效果。

    • 操作方法:选中Yes复选框,并在上传数据库描述文件区域上传CSV格式的描述文件。CSV文件需与目标数据库表名保持一致,可上传多张表的描述文件,格式请参考CSV文件中的数据格式

    CSV文件中的数据格式

    original_column_name

    column_name

    column_description

    data_format

    value_description

    cds

    California Department Schools

    text

    useless

    rtype

    rtype

    text

    useless

    sname

    school name

    school name

    text

    dname

    district name

    district name

    text

    cname

    county name

    county name

    text

    enroll12

    enrollment (1st-12th grade)

    enrollment (1st-12th grade)

    integer

    NumTstTakr

    Number of Test Takers

    Number of Test Takers in this school

    integer

    number of test takers in each school

    AvgScrRead

    average score

    average score

    integer

    average score for reading

    NumGE1500

    Number of Test Takers Whose Total SAT Scores Are Greater or Equal to 1500

    Number of Test Takers Whose Total SAT Scores Are Greater or Equal to 1500

    integer

    Number of Test Takers Whose Total SAT Scores Are Greater or Equal to 1500 \n\n common sense evidence: \n Excellence Rate = NumGE1500 / NumTstTakr"

    其中:

    • original_column_name:表示数据库中存储的列(字段)名。

    • column_name:表示字段的别名,可不填写。

    • column_description:表示字段的描述信息,可以包含中/英文描述。

    • data_format:表示字段的数据类型,可以是字符串、整数、浮点数等,可不填写。

    • value_description:表示字段值的描述信息,可以包含中/英文描述,如果字段描述和字段值描述区分不大,仅在一处填写即可。

2.配置提示词

支持在数据分析页面的左下方,自定义用于生成SQL和合成最终回复的提示词。

  • 如有自定义需求,可在下图提示词模板的虚线之间进行修改。虚线以外的{}(半角花括号)中的内容为输入参数,需保留。image

  • 如需恢复默认模板,请在提示词模板重置页签下,单击需要恢复的提示词模板按钮。image

3.查询结果

在右侧Chatbot聊天框中,输入问题进行提问。系统将显示生成的SQL语句及其语法有效性(注意:语法有效不代表业务逻辑正确)。这些参考资料可以作为优化查询效果的调试工具。

目前,系统默认支持对话记忆功能,简单的问答效果如下图所示:image

4.优化查询效果

若查询结果不符合预期,您可以尝试以下优化方法:

问题

优化方法

如果目标数据库中表的数量较多,或通过参考资料发现查询的数据表有误。

  • 限定表范围:明确指定查询的表名。

  • 增加字段描述:在表的描述性信息中补充字段描述,帮助大模型更好地理解不同数据表之间的关系和作用,详情请参见数据库基础配置

如果数据库中表列名称比较抽象,如以简单字母命名或者以特定专业领域术语命名。

增加字段描述,辅助大语言模型理解具体领域知识:

  • 通过数据库中comment添加。

  • 通过表的描述性信息以字典格式添加,详情请参见数据库基础配置

  • 通过大型数据库的增强方案上传数据表描述信息(CSV格式)添加,详情请参见大型数据库的增强方案

通过参考资料观察到已生成的SQL语句不满足某些业务逻辑或部分业务逻辑本身较复杂。

  • 配置提示词:如果业务逻辑相对通用,可通过在提示词模板中增加相关业务逻辑的提示,或给出相关示例,详情请参见2.配置提示词

  • 使用数据库查询历史/示例:上传query-SQL样例数据以提高生成效果。详情请参见大型数据库的增强方案

如果目标数据库表列数量较多,如字段总数超过50个。

  • 增加字段描述:进一步优化各个表的字段描述。详情请参见数据库基础配置

  • 通过向量嵌入技术优化数据库检索&通过LLM选表选列:开启增强方案中的前两项,减少提示词模板中的信息干扰。详情请参见大型数据库的增强方案

如参考资料中观察到生成的SQL语句包含了非SQL的其他内容。如开头多了"sql"等(部分小模型指令遵循问题)

配置提示词:在Nl2sql提示词模板中增加简单限制。

如果SQL生成正确,但需要更个性化的回答(如以什么语言风格,加上具体单位等要求)

配置提示词:在合成器提示词模板中调整提示词。

表格文件分析配置

RAG服务WebUI页面的数据分析页签,选择待分析的数据类型datafile。然后在上传 csv/xlsx 文件以进行数据分析区域,按照控制台操作指引上传一份表格文件(格式为ExcelCSV)。上传成功后,在页面左下方会出现文件的前几行预览,如下图所示。image

后续您可以在右侧的Chatbot中直接进行提问,如需更换表格,重新上传所需表格即可。

常见问题

数据库连接失败

网络和连接配置问题

  • 检查提供的主机名、端口号、用户名和密码是否正确:确保所有信息准确无误。

  • 防火墙和安全组设置:确认防火墙规则和安全组允许通过指定端口进行访问。

  • VPC和私网设置:如果RAG服务和数据库在同一VPC(专有网络)内,直接使用私网地址;若需公网访问,确保RAG服务的VPC具有公网访问能力。

权限和认证问题

  • 用户权限:确认用户具有足够的权限访问目标数据库,必要时使用GRANT命令赋予权限。

  • 白名单设置:确保客户端IP地址在数据库的访问白名单中。

数据库服务状态

  • MySQL服务是否正在运行:检查MySQL服务的状态,确保其正常运行。

  • 监听端口是否正确:确认MySQL服务正在监听正确的端口。