首页 > 数据库 >小北的字节跳动青训营与从SQL到自然语言查询的数据库新范式——连接数据库:通过链和代理查询鲜花信息(持续更新中~~~)

小北的字节跳动青训营与从SQL到自然语言查询的数据库新范式——连接数据库:通过链和代理查询鲜花信息(持续更新中~~~)

时间:2024-11-17 11:14:35浏览次数:3  
标签:Zhiyilang 数据库 查询 blog csdn details 青训营 article net

  前言

       最近,字节跳动的青训营再次扬帆起航,作为第二次参与其中的小北,深感荣幸能借此机会为那些尚未了解青训营的友友们带来一些详细介绍。青训营不仅是一个技术学习与成长的摇篮,更是一个连接未来与梦想的桥梁~

小北的青训营 X MarsCode 技术训练营——AI 加码,字节跳动青训营入营考核解答(持续更新中~~~)-CSDN博客https://blog.csdn.net/Zhiyilang/article/details/143384787?sharetype=blogdetail&sharerId=143384787&sharerefer=PC&sharesource=Zhiyilang&spm=1011.2480.3001.8118​编辑https://blog.csdn.net/Zhiyilang/article/details/143384787?sharetype=blogdetail&sharerId=143384787&sharerefer=PC&sharesource=Zhiyilang&spm=1011.2480.3001.8118https://blog.csdn.net/Zhiyilang/article/details/143384787?sharetype=blogdetail&sharerId=143384787&sharerefer=PC&sharesource=Zhiyilang&spm=1011.2480.3001.8118https://blog.csdn.net/Zhiyilang/article/details/143384787?sharetype=blogdetail&sharerId=143384787&sharerefer=PC&sharesource=Zhiyilang&spm=1011.2480.3001.8118https://blog.csdn.net/Zhiyilang/article/details/143384787?sharetype=blogdetail&sharerId=143384787&sharerefer=PC&sharesource=Zhiyilang&spm=1011.2480.3001.8118https://blog.csdn.net/Zhiyilang/article/details/143384787?sharetype=blogdetail&sharerId=143384787&sharerefer=PC&sharesource=Zhiyilang&spm=1011.2480.3001.8118https://blog.csdn.net/Zhiyilang/article/details/143384787?sharetype=blogdetail&sharerId=143384787&sharerefer=PC&sharesource=Zhiyilang&spm=1011.2480.3001.8118https://blog.csdn.net/Zhiyilang/article/details/143384787?sharetype=blogdetail&sharerId=143384787&sharerefer=PC&sharesource=Zhiyilang&spm=1011.2480.3001.8118​编辑https://blog.csdn.net/Zhiyilang/article/details/143384787?sharetype=blogdetail&sharerId=143384787&sharerefer=PC&sharesource=Zhiyilang&spm=1011.2480.3001.8118​编辑https://blog.csdn.net/Zhiyilang/article/details/143384787?sharetype=blogdetail&sharerId=143384787&sharerefer=PC&sharesource=Zhiyilang&spm=1011.2480.3001.8118https://blog.csdn.net/Zhiyilang/article/details/143384787?sharetype=blogdetail&sharerId=143384787&sharerefer=PC&sharesource=Zhiyilang&spm=1011.2480.3001.8118​编辑https://blog.csdn.net/Zhiyilang/article/details/143384787?sharetype=blogdetail&sharerId=143384787&sharerefer=PC&sharesource=Zhiyilang&spm=1011.2480.3001.8118https://blog.csdn.net/Zhiyilang/article/details/143384787?sharetype=blogdetail&sharerId=143384787&sharerefer=PC&sharesource=Zhiyilang&spm=1011.2480.3001.8118icon-default.png?t=O83Ahttps://blog.csdn.net/Zhiyilang/article/details/143384787?sharetype=blogdetail&sharerId=143384787&sharerefer=PC&sharesource=Zhiyilang&spm=1011.2480.3001.8118

