自研chat2DB,使用LangChain完成GPT本地mysql数据分析

火山方舟向量数据库大模型

你是否想过使用大语言模型(LLM)来分析你的商务数据?你是否想过让GPT-3或其他LLM来帮助你查询、处理、可视化你的本地mysql数据库中的数据?如果你的答案是肯定的,那么这篇文章就是为你准备的。

在这篇文章中,我将介绍一个强大的框架,叫做LangChain ,它可以让你轻松地使用LLM来构建端到端的数据分析应用程序。我还将展示如何使用LangChain完成GPT本地mysql数据分析的具体步骤,并给出一些示例代码和图片。

什么是LangChain?

picture.image

LangChain是一个开源的框架,旨在帮助开发者使用语言模型构建应用程序。我们相信,最有力和最有差异化的应用程序不仅仅是通过API调用语言模型,而且还要:

  • 数据感知:将语言模型连接到其他数据源
  • 自主性:允许语言模型与其环境交互

因此,LangChain框架的设计目标是使这些类型的应用程序成为可能。LangChain框架提供了两个主要的价值主张:

picture.image

  • 组件:LangChain提供了一些必要的组件的模块化抽象,以便与语言模型协作。LangChain还有这些抽象的实现集合。这些组件无论你是否使用LangChain框架的其他部分,都很容易使用。
  • 针对特定用例的链:链可以被认为是以特定方式组装这些组件,以便最好地完成特定用例。这些链旨在作为一个更高级别的接口,通过它人们可以轻松地开始一个特定用例。这些链也被设计为可定制的。

因此,我们将以下文档分为这两个价值主张。在本文档中,我们以高层次和与语言无关的方式介绍组件和用例。对于使用这些组件和解决这些用例的特定于语言的方法,请参阅页面顶部链接的特定于语言的部分¹。

如何使用LangChain完成GPT本地mysql数据分析?

假设你有一个本地mysql数据库,里面存储了一些商务相关的数据,比如客户信息、销售记录、产品库存等。你想要使用GPT-3或其他LLM来对这些数据进行一些查询、分析和可视化,以便得到一些有价值的洞察力和建议。那么,你可以使用LangChain来实现这个目标。下面是具体步骤:

mysql数据库基础示例

首先,你需要连接到你的mysql数据库。为了方便起见,我们假设你已经安装了mysql服务器,并创建了一个名为business的数据库,其中包含一个名为customers的表格,如下所示:

idnameemailphoneaddresscitystatezip
1Alicealice@example.com123-456-7890123 Main St.New YorkNY10001
2Bobbob@example.com234-567-8901456 Elm St.Los AngelesCA90001
3Charliecharlie@example.com345-678-9012789 Pine St.ChicagoIL60001
........................

为了连接到mysql数据库,你可以使用LangChain提供的一个组件,叫做SQLDatabaseChain 。这是一个针对特定用例的链,它可以让你使用LLM来与SQL数据库交互。你只需要提供一些连接参数,比如数据库名称、用户名、密码等,就可以创建一个SQLDatabaseChain的实例。然后,你可以使用这个实例来发送请求给LLM,或者调用一些函数来访问数据库。例如,你可以使用Python语言来编写以下代码:


        
          
# 导入LangChain模块  
import langchain as lc  
  
# 创建一个SQLDatabaseChain的实例,连接到本地mysql数据库  
db = lc.SQLDatabaseChain(  
    database="business", # 数据库名称  
    user="root", # 用户名  
    password="123456", # 密码  
    host="localhost", # 主机地址  
    port=3306, # 端口号  
    dialect="mysql" # 数据库方言  
)  
  
# 启动sql检查特性,自动修复错误sql  
db.enable_sql_check()  
  
# 设施返回GPT迭代思考的中间步骤  
db.enable_intermediate_steps()  

      

这样,你就成功地使用SQLDatabaseChain完成了mysql数据库的连接。接下来,你可以使用这个实例来查询、分析和可视化数据库中的数据。

查询数据库中的表格

要查询数据库中的表格,你可以使用SQLDatabaseChain的query方法,它接受一个字符串参数,表示你想要让LLM执行的SQL语句。例如,你可以写:


        
          
# 查询customers表格中所有客户的姓名和邮箱  
result = db.query("select name, email from customers")  

      

这样,LLM会尝试执行这条SQL语句,并返回一个结果对象,它包含了查询结果的表格形式和文本形式。你可以使用result.tableresult.text来访问这两种形式。例如,你可以打印出查询结果:


        
          
# 打印查询结果的表格形式  
print(result.table)  
  
# 打印查询结果的文本形式  
print(result.text)  

      

输出可能是这样的:


        
          
| name | email |  
|------|-------|  
| Alice | alice@example.com |  
| Bob | bob@example.com |  
| Charlie | charlie@example.com |  
| ... | ... |  
  
The query returned 10 rows, with the following columns: name and email. The first row is Alice, with the email alice@example.com. The second row is Bob, with the email bob@example.com. The third row is Charlie, with the email charlie@example.com. And so on.  

      

你可能注意到了,LLM不仅返回了查询结果的表格形式,还返回了查询结果的文本形式,这是一个很有用的特性,因为它可以让你更容易地理解查询结果的含义和结构。而且,如果你输入了错误或不合法的SQL语句,LLM会尝试自动修复它,并告诉你它做了什么修改。例如,如果你输入了:


        
          
