暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

ChatGPT连接MySQL返回定制化内容

1112

我们在使用ChatGPT等类似的AI产品时,可能会遇到比较冷门的内容或者定制化的内容,AI答不上来。

这时候,我们就可以通过llama_index给AI传一些特有的数据。这样,当AI回答我们的问题时,会结合AI知道的和我们上传的数据,从而返回我们想知道的答案。

这一节内容,我们就来聊一下,怎么把MySQL中特有的数据吐给OpenAI,从而返回特有数据相关的答案。

1 部署测试的MySQL
我们首先部署一个测试的MySQL,这一步可以参考:Linux 安装 MySQL 最新版本 8.0.25

2 创建测试表,并且写入数据
    use martin;


    create table student_info (
    id int auto_increment primary key,
    name varchar(10),
    address varchar(10),
    score int);


    insert into student_info(name,address,score)
    values
    ('a','beijing',90),
    ('b','shanghai',88),
    ('c','beijing',86),
    ('d','shanghai',92);

    3 创建对测试表的只读用户
      CREATE USER 'martin'@'localhost' IDENTIFIED BY 'uqatcdaT12';
      grant select on martin.student_info to 'martin'@'localhost';

      4 通过ChatGPT分析MySQL数据
      因为llama_index的GPTSimpleVectorIndex实际调用的是OpenAI的API做的embedding。所以在执行程序之前,需要把OPENAI_API_KEY加到环境变量里,值就是你自己的OpenAI的API KEY。

      我们通过下面的代码,实现通过ChatGPT分析MySQL数据。
        from llama_index import GPTSimpleVectorIndex,download_loader


        DatabaseReader = download_loader('DatabaseReader')


        reader = DatabaseReader(
        scheme = "mysql", # Database Scheme
        host = "localhost", # Database Host
        port = "3306", # Database Port
        user = "martin", # Database User
        password = "uqatcdaT12", # Database Password
        dbname = "martin", # Database Name
        )


        query = f"""
        select * from student_info
        """


        documents = reader.load_data(query=query)
        print(documents)


        index = GPTSimpleVectorIndex.from_documents(documents)
        index.query('student_info中name是d的,score是多少').response

        我们来看一下代码执行的结果:
        对比student_info里的数据:
          mysql> select * from student_info;
          +----+------+----------+-------+
          | id | name | address | score |
          +----+------+----------+-------+
          |  1 | a    | beijing  |    90 |
          | 2 | b | shanghai | 88 |
          |  3 | c    | beijing  |    86 |
          | 4 | d | shanghai | 92 |
          +----+------+----------+-------+
          4 rows in set (0.01 sec)
          从上面的截图能看出,我们问的是:
          student_info中name是d的,score是多少?


          针对MySQL里的数据,给出了特有的回答:
          The score for the student with the name "d" is 92.


          我们成功获取到数据库里的特有信息。


          5 几个问题
          5.1 那比如我不想要MySQL数据源,想要其他数据源,怎么弄?
          这里就可以看看https://llamahub.ai/,上面有很多种加载数据的方式。包括本地图片、PDF、ES、MongoDB等。

          5.2 上面例子中,我们把MySQL数据吐给OpenAI,那会不会导致数据泄露?
          根据OpenAI的协议,ChatGPT页面提交的内容会用于训练,API提交的不会,但是笔者也不能确定吐上去的数据会不会泄露,所以尽量使用不敏感的数据做实验(低情商说法:万一因为类似实验导致数据泄露,别赖我)。

          5.3 我要知道数据库里名字是d的人的分数,不就一条SQL可以搞定吗?整那么复杂干嘛?
          上面的实验,也只是举个例子,实际会有更多的使用场景,比如:
          • 定制化机器人客服,哪些地方不配送之类的数据写在数据库中,跟上面例子一样,结合AI使用;
          • 论文解读,逻辑就可以使用llama_index分析本地文件,再使用ChatGPT的思维能力来总结论文内容;
          • SQL审核或者评分,结合ChatGPT有的SQL评分能力,加上公司内部特有的SQL规范,比如违反某个规范多扣多少分。
            如果你还能想到其他场景,欢迎在文章下方留言。


          我们创建了一个全新的知识星球:ChatGPT与AI联盟。
          分析使用AI工具能做MySQL的哪些事情,个人或者企业怎么基于ChatGPT的API开发应用。以及围绕AI工具有哪些副业或者创业的思路。
          再送一张28元的优惠券,券后40元,限量10张,先到先得。

          关注公众号
          回复“高可用”,可获取主流高可用方案;
          回复“书籍”,可获取号主的书籍介绍;
          回复“社群”,可获取加入社群的方式。

          文章转载自MySQL数据库联盟,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

          评论