小北的字节跳动青训营与 LangChain 实战课:探索 AI 技术的新边界(持续更新中~~~)-CSDN博客​编辑https://blog.csdn.net/Zhiyilang/article/details/143454165https://blog.csdn.net/Zhiyilang/article/details/143454165https://blog.csdn.net/Zhiyilang/article/details/143454165https://blog.csdn.net/Zhiyilang/article/details/143454165https://blog.csdn.net/Zhiyilang/article/details/143454165https://blog.csdn.net/Zhiyilang/article/details/143454165https://blog.csdn.net/Zhiyilang/article/details/143454165​编辑https://blog.csdn.net/Zhiyilang/article/details/143454165​编辑https://blog.csdn.net/Zhiyilang/article/details/143454165https://blog.csdn.net/Zhiyilang/article/details/143454165​编辑https://blog.csdn.net/Zhiyilang/article/details/143454165https://blog.csdn.net/Zhiyilang/article/details/143454165icon-default.png?t=O83Ahttps://blog.csdn.net/Zhiyilang/article/details/143454165
小北的字节跳动青训营与LangChain系统安装和快速入门学习(持续更新中~~~)。-CSDN博客​编辑https://blog.csdn.net/Zhiyilang/article/details/143455380https://blog.csdn.net/Zhiyilang/article/details/143455380https://blog.csdn.net/Zhiyilang/article/details/143455380https://blog.csdn.net/Zhiyilang/article/details/143455380https://blog.csdn.net/Zhiyilang/article/details/143455380https://blog.csdn.net/Zhiyilang/article/details/143455380https://blog.csdn.net/Zhiyilang/article/details/143455380​编辑https://blog.csdn.net/Zhiyilang/article/details/143455380​编辑https://blog.csdn.net/Zhiyilang/article/details/143455380https://blog.csdn.net/Zhiyilang/article/details/143455380​编辑https://blog.csdn.net/Zhiyilang/article/details/143455380https://blog.csdn.net/Zhiyilang/article/details/143455380icon-default.png?t=O83Ahttps://blog.csdn.net/Zhiyilang/article/details/143455380

