ChatGPT链接本地数据源实战测试

这篇具有很好参考价值的文章主要介绍了ChatGPT链接本地数据源实战测试。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

ChatGPT链接本地数据源实战测试

本文探究ChatGpt等AI机器人能否帮助老板快速的做数据分析?用自然语言同老板进行沟通,满足老板的所有数据分析的诉求?

一、背景

设想这样一个场景:你是某贸易公司的老板,公司所有的日常运转数据都在私域的进销存系统,包括客户、供应商、销售、库存、进货、商品等,你每天需要关注公司运营情况,并且希望商业分析师对当前运营数据给出分析和建议,对公司的运营策略进行及时调整。ChatGpt等AI机器人能否帮助老板快速的做数据分析?用自然语言同老板进行沟通,满足老板的所有数据分析的诉求?

二、工作原理

众所周知,ChatGpt的数据截止只至2021年9月且无法直接联同互联网和局域网(虽然plus账户可以使用插件来扩展chatgpt能力比如联网,读取本地文档等,但输入和输出tokens有限制且月20刀的费用让人望而却步),那我们该如何把chatgpt能力同本地能力结合呢?
为了满足上述的需求,利用LangChain(语言模型驱动的应用程序的开发框架,具体可问ChatGpt)的数据感知能力(将语言模型同其他数据源链接)和代理能力(使语言模型能够与其环境进行交互),让老板通过自然语言同引擎进行交互,用老板思维提问,返回给老板各种维度的数据甚至对应的可视化表达。(下图是网上拿来的LangChain链接本地文件和语言模型的示意图,大致可以说明本次实验的原理)。

ChatGPT链接本地数据源实战测试

三、构造数据模型和测试数据

利用ChatGpt给出进销存系统的数据模型和测试数据,模拟某贸易公司的日常运营数据。

CREATE TABLE Product (
    ProductID INT PRIMARY KEY,
    ProductName VARCHAR(255),
    ProductDescription TEXT,
    CostPrice DECIMAL(10,2),
    SalePrice DECIMAL(10,2)
);

CREATE TABLE Supplier (
    SupplierID INT PRIMARY KEY,
    SupplierName VARCHAR(255),
    ContactPerson VARCHAR(255),
    ContactPhone VARCHAR(20),
    Address TEXT
);

CREATE TABLE Customer (
    CustomerID INT PRIMARY KEY,
    CustomerName VARCHAR(255),
    ContactPerson VARCHAR(255),
    ContactPhone VARCHAR(20),
    Address TEXT
);

CREATE TABLE Inventory (
    InventoryID INT PRIMARY KEY,
    ProductID INT,
    Quantity INT,
    FOREIGN KEY (ProductID) REFERENCES Product(ProductID)
);

CREATE TABLE PurchaseOrder (
    PurchaseOrderID INT PRIMARY KEY,
    SupplierID INT,
    OrderDate DATE,
    FOREIGN KEY (SupplierID) REFERENCES Supplier(SupplierID)
);

CREATE TABLE SalesOrder (
    SalesOrderID INT PRIMARY KEY,
    CustomerID INT,
    OrderDate DATE,
    FOREIGN KEY (CustomerID) REFERENCES Customer(CustomerID)
);

CREATE TABLE PurchaseOrderDetail (
    PurchaseOrderDetailID INT PRIMARY KEY,
    PurchaseOrderID INT,
    ProductID INT,
    Quantity INT,
    Price DECIMAL(10,2),
    FOREIGN KEY (PurchaseOrderID) REFERENCES PurchaseOrder(PurchaseOrderID),
    FOREIGN KEY (ProductID) REFERENCES Product(ProductID)
);