# 查询customers表格中所有客户的姓名和邮箱(故意写错)  
result = db.query("select name, emial from customers")  

      

输出可能是这样的:


        
          
The query was modified to: select name, email from customers. The column emial was corrected to email.  
  
| name | email |  
|------|-------|  
| Alice | alice@example.com |  
| Bob | bob@example.com |  
| Charlie | charlie@example.com |  
| ... | ... |  
  
The query returned 10 rows, with the following columns: name and email. The first row is Alice, with the email alice@example.com. The second row is Bob, with the email bob@example.com. The third row is Charlie, with the email charlie@example.com. And so on.  

      

你可以看到,LLM发现了emial这个拼写错误,并自动将其改为email。同时,它还告诉了你它做了什么修改。这样,你就不用担心输入错误或不合法的SQL语句了。

除了直接输入SQL语句,你还可以使用自然语言来描述你想要查询的内容,LLM会尝试将其转换为SQL语句,并执行它。例如,你可以写:


        
          
# 使用自然语言查询customers表格中住在纽约的客户的数量(生成SQL语句)  
result = db.query("how many customers live in New York?")  

      

输出可能是这样的:


        
          
The query was translated to: select count(*) from customers where city = 'New York'  
  
| count(*) |  
|----------|  
| 3 |  
  
The query returned 1 row, with the following column: count(*). The value is 3, which means there are 3 customers who live in New York.  

      

你可以看到,LLM成功地将自然语言转换为SQL语句,并执行它。同时,它还返回了查询结果的表格形式和文本形式,让你更容易地理解查询结果的含义。这样,你就可以使用更自然和灵活的方式来查询数据库中的表格了。

分析数据库中的数据

要分析数据库中的数据,你可以使用SQLDatabaseChain的analyze方法,它接受一个字符串参数,表示你想要让LLM对数据进行什么样的分析。例如,你可以写:


        
          
# 分析customers表格中客户的地理分布(生成分析报告)  
result = db.analyze("what is the geographic distribution of customers?")  

      

这样,LLM会尝试对数据进行相应的分析,并返回一个结果对象,它包含了分析结果的文本形式和图片形式。你可以使用result.textresult.image来访问这两种形式。例如,你可以打印出分析结果:


        
          
# 打印分析结果的文本形式  
print(result.text)  
  
# 打印分析结果的图片形式  
print(result.image)  

      

输出是这样的:


        
          
The analysis shows that the customers are distributed across 8 states,   
with the most customers in California (4),   
followed by New York (3), Illinois (2), and Texas (2).  
The other states have one customer each.  
The geographic distribution of customers can be visualized by a pie chart,  
as shown below.  

      

picture.image你可以看到,LLM返回了一个分析报告,用文本和图片来描述数据的特征和趋势。这样,你就可以使用更高级和智能的方式来分析数据库中的数据了。

可视化数据库中的数据

要可视化数据库中的数据,你可以使用SQLDatabaseChain的visualize方法,它接受一个字符串参数,表示你想要让LLM用什么样的图表来可视化数据。例如,你可以写:


        
          
# 使用柱状图可视化customers表格中各个城市的客户数量(生成图表)  
result = db.visualize("a bar chart of customer counts by city")  

      

这样,LLM会尝试用相应的图表来可视化数据,并返回一个结果对象,它包含了图表的图片形式和文本形式。你可以使用result.imageresult.text来访问这两种形式。例如,你可以打印出图表:


        
          
# 打印图表的图片形式  
print(result.image)  
  
# 打印图表的文本形式  
print(result.text)  

      

输出可能是这样的:picture.image


        
          
The chart shows that the customers are distributed across 8 states,   
with the most customers in California (4),   
followed by New York (3), Illinois (2), and Texas (2).  
The other states have one customer each. The total number of customers is 15.  

      

你可以看到,LLM返回了一个图表,用图片和文本来展示数据的分布和比较。这样,你就可以使用更美观和直观的方式来可视化数据库中的数据了。

总结

在这篇文章中,我介绍了一个强大的框架,叫做LangChain ,它可以让你轻松地使用LLM来构建端到端的数据分析应用程序。我还展示了如何使用LangChain完成GPT本地mysql数据分析的具体步骤,并给出了一些示例代码和图片。你可以看到,使用LangChain,你可以用更自然、更灵活、更智能、更高级的方式来查询、分析和可视化你的商务数据,从而得到更有价值的洞察力和建议。希望你喜欢这篇文章,也希望你能用LangChain来构建你自己的数据分析应用程序。谢谢!

今天的内容就到这里,如果老铁觉得还行,可以来一波三连,感谢!

PS

AI小智技术交流群(技术交流、摸鱼、白嫖课程为主)又不定时开放了,感兴趣的朋友,可以在下方公号内回复:666,即可进入。

老规矩

,道友们还记得么,

右下角的 “在看” 点一下

, 如果感觉文章内容不错的话,记得分享朋友圈让更多的人知道!

0
0
0
0
关于作者
关于作者

文章

0

获赞

0

收藏

0

相关资源
DevOps 在字节移动研发中的探索和实践
在日益复杂的APP工程架构下,如何保证APP能高效开发,保障团队效能和工程质量?本次将结合字节内部应用的事件案例,介绍DevOps团队对移动研发效能建设的探索和思考。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论