小北的字节跳动青训营用LangChain打造“易速鲜花”内部员工知识库问答系统(持续更新中~~~)-CSDN博客​编辑https://blog.csdn.net/Zhiyilang/article/details/143456544https://blog.csdn.net/Zhiyilang/article/details/143456544https://blog.csdn.net/Zhiyilang/article/details/143456544https://blog.csdn.net/Zhiyilang/article/details/143456544https://blog.csdn.net/Zhiyilang/article/details/143456544https://blog.csdn.net/Zhiyilang/article/details/143456544https://blog.csdn.net/Zhiyilang/article/details/143456544​编辑https://blog.csdn.net/Zhiyilang/article/details/143456544​编辑https://blog.csdn.net/Zhiyilang/article/details/143456544https://blog.csdn.net/Zhiyilang/article/details/143456544​编辑https://blog.csdn.net/Zhiyilang/article/details/143456544https://blog.csdn.net/Zhiyilang/article/details/143456544icon-default.png?t=O83Ahttps://blog.csdn.net/Zhiyilang/article/details/143456544小北的字节跳动青训营与提示工程(上):用少样本FewShotTemplate和ExampleSelector创建应景文案(持续更新中~~~)-CSDN博客https://blog.csdn.net/Zhiyilang/article/details/143468624?sharetype=blogdetail&sharerId=143468624&sharerefer=PC&sharesource=Zhiyilang&spm=1011.2480.3001.8118https://blog.csdn.net/Zhiyilang/article/details/143468624?sharetype=blogdetail&sharerId=143468624&sharerefer=PC&sharesource=Zhiyilang&spm=1011.2480.3001.8118https://blog.csdn.net/Zhiyilang/article/details/143468624?sharetype=blogdetail&sharerId=143468624&sharerefer=PC&sharesource=Zhiyilang&spm=1011.2480.3001.8118https://blog.csdn.net/Zhiyilang/article/details/143468624?sharetype=blogdetail&sharerId=143468624&sharerefer=PC&sharesource=Zhiyilang&spm=1011.2480.3001.8118​编辑https://blog.csdn.net/Zhiyilang/article/details/143468624?sharetype=blogdetail&sharerId=143468624&sharerefer=PC&sharesource=Zhiyilang&spm=1011.2480.3001.8118​编辑https://blog.csdn.net/Zhiyilang/article/details/143468624?sharetype=blogdetail&sharerId=143468624&sharerefer=PC&sharesource=Zhiyilang&spm=1011.2480.3001.8118https://blog.csdn.net/Zhiyilang/article/details/143468624?sharetype=blogdetail&sharerId=143468624&sharerefer=PC&sharesource=Zhiyilang&spm=1011.2480.3001.8118​编辑https://blog.csdn.net/Zhiyilang/article/details/143468624?sharetype=blogdetail&sharerId=143468624&sharerefer=PC&sharesource=Zhiyilang&spm=1011.2480.3001.8118https://blog.csdn.net/Zhiyilang/article/details/143468624?sharetype=blogdetail&sharerId=143468624&sharerefer=PC&sharesource=Zhiyilang&spm=1011.2480.3001.8118icon-default.png?t=O83Ahttps://blog.csdn.net/Zhiyilang/article/details/143468624?sharetype=blogdetail&sharerId=143468624&sharerefer=PC&sharesource=Zhiyilang&spm=1011.2480.3001.8118小北的字节跳动青训营与提示工程(下):用思维链和思维树提升模型思考质量(持续更新中~~~)-CSDN博客https://blog.csdn.net/Zhiyilang/article/details/143494432https://blog.csdn.net/Zhiyilang/article/details/143494432https://blog.csdn.net/Zhiyilang/article/details/143494432​编辑https://blog.csdn.net/Zhiyilang/article/details/143494432​编辑https://blog.csdn.net/Zhiyilang/article/details/143494432https://blog.csdn.net/Zhiyilang/article/details/143494432​编辑https://blog.csdn.net/Zhiyilang/article/details/143494432https://blog.csdn.net/Zhiyilang/article/details/143494432icon-default.png?t=O83Ahttps://blog.csdn.net/Zhiyilang/article/details/143494432小北的字节跳动青训营与调用模型:调用模型:OpenAI API vs 微调开源Llama2/ChatGLM(持续更新中~~~)-CSDN博客https://blog.csdn.net/Zhiyilang/article/details/143495077https://blog.csdn.net/Zhiyilang/article/details/143495077​编辑https://blog.csdn.net/Zhiyilang/article/details/143495077​编辑https://blog.csdn.net/Zhiyilang/article/details/143495077https://blog.csdn.net/Zhiyilang/article/details/143495077​编辑https://blog.csdn.net/Zhiyilang/article/details/143495077https://blog.csdn.net/Zhiyilang/article/details/143495077icon-default.png?t=O83Ahttps://blog.csdn.net/Zhiyilang/article/details/143495077小北的字节跳动青训营与LangChain实战课:深入探索输出解析器与Pydantic解析器重构(持续更新中~~~)-CSDN博客https://blog.csdn.net/Zhiyilang/article/details/143497148?sharetype=blogdetail&sharerId=143497148&sharerefer=PC&sharesource=Zhiyilang&spm=1011.2480.3001.8118​编辑https://blog.csdn.net/Zhiyilang/article/details/143497148?sharetype=blogdetail&sharerId=143497148&sharerefer=PC&sharesource=Zhiyilang&spm=1011.2480.3001.8118​编辑https://blog.csdn.net/Zhiyilang/article/details/143497148?sharetype=blogdetail&sharerId=143497148&sharerefer=PC&sharesource=Zhiyilang&spm=1011.2480.3001.8118https://blog.csdn.net/Zhiyilang/article/details/143497148?sharetype=blogdetail&sharerId=143497148&sharerefer=PC&sharesource=Zhiyilang&spm=1011.2480.3001.8118​编辑https://blog.csdn.net/Zhiyilang/article/details/143497148?sharetype=blogdetail&sharerId=143497148&sharerefer=PC&sharesource=Zhiyilang&spm=1011.2480.3001.8118https://blog.csdn.net/Zhiyilang/article/details/143497148?sharetype=blogdetail&sharerId=143497148&sharerefer=PC&sharesource=Zhiyilang&spm=1011.2480.3001.8118icon-default.png?t=O83Ahttps://blog.csdn.net/Zhiyilang/article/details/143497148?sharetype=blogdetail&sharerId=143497148&sharerefer=PC&sharesource=Zhiyilang&spm=1011.2480.3001.8118小北的字节跳动青训营与LangChain实战课:深入探索Chain的奥秘(上)写一篇完美鲜花推文?用SequencialChain链接不同的组件(持续更新中~~~)-CSDN博客​编辑https://blog.csdn.net/Zhiyilang/article/details/143501151?sharetype=blogdetail&sharerId=143501151&sharerefer=PC&sharesource=Zhiyilang&spm=1011.2480.3001.8118​编辑https://blog.csdn.net/Zhiyilang/article/details/143501151?sharetype=blogdetail&sharerId=143501151&sharerefer=PC&sharesource=Zhiyilang&spm=1011.2480.3001.8118https://blog.csdn.net/Zhiyilang/article/details/143501151?sharetype=blogdetail&sharerId=143501151&sharerefer=PC&sharesource=Zhiyilang&spm=1011.2480.3001.8118​编辑https://blog.csdn.net/Zhiyilang/article/details/143501151?sharetype=blogdetail&sharerId=143501151&sharerefer=PC&sharesource=Zhiyilang&spm=1011.2480.3001.8118https://blog.csdn.net/Zhiyilang/article/details/143501151?sharetype=blogdetail&sharerId=143501151&sharerefer=PC&sharesource=Zhiyilang&spm=1011.2480.3001.8118icon-default.png?t=O83Ahttps://blog.csdn.net/Zhiyilang/article/details/143501151?sharetype=blogdetail&sharerId=143501151&sharerefer=PC&sharesource=Zhiyilang&spm=1011.2480.3001.8118小北的字节跳动青训营与LangChain实战课:深入探索Chain的奥秘(下)想学“育花”还是“插花”?用RouterChain确定客户意图——(持续更新中~~~)-CSDN博客​编辑https://blog.csdn.net/Zhiyilang/article/details/143504340?spm=1001.2014.3001.5501https://blog.csdn.net/Zhiyilang/article/details/143504340?spm=1001.2014.3001.5501​编辑https://blog.csdn.net/Zhiyilang/article/details/143504340?spm=1001.2014.3001.5501https://blog.csdn.net/Zhiyilang/article/details/143504340?spm=1001.2014.3001.5501icon-default.png?t=O83Ahttps://blog.csdn.net/Zhiyilang/article/details/143504340?spm=1001.2014.3001.5501小北的字节跳动青训营与记忆:通过Memory记住客户上次买花时的对话细节——探索对话中的记忆机制(持续更新中~~~)-CSDN博客​编辑https://blog.csdn.net/Zhiyilang/article/details/143579889https://blog.csdn.net/Zhiyilang/article/details/143579889​编辑https://blog.csdn.net/Zhiyilang/article/details/143579889https://blog.csdn.net/Zhiyilang/article/details/143579889icon-default.png?t=O83Ahttps://blog.csdn.net/Zhiyilang/article/details/143579889nullicon-default.png?t=O83Ahttps://blog.csdn.net/Zhiyilang/article/details/143692662?sharetype=blogdetail&sharerId=143692662&sharerefer=PC&sharesource=Zhiyilang&spm=1011.2480.3001.8118小北的字节跳动青训营与深入探索AgentExecutor的运行机制——代理(中):AgentExecutor究竟是怎样驱动模型和工具完成任务的?(持续更新中~~~)-CSDN博客https://blog.csdn.net/Zhiyilang/article/details/143710782?sharetype=blogdetail&sharerId=143710782&sharerefer=PC&sharesource=Zhiyilang&spm=1011.2480.3001.8118​编辑https://blog.csdn.net/Zhiyilang/article/details/143710782?sharetype=blogdetail&sharerId=143710782&sharerefer=PC&sharesource=Zhiyilang&spm=1011.2480.3001.8118https://blog.csdn.net/Zhiyilang/article/details/143710782?sharetype=blogdetail&sharerId=143710782&sharerefer=PC&sharesource=Zhiyilang&spm=1011.2480.3001.8118icon-default.png?t=O83Ahttps://blog.csdn.net/Zhiyilang/article/details/143710782?sharetype=blogdetail&sharerId=143710782&sharerefer=PC&sharesource=Zhiyilang&spm=1011.2480.3001.8118小北的字节跳动青训营与LangChain实战课:深入探索复杂代理类型——代理(下):结构化工具对话、Self-Ask with Search以及Plan and execute代理(持续更新中~~~)-CSDN博客icon-default.png?t=O83Ahttps://blog.csdn.net/Zhiyilang/article/details/143711201