CREATE TABLE SalesOrderDetail (
    SalesOrderDetailID INT PRIMARY KEY,
    SalesOrderID INT,
    ProductID INT,
    Quantity INT,
    Price DECIMAL(10,2),
    FOREIGN KEY (SalesOrderID) REFERENCES SalesOrder(SalesOrderID),
    FOREIGN KEY (ProductID) REFERENCES Product(ProductID)
);
利用ChatGpt自动构造测试数据,检查了主键外键均能一一对应,给ChatGpt点赞。
-- Insert into Product
INSERT INTO Product (ProductID, ProductName, ProductDescription, CostPrice, SalePrice) VALUES
(1, 'Product1', 'Description1', 10.00, 20.00),
(2, 'Product2', 'Description2', 15.00, 25.00),
(3, 'Product3', 'Description3', 20.00, 30.00),
(4, 'Product4', 'Description4', 25.00, 35.00),
(5, 'Product5', 'Description5', 30.00, 40.00),
(6, 'Product6', 'Description6', 35.00, 45.00),
(7, 'Product7', 'Description7', 40.00, 50.00),
(8, 'Product8', 'Description8', 45.00, 55.00),
(9, 'Product9', 'Description9', 50.00, 60.00),
(10, 'Product10', 'Description10', 55.00, 65.00);

-- Insert into Supplier
INSERT INTO Supplier (SupplierID, SupplierName, ContactPerson, ContactPhone, Address) VALUES
(1, 'Supplier1', 'Contact1', '1234567890', 'Address1'),
(2, 'Supplier2', 'Contact2', '1234567890', 'Address2'),
(3, 'Supplier3', 'Contact3', '1234567890', 'Address3'),
(4, 'Supplier4', 'Contact4', '1234567890', 'Address4'),
(5, 'Supplier5', 'Contact5', '1234567890', 'Address5'),
(6, 'Supplier6', 'Contact6', '1234567890', 'Address6'),
(7, 'Supplier7', 'Contact7', '1234567890', 'Address7'),
(8, 'Supplier8', 'Contact8', '1234567890', 'Address8'),
(9, 'Supplier9', 'Contact9', '1234567890', 'Address9'),
(10, 'Supplier10', 'Contact10', '1234567890', 'Address10');

-- Insert into Customer
INSERT INTO Customer (CustomerID, CustomerName, ContactPerson, ContactPhone, Address) VALUES
(1, 'Customer1', 'Contact1', '1234567890', 'Address1'),
(2, 'Customer2', 'Contact2', '1234567890', 'Address2'),
(3, 'Customer3', 'Contact3', '1234567890', 'Address3'),
(4, 'Customer4', 'Contact4', '1234567890', 'Address4'),
(5, 'Customer5', 'Contact5', '1234567890', 'Address5'),
(6, 'Customer6', 'Contact6', '1234567890', 'Address6'),
(7, 'Customer7', 'Contact7', '1234567890', 'Address7'),
(8, 'Customer8', 'Contact8', '1234567890', 'Address8'),
(9, 'Customer9', 'Contact9', '1234567890', 'Address9'),
(10, 'Customer10', 'Contact10', '1234567890', 'Address10');

-- Insert into Inventory
INSERT INTO Inventory (InventoryID, ProductID, Quantity) VALUES
(1, 1, 100),
(2, 2, 200),
(3, 3, 300),
(4, 4, 400),
(5, 5, 500),
(6, 6, 600),
(7, 7, 700),
(8, 8, 800),
(9, 9, 900),
(10, 10, 1000);

-- Insert into PurchaseOrder
INSERT INTO PurchaseOrder (PurchaseOrderID, SupplierID, OrderDate) VALUES
(1, 1, '2023-01-01'),
(2, 2, '2023-02-01'),
(3, 3, '2023-03-01'),
(4, 4, '2023-04-01'),
(5, 5, '2023-05-01'),
(6, 6, '2023-06-01'),
(7, 7, '2023-07-01'),
(8, 8, '2023-08-01'),
(9, 9, '2023-09-01'),
(10, 10, '2023-10-01');

