GPT应用-使用中文操作数据库

GPT应用-使用中文操作数据库

本次尝试使用langchain来操作数据库;

环境配置

下面是数据库相关的表,使用Mysql5.7 数据库,数据库名students

下面是相关表的介绍

学生表,有名字、分数、和老师的备注

image.png

学生父母表,其中有学生的名字,父母的电话

image.png

代码介绍

下面是notebook 内容的相关介绍

安装langchain和pymysql依赖

%pip install langchain
%pip install pymysql

配置OPENAI_API_KEY,在openAI获取key

%env OPENAI_API_KEY=sk-d8X5qdQlAnTdOHzCiOdZT3B

引入依赖

from langchain import OpenAI, SQLDatabase, SQLDatabaseChain

配置数据库连接

db = SQLDatabase.from_uri("mysql+pymysql://root:root@127.0.0.1/students")
llm = OpenAI(temperature=0)

创建SQLDatabaseChain,chain是langchain中的一个重要概念,可以从他的官网了解,例如我们可以将接口访问封装成一个Chain等。

这里我们使用的是langchain提供的访问数据库的Chain,官方还提供了更多的chain。

db_chain = SQLDatabaseChain(llm=llm, database=db, verbose=True)

开始询问,我们直接使用中文问,因为我们配置了verbose=True,所以他将中间产生的SQL也输出了

db_chain.run("全班有多少个学生?")

image.png

db_chain.run("他们的名字是什么?")

image.png

db_chain.run("他们的平均分是多少?")

image.png

db_chain.run("去除0分之后的平均分是多少")

image.png

db_chain.run("谁的了0分?")

image.png

db_chain.run("谁的了0分以及为什么")

image.png

db_chain.run("说得了0分,给出父母的电话")

image.png

通过以上的实例演示,能够看到非常好的效果,大家可以多测试,欢迎交流学习

更多实例参考:https://github.com/malone231214/gpthub

SQL

DROP TABLE IF EXISTS `parents`;
​
CREATE TABLE `parents` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `student_name` varchar(20) DEFAULT '',
  `parent_name` varchar(20) DEFAULT NULL,
  `parent_mobile` varchar(10) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
​
LOCK TABLES `parents` WRITE;
/*!40000 ALTER TABLE `parents` DISABLE KEYS */;
​
INSERT INTO `parents` (`id`, `student_name`, `parent_name`, `parent_mobile`)
VALUES
    (1,'Alex','Barry','0881234567'),
    (2,'Alice','Jessica','0891234567'),
    (3,'Jack','Simon','0876666666'),
    (5,'Ophelia','Tracy','0881111111');
​
/*!40000 ALTER TABLE `parents` ENABLE KEYS */;
UNLOCK TABLES;
​
​
# Dump of table students
# ------------------------------------------------------------
​
DROP TABLE IF EXISTS `students`;
​
CREATE TABLE `students` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(11) DEFAULT NULL,
  `score` int(11) DEFAULT NULL,
  `teacher_note` text,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
​
LOCK TABLES `students` WRITE;
/*!40000 ALTER TABLE `students` DISABLE KEYS */;
​
INSERT INTO `students` (`id`, `name`, `score`, `teacher_note`)
VALUES
    (1,'Alex',100,'Alex did perfectly every day in the class. There is no surprise he got the full mark.'),
    (2,'Alice',70,'Alice needs a lot of improvements.'),
    (3,'Jack',75,'Even it's not the best, Jack has already improved. Keep going.'),
    (4,'Ophelia',0,'Unfortunately, Ophelia missed the test.'),
    (5,'Zack',60,'Zack needs to do better.');
​
/*!40000 ALTER TABLE `students` ENABLE KEYS */;
UNLOCK TABLES;

参考

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值