LangChain实战: 老喻干货店TextToSql

前言

当我们在做项目开发时,数据库设计是项目早期的核心工作之一。我们要考虑业务需要用到的表、关联、索引,并预想出未来核心需求或易产生瓶颈的SQL。当这些事情做完,就可以喝杯咖啡,到前台摸鱼会儿了...

如果你是刚入门数据库学习,也许掌握并熟练使用结构化查询语言SQL有些难度。然而在AIGC时代,我们拥有了一个全新的编程范式, NLP和大模型作为编程助理,让我们可以快介入复杂数据库业务。我们只需要设计好相应的Prompt,LLM就能理解,并给出SQL,让我们去执行。现在在github 上有挺多的TextToSQL的AIGC项目,大家去看看。

对于现在入门学编程的同学来说,AIGC是提升学习力的好工具。在学习每一项编程技能时,我们都可以去想想,去找找,AIGC优化学习路线或工作思路的方法。

AIGC 新的数据库查询范式

上图将是本文的核心,是AIGC重构传统数据库查询业务的流程图。

首先,数据库查询业务的开始端回归文本表达,这得益于LLM的自然语言处理能力。这非常重要,随着大模型能力的提升和Agent的产品力,未来与数据库交互,甚至管理,会由销售、经理等非技术人员来做,极大降低了门槛,AIGC也是通过这种方式进入一切行业。接着,LLM在理解了Question的数据需求后,生成SQL, 并通过LangChain等开发的SQL Agent交给数据库执行,执行结果再由LLM进行处理(比如output格式),最后,用户得到了结果。这就是现在非常流行的Agent概念,这里是SQL Agent,重构原来比较专业,复杂的数据库流程。

  • SQL Agent

AI应用的开发,就是把之前的业务转成AI Agent来实现。简单非常多,将LLM能力发挥好。使用SQL Agent, 用户既不需要知道数据库的结构,也不需要会写SQL。我们只需要talk with 我们的SQL Agent, 就可以得到所需的结果。

创建数据表

假设我们想做一个老喻干货的项目。我们选用SQLite,因为它是轻量级的磁盘文件数据库,没有复杂的服务器布署,非常适合初创项目使用。虽然SQLite是轻量级的,但它支持大部分SQL特性,如事务、触发器和视图等。因此,它非常适合我们需要保存数据但不需要大型数据库系统的移动应用或Web应用。

Python内置了sqlite3模块,可以直接使用。

python 复制代码
# 导入sqlite3库, python 内置
import sqlite3

# 连接到数据库
conn = sqlite3.connect('DryGood.db')
cursor = conn.cursor()

# 执行SQL命令来创建Flowers表
cursor.execute('''
        CREATE TABLE DryGoods (
            ID INTEGER PRIMARY KEY, 
            Name TEXT NOT NULL, 
            Type TEXT NOT NULL, 
            Source TEXT NOT NULL, 
            PurchasePrice REAL, 
            SalePrice REAL
        );
    ''')

# 插入5种干货的数据
dry_goods = [
    ('海带', 'DryFood', '辽宁', 5.2, 8.9),
    ('香菇', 'DryFood', '广东', 26.5, 33.2),
    ('木耳', 'DryFood', '山东', 34.6, 44.2)
]

for item in dry_goods:
    cursor.execute('''
        INSERT INTO DryGoods (Name, Type, Source, PurchasePrice, SalePrice) 
        VALUES (?, ?, ?, ?, ?);
    ''', item)

# 提交更改
conn.commit()

# 关闭数据库连接
conn.close()

首先,我们连接到数据库DryGood,接着创建了一个数据表,DryGoods, 包启ID、类型、产地、进价、货价等字段,还可以有其它的, 此处省略。接着准备了一些初始化数据,循环插入数据表。完成后,关闭数据库的连接。

LangChain来接管数据库

LangChain数据库查询功能还处于实验阶段,我们需要安装langchain-experimental,相应代码:

pip install langchain-experimental

好,神奇的一刻要开始了,LangChain为我们准备了SQLDatabaseChain来完成该工作。