小北的字节跳动青训营与LangChain中的强大工具及其使用指南——工具和工具箱:LangChain中的Tool和Toolkits一览(持续更新中~~~)-CSDN博客icon-default.png?t=O83Ahttps://blog.csdn.net/Zhiyilang/article/details/143749143小北的字节跳动青训营与构建基于LangChain的检索增强生成(RAG)应用——检索增强生成:通过RAG助力鲜花运营(持续更新中~~~)-CSDN博客icon-default.png?t=O83Ahttps://blog.csdn.net/Zhiyilang/article/details/143749474哈喽哈喽,这里是是zyll~,北浊.欢迎来到小北的 LangChain 实战课学习笔记! 

       在这个充满变革的时代,技术的每一次进步都在推动着世界的快速发展。在这个课程中,我们将探索一种全新的数据库查询范式,它利用机器学习和自然语言处理技术,让与数据库的交互变得更加自然和高效。

一直以来,SQL是我们的得力助手

在计算机编程和数据库管理领域,结构化查询语言(SQL)一直是我们的得力助手。无论是从数据库中提取信息还是进行复杂的操作,我们都需要通过严格、专业且结构化的SQL语法来完成。这要求我们不仅要深入了解所使用的技术,还需要对所操作的数据有充分的了解。然而,随着人工智能的兴起和大语言模型的发展,这一传统范式正在发生变化。

