雪莉果的大语言模型应用书vol.001 阿里云百炼(一)——自然语言转sql

0.知其然,不必知其所以然

从冰冷的数据到活泼的可视化展现,往往需要多个岗位协助来进行;在岗位职责越来越细分的当下,似乎也很少再会要求有全栈能力的人来做数据分析了。
所以经常会发生这样的场景:数据分析师需要某些数据,却发现数据平台没有现成的模型,需要找到开发添加,而开发对需求理解也不一定准确,写出来的sql模型又容易出现问题,这种时候,你肯定会想:如果我说一句话,就能从数据库查出数据该多好。
Text2SQL,准确的说叫自然语言转数据库查询语句,在很多年前就出现了,但是受限于技术和NLP的发展,一直没有太大的进步;直到大语言模型的出现,这项技术也得到了史诗级的强化。
这一次,我们通过一个简单的例子来验证这项技术。

1.阿里云百练

在这里,我们使用阿里云百炼,而不是直接使用通义千问或者文心一言,是为了后期能够方便地融入我们自己的平台,你肯定也不想每次查询数据都要打开百度或者阿里的网站吧。

1.1创建应用

完成注册等前期工作后,我们进入阿里云百炼的页面,首先在模型广场中找到通义千问-max模型(限时免费使用,所以先薅一薅):
在这里插入图片描述
点击创建应用,输入名称:
在这里插入图片描述

1.2调试应用

我们先进行测试,测试页面如下图展示:
在这里插入图片描述
第一步,我们先选择prompt模板,在搜索框输入sql,选择‘SQL专家’模板:
在这里插入图片描述
第二步,我们可以看到该模板有两个参数,require代表你的查询需求,table_structure代表数据库的表结构;我们在require中填入“我想查看2023年的销售数据,并按照地区排名显示前十位”,在table_structure填入准备好的数据库表sale_table(year,month,area_name,amount),点击应用至测试窗,便可以将内容填充近prompt模板中。
在这里插入图片描述
点击发送,便可以得到我们想要的sql:
在这里插入图片描述

2.接口调用

上面的步骤其实可以完成一些工作了,不过就如前文所述,你肯定也不想每次查询数据都要打开百度或者阿里的网站;为了达成这个目的,阿里云百炼提供了api调用和sdk调用,这里,我们先使用api调用来完成。

2.1必要信息准备

首先,我们需要准备四个必要参数,Access Key、Access Secret Key、Agent Key、AppId,用以调用我们刚才创建的应用。
第一步,通过RAM访问控制获取Access Key和Access Secret Key,进入官网 ,点击创建Access Key,完成验证后可得到Access Key和Access Secret Key,需要注意的是,请保存好这两个参数,如果遗忘了就只能重新创建。
在这里插入图片描述
第二步,在应用管理中,点击调用,在打开的页面中可以看到Agent Key和AppId。
在这里插入图片描述

2.2token获取

在使用推理前,需要先获取token,可以在官方的文档中找到获取token的代码,我们以python为例:

1. 获取和安装SDK
pip install broadscope-bailian
2. 调用代码示例
import os
from alibabacloud_bailian20230601.client import Client
from alibabacloud_bailian20230601.models import CreateTokenRequest
from alibabacloud_tea_openapi.models import Config


def create_token():
    access_key_id = os.environ.get("ACCESS_KEY_ID")
    access_key_secret = os.environ.get("ACCESS_KEY_SECRET")
    agent_key = os.environ.get("AGENT_KEY")
    endpoint = "bailian.cn-beijing.aliyuncs.com"

    config = Config(access_key_id=access_key_id,
                    access_key_secret=access_key_secret,
                    endpoint=endpoint)

    client = Client(config=config)
    token_response = client.create_token(CreateTokenRequest(agent_key=agent_key))
    if token_response.status_code != 200 or token_response.body is None:
        raise RuntimeError("create token error, code=%d" % token_response.status_code)

    token_body = token_response.body
    if not token_body.success:
        request_id = token_body.request_id
        if not request_id:
            request_id = token_response.headers.get("x-acs-request-id")
        raise RuntimeError("create token error, code=%s, message=%s RequestId: %s"
                           % (token_body.code, token_body.message, request_id))

    print('token: %s, expired_time: %s' % (token_body.data.token, token_body.data.expired_time))

将参数替换成我们上一步得到的内容即可:
在这里插入图片描述
执行后便可得到token:
在这里插入图片描述

2.3推理接口调用

拿到token后,我们便可以进行推理应用。
还是使用python,使用刚才的prompt,然后自定义需要的参数即可:

# 需要替换'Authorization':'Bearer token'中的token为上一步得到的token
import requests
import json

require = '我想查看2023年的销售数据,并按照地区排名显示前十位'
table_structure = 'sale_table(year,month,area_name,amount)'

prompt='您是SQL专家,现在需要根据以下具体场景编写一个正确且规范的SQL查询语句。问题情境:用户希望从数据库中查询满足特定条件的数据,请提供该SQL查询任务的详细描述。问题需求:'+require+'。请基于以下表格结构'+table_structure+'请使用以下格式编写SQL代码,并确保其解答了用户的问题:```sql-- 请在此处编写SQL查询语句SELECT ...FROM ...WHERE ...GROUP BY ...HAVING ...ORDER BY ... ;```其中,查询条件和字段选择应当基于用户的实际需求""'+require+'""来确定。'

url = 'https://bailian.aliyuncs.com/v2/app/completions'
headers = {
    'Content-Type': 'application/json; charset=utf-8',
    'Authorization':'Bearer token',
    'Accept-charset': 'utf-8'
}
data = {
  "RequestId": "202402191007001",
  "AppId": "bcec908da3ba4930959e5e963c258bcc",
  "Prompt": prompt}
result = requests.post(url, headers=headers, data=json.dumps(data))
print(result.content.decode('utf-8'))

执行后,便可得到结果。
在这里插入图片描述

3.一些说在最后的话

这只是一个应用的基本流程,你可以放入你自己的工程中,也可以试试能不能让通义千问处理一些更复杂的查询问题。

  • 33
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值