-- Insert into SalesOrder
INSERT INTO SalesOrder (SalesOrderID, CustomerID, OrderDate) VALUES
(1, 1, '2023-01-01'),
(2, 2, '2023-02-01'),
(3, 3, '2023-03-01'),
(4, 4, '2023-04-01'),
(5, 5, '2023-05-01'),
(6, 6, '2023-06-01'),
(7, 7, '2023-07-01'),
(8, 8, '2023-08-01'),
(9, 9, '2023-09-01'),
(10, 10, '2023-10-01');

-- Insert into PurchaseOrderDetail
INSERT INTO PurchaseOrderDetail (PurchaseOrderDetailID, PurchaseOrderID, ProductID, Quantity, Price) VALUES
(1, 1, 1, 10, 10.00),
(2, 2, 2, 20, 15.00),
(3, 3, 3, 30, 20.00),
(4, 4, 4, 40, 25.00),
(5, 5, 5, 50, 30.00),
(6, 6, 6, 60, 35.00),
(7, 7, 7, 70, 40.00),
(8, 8, 8, 80, 45.00),
(9, 9, 9, 90, 50.00),
(10, 10, 10, 100, 55.00);

-- Insert into SalesOrderDetail
INSERT INTO SalesOrderDetail (SalesOrderDetailID, SalesOrderID, ProductID, Quantity, Price) VALUES
(1, 1, 1, 10, 20.00),
(2, 2, 2, 20, 25.00),
(3, 3, 3, 30, 30.00),
(4, 4, 4, 40, 35.00),
(5, 5, 5, 50, 40.00),
(6, 6, 6, 60, 45.00),
(7, 7, 7, 70, 50.00),
(8, 8, 8, 80, 55.00),
(9, 9, 9, 90, 60.00),
(10, 10, 10, 100, 65.00);

 

四、测试环境搭建

1、数据库采用本地搭建的mysql 8.0 ;
2、大语言模型采用OpenAI,GPT3 模型;
3、LangChain 0.0.191;
3、数据用ChatGpt自动构造的测试数据,故不存在数据安全和合规问题;

 

五、实验测试过程

本次实验测试过程取老板在日常中比较常用的场景进行测试,比如查供应商、商品、库存、销量、营收和利润等。

场景1 :

输入:我们总共有多少个供应商,给我们供应了多少种商品?

生成sql:

SELECT COUNT(DISTINCT SupplierID) AS 'Number of Suppliers', COUNT(DISTINCT ProductID) AS 'Number of Products' FROM Supplier, Product

输出:Final Answer: There are 10 suppliers and 10 products.

结论:答案正确✅

引擎分析的过程如下:

ChatGPT链接本地数据源实战测试

场景2 :

输入:每一种商品的库存有多少?
生成的sql:
SELECT ProductID, Quantity FROM Inventory

输出:Final Answer: The quantity of each product in the Inventory table is: ProductID 1 has 100, ProductID 2 has 200, ProductID 3 has 300, ProductID 4 has 400, ProductID 5 has 500, ProductID 6 has 600, ProductID 7 has 700, ProductID 8 has 800, ProductID 9 has 900, ProductID 10 has 1000.

结论:答案正确✅
引擎分析的过程如下:

      ChatGPT链接本地数据源实战测试

场景3 :

输入:按月给出所有商品的销量和库存?

生成的sql:  
SELECT MONTH(sod.SalesOrderID) AS Month, p.ProductName, SUM(sod.Quantity) AS Sales, i.Quantity AS Inventory FROM SalesOrderDetail sod INNERJOIN Product p ON sod.ProductID = p.ProductID INNER JOIN Inventory i ON p.ProductID = i.ProductID GROUP BY Month, p.ProductName, i.InventoryID ORDER BY Month ASC LIMIT 10 

输出:Final Answer: The sales and inventory for each product by month are: Product1 (10 sales, 100 inventory), Product2 (20 sales, 200 inventory), Product3 (30 sales, 300 inventory), Product4 (40 sales, 400 inventory), Product5 (50 sales, 500 inventory), Product6 (60 sales, 600 inventory), Product7 (70 sales, 700 inventory), Product8 (80 sales, 800 inventory), Product9 (90 sales, 900 inventory), Product10 (100 sales, 1000 inventory).   