自然语言查询:与计算机交互的新方式

现在,我们正进入一个全新的编程范式,其中机器学习和自然语言处理技术使得与计算机的交互变得更加自然。我们可以使用更加接近日常话语的自然语言来与计算机交流。例如,不再需要复杂的SQL语句查询数据库,只需简单地问:“请告诉我去年的销售额是多少?”计算机就能够理解这个问题,并给出相应的答案。

这种转变不仅使得非技术人员更容易与计算机交互,还为开发者提供了更大的便利性。简而言之,我们从“告诉计算机每一步怎么做”转变为“告诉计算机我们想要什么”,整个过程变得更加人性化和高效。

新的数据库查询范式详解

下面这个图清晰地解释了这个以LLM(大语言模型)为驱动引擎的查询流程,从自然语言的(模糊)询问到自然语言的查询结果输出。

<img src="https://example.com/query_flow_diagram.png" />
(注:由于文本限制,无法直接插入图片,请替换为实际流程图链接或图片)

这种范式结合了自然语言处理和传统数据库查询的功能,为用户提供了一个更为直观和高效的交互方式。具体流程如下:

  1. 提出问题:用户用自然语言提出一个问题,例如“去年的总销售额是多少?”。
  2. LLM理解并转译:LLM首先解析这个问题,理解其背后的意图和所需的信息。接着,模型根据解析的内容生成相应的SQL查询语句,例如“SELECT SUM(sales) FROM sales_data WHERE year = 'last_year';”。
  3. 执行SQL查询:生成的SQL查询语句被发送到相应的数据库进行执行。数据库处理这个查询,并返回所需的数据结果。
  4. LLM接收并解释结果:当数据库返回查询结果后,LLM会接收这些数据,并解析这些数据,将其转化为更容易被人类理解的答案格式。
  5. 提供答案:最后,LLM将结果转化为自然语言答案,并返回给用户。例如“去年的总销售额为1,000,000元”。

用户不需要知道数据库的结构,也不需要具备编写SQL的技能。他们只需要用自然语言提问,然后就可以得到所需的答案。这大大简化了与数据库的交互过程,并为各种应用场景提供了巨大的潜力。

实战案例:用LangChain实现自然语言查询

下面我们将通过LangChain实现这个新的数据库应用开发范式。

在这个实战案例中,我们的所有业务数据都存储在数据库中,而目标则是通过自然语言来为销售的每一种鲜花数据创建各种查询。这样,无论是员工还是顾客,当他们想了解某种鲜花的价格时,都可以快速地生成适当的查询语句。

这就大大简化了查询过程和难度。

首先,这个应用可以被简单地用作一个查询工具,允许员工在存货或销售系统中快速查找价格。员工不再需要记住复杂的查询语句或进行手动搜索,只需选择鲜花种类,告诉系统他所想要的东西,系统就会为他们生成正确的查询。

其次,这个模板也可以被整合到一个聊天机器人或客服机器人中。顾客可以直接向机器人询问:“红玫瑰的价格是多少?” 机器人会根据输入内容来调用LangChain和LLM,生成适当的查询,然后返回确切的价格给顾客。这样,不仅提高了服务效率,还增强了用户体验。

了解完项目的背景信息,下面我们就开始行动吧!