ini 复制代码
# SQLDatabase可以让我们连接数据库
from langchain.utilities import SQLDatabase
# 使用OpenAI大模型
from langchain.llms import OpenAI
# SQLDatabaseChain chain 任务
from langchain_experimental.sql import SQLDatabaseChain

# 连接到DryGood数据库
db = SQLDatabase.from_uri("sqlite:///DryGood.db")

# 创建llm 实例
llm = OpenAI(temperature=0, verbose=True)

# 创建SQLChain实例,目前还在实验阶段
db_chain = SQLDatabaseChain.from_llm(llm, db, api_key='' verbose=True)

# 运行与干货运营相关的问题
response = db_chain.run("有多少种不同的干货?")
print(response)

response = db_chain.run("平均销售价格是多少?")
print(response)

db_chain.run() 查询了一些与干货运营相关的问题,Chain会将这些自然语言转换成SQL语句,并查询数据库,拿到查询结果后,又转换成自然语言输出。下图看输出即可理解。

上Agent

除了通过SQLDatabaseChain完成数据库LLM查询,LangChain还提供了SQL Agent也能完成。在早期,我是这样理解的,LangChain里的Chain是将某种具体任务和LLm结合的工作方式,当某些工作成为一个产品或业务场景使用比较频繁时,LangChain就会推出相应的Agent,来展现魔法。

相比较Chain, SQL Agent 有更强大的能力,比如它肯有更强的纠错能力,数据库操作出错时,它会重新生成并执行新的查询。

ini 复制代码
from langchain.utilities import SQLDatabase
from langchain.llms import OpenAI
# sql agent 
from langchain.agents import create_sql_agent
# 工具包,可以创建并执行查询 检索语法  等
from langchain.agents.agent_toolkits import SQLDatabaseToolkit
from langchain.agents.agent_types import AgentType

# 连接到FlowerShop数据库
db = SQLDatabase.from_uri("sqlite:///DryGood.db")
llm = OpenAI(temperature=0, verbose=True, openai_sdk='')

# 创建SQL Agent
agent_executor = create_sql_agent(
    llm=llm,
    toolkit=SQLDatabaseToolkit(db=db, llm=llm),
    verbose=True,
    agent_type=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
)

# 使用Agent执行SQL查询

questions = [
    "有多少种干货?",
    "平均销售价格是多少?",
]

for question in questions:
    response = agent_executor.run(question)
    print(response)

输出以agent的感觉来了,让我想起来了AutoGen。

总结

  • LangChain通过SQLDatabaseChain,调用大模型,神奇地完成了从自然语言查询任务描述到自然语言的新型SQL查询范式。
  • LangChain Agent 实力强大, textToSQL, 可以开启这个场景的深度学习了。
相关推荐
昨日之日20062 小时前
Moonshine - 新型开源ASR(语音识别)模型,体积小,速度快,比OpenAI Whisper快五倍 本地一键整合包下载
人工智能·whisper·语音识别
浮生如梦_2 小时前
Halcon基于laws纹理特征的SVM分类
图像处理·人工智能·算法·支持向量机·计算机视觉·分类·视觉检测
深度学习lover2 小时前
<项目代码>YOLOv8 苹果腐烂识别<目标检测>
人工智能·python·yolo·目标检测·计算机视觉·苹果腐烂识别
热爱跑步的恒川3 小时前
【论文复现】基于图卷积网络的轻量化推荐模型
网络·人工智能·开源·aigc·ai编程
阡之尘埃5 小时前
Python数据分析案例61——信贷风控评分卡模型(A卡)(scorecardpy 全面解析)
人工智能·python·机器学习·数据分析·智能风控·信贷风控
孙同学要努力7 小时前
全连接神经网络案例——手写数字识别
人工智能·深度学习·神经网络
Eric.Lee20217 小时前
yolo v5 开源项目
人工智能·yolo·目标检测·计算机视觉
其实吧38 小时前
基于Matlab的图像融合研究设计
人工智能·计算机视觉·matlab
丕羽8 小时前
【Pytorch】基本语法
人工智能·pytorch·python
ctrey_8 小时前
2024-11-1 学习人工智能的Day20 openCV(2)
人工智能·opencv·学习