结论:月度日期不对,部分正确

引擎分析的过程如下:                   

ChatGPT链接本地数据源实战测试

                 

ChatGPT链接本地数据源实战测试

            

场景4 :

输入:给出每个月的销量和销售额?

生成的sql:
SELECT MONTH(OrderDate) AS Month, SUM(Quantity) AS SalesQuantity, SUM(Quantity * Price) AS SalesAmount FROM SalesOrder JOIN SalesOrderDetail ON SalesOrder.SalesOrderID = SalesOrderDetail.SalesOrderID GROUP BY MONTH(OrderDate) ORDER BY Month ASC LIMIT 10
 

结论:答案正确✅

引擎分析的过程如下:                   

                                   

场景5 :

输入:给出每个月的销量,营收和利润?
生成的sql:
SELECT MONTH(OrderDate) AS Month, SUM(Quantity) AS Sales, SUM(Quantity * Price) AS Revenue, SUM(Quantity * Price) - SUM(Quantity * CostPrice) AS Profit FROM SalesOrder JOIN SalesOrderDetail ON SalesOrder.SalesOrderID = SalesOrderDetail.SalesOrderID JOIN ProductON SalesOrderDetail.ProductID = Product.ProductID GROUP BY MONTH(OrderDate) ORDER BY Month ASC LIMIT 10 
输出:Final Answer: The sales, revenue, and profit for each month are: Month 1: Sales 10, Revenue 200.00, Profit 100.00; Month 2: Sales 20, Revenue 500.00, Profit 200.00; Month 3: Sales 30, Revenue 900.00, Profit 300.00; Month 4: Sales 40, Revenue 1400.00, Profit 400.00; Month 5: Sales 50, Revenue 2000.00, Profit 500.00; Month 6: Sales 60, Revenue 2700.00, Profit 600.00; Month 7: Sales 70, Revenue 3500.00, Profit 700.00; Month 8: Sales 80, Revenue 4400.00, Profit 800.00; Month 9: Sales 90, Revenue 5400.00, Profit 900.00; Month 10: Sales 100, Revenue 6500.00, Profit 1000.00.
结论:答案正确✅

引擎分析过程:

ChatGPT链接本地数据源实战测试
                 

ChatGPT链接本地数据源实战测试

                               

六、总结文章来源地址https://www.toymoban.com/news/detail-571907.html

LangChain能够链接本地数据源到大语言模型,并且利用大语言模型完成指定任务,准确率较高,通过引擎的分析思考过程来看,ChatGpt的思维逻辑类似人类,也会写错sql报错,然后不停重试直至得到最终结果,但仍有一些风险和改进点:
1、数据安全和合规风险,这里直接链接了本地数据库,我这里是构造的测试数据,真正的业务场景不需要,可以等通义千问的开放。
2、由于ChatGptd的API的输入输出有4100个Tokens的限制,针对复杂任务,容易超过限制被终端,因此不能一次输入过多的问题,这个可以通过prompt template来设定一些常用模板来解决。
3、这次实验最终的输出是英文,这个可以设定引擎的语言参数以及输出结果进行结构化返回,前端页面实现可视化图形展现,这次主要目的为了测试SQL生成能力,展示就不赘述。
翻译|慈修