创建数据库表

首先,让我们创建一系列的数据库表,存储易速鲜花的业务数据。我们使用SQLite作为示例数据库,因为它提供了轻量级的磁盘文件数据库,非常适合桌面应用、嵌入式应用或初创企业的简单需求。基于sqlite3库,创建业务数据的代码如下:


	# 导入sqlite3库

	import sqlite3

	 

	# 连接到数据库

	conn = sqlite3.connect('FlowerShop.db')

	cursor = conn.cursor()

	 

	# 执行SQL命令来创建Flowers表

	cursor.execute('''

	        CREATE TABLE Flowers (

	            ID INTEGER PRIMARY KEY, 

	            Name TEXT NOT NULL, 

	            Type TEXT NOT NULL, 

	            Source TEXT NOT NULL, 

	            PurchasePrice REAL, 

	            SalePrice REAL,

	            StockQuantity INTEGER, 

	            SoldQuantity INTEGER, 

	            ExpiryDate DATE,  

	            Description TEXT, 

	            EntryDate DATE DEFAULT CURRENT_DATE 

	        );

	    ''')

	 

	# 插入5种鲜花的数据

	flowers = [

	    ('Rose', 'Flower', 'France', 1.2, 2.5, 100, 10, '2023-12-31', 'A beautiful red rose'),

	    ('Tulip', 'Flower', 'Netherlands', 0.8, 2.0, 150, 25, '2023-12-31', 'A colorful tulip'),

	    ('Lily', 'Flower', 'China', 1.5, 3.0, 80, 5, '2023-12-31', 'An elegant white lily'),

	    ('Daisy', 'Flower', 'USA', 0.7, 1.8, 120, 15, '2023-12-31', 'A cheerful daisy flower'),

	    ('Orchid', 'Flower', 'Brazil', 2.0, 4.0, 50, 2, '2023-12-31', 'A delicate purple orchid')

	]

	 

	for flower in flowers:

	    cursor.execute('''

	        INSERT INTO Flowers (Name, Type, Source, PurchasePrice, SalePrice, StockQuantity, SoldQuantity, ExpiryDate, Description) 

	        VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?);

	    ''', flower)

	 

	# 提交更改

	conn.commit()

	 

	# 关闭数据库连接

	conn.close()

首先,我们连接到FlowerShop.db数据库。然后,我们创建一个名为Flowers的新表,此表将存储与每种鲜花相关的各种数据。

该表有以下字段:

这段代码首先连接到FlowerShop.db数据库,然后创建一个名为Flowers的新表,用于存储与每种鲜花相关的数据。接着,我们创建了一个包含5种鲜花数据的列表,并将这些数据插入到Flowers表中。

用Chain查询数据库

因为LangChain的数据库查询功能较新,目前还处于实验阶段,因此需要先安装langchain-experimental包。

pip install langchain-experimental

下面,我们开始通过SQLDatabaseChain来查询数据库:

python
复制代码
	# 导入langchain的实用工具和相关的模块

	from langchain.utilities import SQLDatabase

	from langchain.llms import OpenAI

	from langchain_experimental.sql import SQLDatabaseChain

	 

	# 连接到FlowerShop数据库

	db = SQLDatabase.from_uri("sqlite:///FlowerShop.db")

	 

	# 创建OpenAI的低级语言模型(LLM)实例

	llm = OpenAI(temperature=0, verbose=True)

	 

	# 创建SQL数据库链实例

	db_chain = SQLDatabaseChain.from_llm(llm, db, verbose=True)

	 

	# 运行与鲜花运营相关的问题

	response = db_chain.run("有多少种不同的鲜花?")

	print(response)

	 

	response = db_chain.run("哪种鲜花的存货数量最少?")

	print(response)

	 

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

	print(response)

	 

	response = db_chain.run("从法国进口的鲜花有多少种?")

	print(response)

	 

	response = db_chain.run("哪种鲜花的销售量最高?")

	print(response)

这段代码首先导入了必要的LangChain模块,然后连接到FlowerShop数据库,并初始化了OpenAI的LLM实例。之后,我们用SQLDatabaseChain创建了一个从LLM到数据库的链接。最后,用db_chain.run()方法来查询多个与鲜花运营相关的问题。Chain的内部会把这些自然语言转换为SQL语句,查询数据库表,并将查询结果通过LLM转换成自然语言。

这里,我们导入必要的LangChain模块,然后连接到FlowerShop数据库,初始化OpenAI的LLM实例。之后用SQLDatabaseChain来创建一个从LLM到数据库的链接。

最后,用db_chain.run()方法来查询多个与鲜花运营相关的问题,Chain的内部会把这些自然语言转换为SQL语句,并查询数据库表,得到查询结果之后,又通过LLM把这个结果转换成自然语言。

因此,Chain的输出结果是我们可以理解的,也是可以直接传递给Chatbot的人话。

输出如下:

SQLDatabaseChain调用大语言模型,完美地完成了从自然语言(输入)到自然语言(输出)的新型SQL查询。

用Agent查询数据库

除了通过Chain完成数据库查询之外,LangChain还可以通过SQL Agent来完成查询任务。相比SQLDatabaseChain,使用SQL Agent有一些优点,比如它可以根据数据库的架构以及数据库的内容回答问题,并具有纠错能力。

python
复制代码
	from langchain.utilities import SQLDatabase

	from langchain.llms import OpenAI

	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:///FlowerShop.db")

	llm = OpenAI(temperature=0, verbose=True)

	 

	# 创建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)

问题1的输出如下:

问题2的输出如下:

可以看到,和Chain直接生成SQL语句不同,代理会使用 ReAct 风格的提示。首先,它思考之后,将先确定第一个action是使用工具 sql_db_list_tables,然后观察该工具所返回的表格,思考后再确定下一个 action是sql_db_schema,也就是创建SQL语句,逐层前进,直到得到答案。

与Chain直接生成SQL语句不同,代理会使用ReAct风格的提示。它首先确定第一个action是使用工具sql_db_list_tables,然后观察该工具所返回的表格,思考后再确定下一个action是sql_db_schema,即创建SQL语句,逐层前进,直到得到答案。

总结时刻

今天的内容很容易理解,又很开脑洞。我最想强调的,仍然是从“告诉计算机要做什么”的编程范式向“告诉计算机我们想要什么”的范式的转变。

这种转变具有深远的意义。

  1. 更大的可达性:不再需要深入的技术知识或特定的编程背景。这意味着非技术人员,比如业务分析师、项目经理甚至是终端用户,都可以直接与数据交互。
  2. 高效率与生产力:传统的编程方法需要大量的时间和努力,尤其是在复杂的数据操作中。自然语言处理和理解能够显著减少这种负担,使得复杂的数据操作变得更加直观。
  3. 错误的减少:许多编程错误源于对特定语法或结构的误解,通过使用自然语言,这些源于误解的错误将大大减少。
  4. 人与机器的紧密结合:在这种新范式下,机器更像是人类的合作伙伴,而不仅仅是一个工具。它们可以理解我们的需求,并为我们提供解决方案,而无需我们明确指导每一步。

但这种转变也带来了挑战。

  1. 模糊性的问题:自然语言本身是模糊的,机器必须能够准确地解释这种模糊性,并在必要时寻求澄清。
  2. 对现有系统的依赖:虽然自然语言查询看起来很有吸引力,但许多现有系统可能不支持或不兼容这种新范式。
  3. 过度依赖:如果过于依赖机器为我们做决策,那么我们可能会失去对数据的深入了解和对结果的质疑。

我们正处于一个技术变革的时刻,自然语言与编程之间的界限正在消失。对于那些愿意接受和采纳这种新范式的人来说,未来充满了无限的可能性。

思考题

  1. LangChain中用Chain和Agent来查询数据库,这两种方式有什么异同?
  2. 你能否深入上面这两种方法的代码,看一看它们的底层实现。尤其是要看LangChain是如何做提示工程,指导模型生成 SQL 代码的。

期待在留言区看到你的分享,如果你觉得内容对你有帮助,也欢迎分享给有需要的朋友!最后如果你学有余力,可以进一步学习下面的延伸阅读。

延伸阅读

  1. 文档:LangChain中关于数据库接口的官方文档
  2. 工具:上面的文档中提到了 LangSmith 工具,用于调试、测试和评估LangChain开发的LLM应用程序

标签:Zhiyilang,数据库,查询,blog,csdn,details,青训营,article,net
From: https://blog.csdn.net/Zhiyilang/article/details/143751018