到了这里,关于ChatGPT链接本地数据源实战测试的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 点餐小程序实战教程04-餐品分类及餐品数据源设计

    我们已经利用一定篇幅实现了店铺信息展示的功能,本篇我们来实现一下点餐的逻辑。点餐的逻辑有以下: 用户打开点餐页面,利用侧边栏导航来切换菜品 初始状态用户未点餐,显示一个加号的图标 点击加号显示数量,需要将菜品加入购物车,购物车显示选购菜品的数量和

    2024年02月05日
    浏览(24)
  • 【Spring AOP + 自定义注解 + 动态数据源 实现主从库切换&读写分离】—— 案例实战

                                                 💧 S p r i n g A O P + 主从数据源切换 + 读写分离 + 自定义注解案例实战! color{#FF1493}{Spring AOP + 主从数据源切换 + 读写分离 + 自定义注解 案例实战!} Sp r in g A OP + 主从数据源切换 + 读写分离 + 自定义注解案例

    2024年02月15日
    浏览(27)
  • SpringBoot -02 SpringBoot整合Mybatis、Druid数据源、单元测试、JSP

    mybatis起步依赖 mysql启动依赖 数据源配置 mybatis相关配置 加载mybatis配置文件 mybatis别名配置 日志配置 加载mapper映射文件配置文件 http://localhost:8080/users Druid连接池后台监控:http://localhost:8080/druid/index.html SpringBoot对JSP的支持不是很友好,所以JSP很少被使用 springboot 不支持jsp 但是

    2024年02月06日
    浏览(79)
  • 微服务应用性能分析实战07 数据可视化:多数据源让 Grafana 监控报警更高效

    这一讲我将带领你学习可视化监控套件 Grafana。Grafana 是一个开源的数据可视化的平台,所以它既不会监控应用,也不会产生监控数据,更不会对接原始数据进行分析存储。 它仅专注数据可视化本身 。 本节内容,会先通过与上一节 Kibana 可视化套件对比,来讲述 Grafana 的核心

    2024年02月05日
    浏览(37)
  • shardingsphere5.x整合springboot+dynamic-datasource多数据源实战

    本文是在springboot整合分库分表的基础上添加了多数据源,建议先看上一篇shardingsphere5.x整合springboot分库分表实战_任人人人呢的博客-CSDN博客 pom.xml配置: yml配置: 添加多数据源配置类: 添加多数据源常量类: Mapper文件

    2024年02月13日
    浏览(33)
  • 【flink番外篇】15、Flink维表实战之6种实现方式-维表来源于第三方数据源

    一、Flink 专栏 Flink 专栏系统介绍某一知识点,并辅以具体的示例进行说明。 1、Flink 部署系列 本部分介绍Flink的部署、配置相关基础内容。 2、Flink基础系列 本部分介绍Flink 的基础部分,比如术语、架构、编程模型、编程指南、基本的datastream api用法、四大基石等内容。 3、

    2024年01月21日
    浏览(54)
  • springboot整合多数据源的配置以及动态切换数据源,注解切换数据源

    在许多应用程序中,可能需要使用多个数据库或数据源来处理不同的业务需求。Spring Boot提供了简便的方式来配置和使用多数据源,使开发人员能够轻松处理多个数据库连接。如果你的项目中可能需要随时切换数据源的话,那我这篇文章可能能帮助到你 ℹ️:这里对于pom文件

    2024年02月10日
    浏览(42)
  • NamedParameterJdbcTemplate多数据源指定数据源

    实战例子记录 pom config NamedParameterJdbcTemplate(动态sql调用)

    2024年02月08日
    浏览(39)
  • 数据源作用以及spring配置数据源

    数据源,简单理解为数据源头,提供了应用程序所需要数据的位置。数据源保证了应用程序与目标数据之间交互的规范和协议,它可以是数据库,文件系统等等。其中数据源定义了位置信息,用户验证信息和交互时所需的一些特性的配置,同时它封装了如何建立与数据源的连

    2024年02月07日
    浏览(44)
  • SpringBoot——动态数据源(多数据源自动切换)

    日常的业务开发项目中只会配置一套数据源,如果需要获取其他系统的数据往往是通过调用接口, 或者是通过第三方工具比如kettle将数据同步到自己的数据库中进行访问。 但是也会有需要在项目中引用多数据源的场景。比如如下场景: 自研数据迁移系统,至少需要新、老两

    2024年02月16日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包