相关文章

  • 达梦数据库数据类型的变更无效错误,如此解决妙啊
    前言大家好,我是小徐啊。之前在做国产化改造,用到了达梦数据库。其中的一项工作就是将旧数据库里面的数据和结构迁移到达梦数据库。达梦提供了迁移的的工具,大部分时间是挺好用的。但是这里也有问题,比如我原来的数据库是postgresql,将它迁移到达梦数据库之后,在运行程序的时候,直接报......
  • 低代码平台:跨数据库处理的重要性与实现方式
    一、低代码平台概述        低代码平台作为一种创新的软件开发工具,为开发者带来了极大的便利。它具备可视化编程工具和大量预构建组件,这使得开发者无需编写大量代码就能创建应用程序,显著降低了软件开发的技术门槛。无论是专业开发人员还是业务人员,都可以借助低代码平......
  • 基于大数据python 王者荣耀战队数据分析系统(源码+LW+部署讲解+数据库+ppt)
    !!!!!!!!!选题不知道怎么选不清楚自己适合做哪块内容都可以免费来问我避免后期給自己答辩找麻烦增加难度(部分学校只有一次答辩机会没弄好就延迟毕业了)会持续一直更新下去有问必答一键收藏关注不迷路源码获取:https://pan.baidu.com/s/1aRpOv3f2sdtVYOogQjb8jg?pwd=jf1d提取码:......
  • 达梦数据库DM管理工具如何新增修改删除数据库字段
    前言大家好,我是小徐啊。达梦数据库是一款非常流行的国产数据库,我也是用了很长的一段时间了。可以说各方面和主流的数据库比如mysql、postgresql等,都差不多。不过,达梦数据库有一点比较麻烦,那就是新增字段,修改字段,删除字段等。为什么如此说呢?问题我之前也尝试使用DBeaver来连接......
  • 达梦数据库DM管理工具如何浏览数据,用条件筛选数据
    前言大家好,我是小徐啊。达梦数据库是我们一款常用的国产数据库,我之前一直在使用它。用起来和mysql和postgresql比起来,还是差不多的。而且它自带了数据库连接工具DM管理工具,使我们很方便的连接它。今天,小徐就来介绍下如何用DM管理工具浏览数据,并且用条件去筛选数据。手把手教学。......
  • 智能体探秘数据宝库:数据库驱动的智能决策之旅
    一、数据利用数据仓库作为数据源:数据仓库是一个大型的、面向主题的、集成的、非易失的、反映历史变化的数据集合,用于支持管理决策。它存储了大量的结构化数据,这些数据是智能体进行学习和决策的重要基础。智能体可以通过访问数据仓库,获取所需的数据来训练模型、进行预测和决......
  • POLIR-Goverment-备案网站: 查询网站在 "公安部"备案的运营"公司/个人信息" @互联网信
    严格意义上,是"公安部"的"网络安全保卫局"管理网站备案查询备案的政府网站https://beian.mps.gov.cn/#/query/webSearch备案通过的公网(Internet)网站,会颁发一个“公网备案号”,而且在该网站的网页上,必需对访问的用户公布这个“公网备案号”。访问网站时,如果发现网站上联系......
  • 数据库基础
    一、数据库概述1、数据处理的历史数据data:凡是能被计算机处理的东西,如字母、数字、汉字、声音、图片、动画等均认为是数据信息information:数据--->处理--->信息将数据处理为人们的决策有帮助作用的数据的集合就是信息2、数据处理有三个历史阶段人工管理阶段20世纪40......
  • langchain_chatchat+ollama部署本地知识库,联网查询以及对数据库(Oracle)数据进行查询
    langchain_chatchat+ollama部署本地知识库,联网查询以及对数据库(Oracle)数据进行查询涉及的内容其实挺多的,所以尽量减少篇幅目录langchain_chatchat+ollama部署本地知识库,联网查询以及对数据库(Oracle)数据进行查询准备工作:部署ollama以及拉取模型部署langchain_chatchat部署ora......
  • 数据库基础(13) . MySQL视图
    1.介绍1.1.什么是视图MySQL中的视图是一种虚拟表,它并不存储实际的数据,而是存储了一条SELECT查询语句的结果集。视图可以简化复杂的查询操作,保护数据,并且可以使数据库结构更加清晰易懂。1.2.视图的作用简化查询:视图可以将复杂的查询包装起来,使得最终用户只需要执行简单......