网站公司维护,做网站还能挣钱,网站搜索功能,wordpress 无广告视频一、前言
目前#xff0c;大模型的一个热门应用方向Text2SQL#xff0c;它可以帮助用户快速生成想要查询的SQL语句#xff0c;再结合可视化技术可以降低使用数据的门槛#xff0c;更便捷的支持决策。本文将从以下四个方面介绍LLM在Text2SQL应用上的基础实践。 Text2SQL概…一、前言
目前大模型的一个热门应用方向Text2SQL它可以帮助用户快速生成想要查询的SQL语句再结合可视化技术可以降低使用数据的门槛更便捷的支持决策。本文将从以下四个方面介绍LLM在Text2SQL应用上的基础实践。
· Text2SQL概述
· LangChain基础知识
· 基于SQLDatabaseChain的Text2SQL实践
· 后续计划
二、Text2SQL概述
Text-to-SQL或者Text2SQL顾名思义就是把文本转化为SQL语言更学术一点的定义是把数据库领域下的自然语言Natural LanguageNL问题转化为在关系型数据库中可以执行的结构化查询语言Structured Query LanguageSQL因此Text-to-SQL也可以被简写为NL2SQL。 · 输入自然语言问题比如“查询表t_user的相关信息结果按id降序排序只保留前10个数据 ”
· 输出SQL比如 “SELECT * FROM t_user ORDER BY id DESC LIMIT 10”
Text2SQL应用主要是帮助用户减少开发时间降低开发成本。“打破人与结构化数据之间的壁垒”即普通用户可以通过自然语言描述完成复杂数据库的查询工作得到想要的结果。 基于LLM的应用开发基本架构如上图本文介绍以LangChain OpenAI RDB的方式来实现Text2SQL的实践方案。
三、LangChain基础知识
LangChain是一个面向大语言模型的应用开发框架如果将大语言模型比作人的大脑那么可以将LangChain可以比作人的五官和四肢它可以将外部数据源、工具和大语言模型连接在一起既可以补充大语言模型的输入也可以承接大语言模型的输出。
LangChain提供各种不同的组件帮助使用LLM如下图所示核心组件有Models、Indexes、Chains、Memory、Prompt以及Agent。 3.1 Models
LangChain本身不提供LLM提供通用的接口访问LLM可以很方便的更换底层的LLM以及自定义自己的LLM。主要有2大类的Models
1LLM将文本字符串作为输入并返回文本字符串的模型类似OpenAI的text-davinci-003
2Chat Models由语言模型支持将聊天消息列表作为输入并返回聊天消息的模型。一般使用的ChatGPT以及Claude为Chat Models。
与模型交互可以通过给予Prompt的方式LangChain通过PromptTemplate的方式方便我们构建以及复用Prompt。
代码示例如下
from langchain import PromptTemplate# 定义提示模板
prompt PromptTemplate(input_variables[question], template简洁和专业的来回答用户的问题。如果无法从中得到答案请说 “根据已知信息无法回答该问题” 或 “没有提供足够的相关信息”不允许在答案中添加编造成分答案请使用中文。
问题是{question},)print(prompt.format_prompt(question如何进行数据治理))3.2 Indexes
索引和外部数据进行集成用于从外部数据获取答案。如下图所示主要的步骤
· 通过Document Loaders加载各种不同类型的数据源
· 通过Text Splitters进行文本语义分割
· 通过Vectorstore进行非结构化数据的向量存储
· 通过Retriever进行文档数据检索 3.3 Chains
LangChain通过chain将各个组件进行链接以及chain之间进行链接用于简化复杂应用程序的实现。其中主要有LLMChain、SQLDatabase Chain以及Sequential Chain。
3.3.1 LLMChain
最基本的链为LLMChain由PromptTemplate、LLM和OutputParser组成。LLM的输出一般为文本OutputParser用于让LLM结构化输出并进行结果解析方便后续的调用。 其实现原理如图所示包含三步
· 输入问题
· 拼接提示根据提示模板将问题转化为提示
· 模型推理输出答案
代码如下所示
from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain
from langchain import OpenAI
import osos.environ[OPENAI_API_KEY] Your openai key
# 定义模型
llm OpenAI(temperature0)# 定义提示模板
prompt PromptTemplate(input_variables[question], template简洁和专业的来回答用户的问题。如果无法从中得到答案请说 “根据已知信息无法回答该问题” 或 “没有提供足够的相关信息”不允许在答案中添加编造成分答案请使用中文。问题是{question},)
# 定义chain
chain LLMChain(llmllm, promptprompt, verboseTrue)
# 执行chain
print(chain.run(如何开展数据治理))3.3.2 SQLDatabaseChain
SQLDatabaseChain能够通过模型自动生成SQL并执行其实现原理如图所示包含如下过程 · 输入问题
· 获取数据库SchemaSchema包含数据库所有表的建表语句和数据示例LangChain支持多种关系型数据库包括MariaDB、MySQL、SQLite、ClickHouse、PrestoDB等
· 拼接提示根据提示模板将问题、数据库Schema转化为提示并且提示中包含指示要求模型在理解问题和数据库Schema的基础上能够按一定的格式输出查询SQL、查询结果和问题答案等
· 模型推理这一步预期模型根据问题、数据库Schema推理、输出的答案中包含查询SQL并从中提取出查询SQL
· 执行查询SQL从数据库中获取查询结果
· 拼接提示和上一次拼接的提示基本一致只是其中的提示中包含了前两步已获取的查询SQL、查询结果
· 模型推理这一步预期模型根据问题、数据库Schema、查询SQL和查询结果推理出最终的问题答案。
3.3.3 SequentialChain
SequentialChains是按预定义顺序执行的链。SimpleSequentialChain为顺序链的最简单形式其中每个步骤都有一个单一的输入/输出一个步骤的输出是下一个步骤的输入。SequentialChain为顺序链更通用的形式允许多个输入/输出。
3.4 Memory
正常情况下Chain无状态的每次交互都是独立的无法知道之前历史交互的信息。LangChain使用Memory组件保存和管理历史消息这样可以跨多轮进行对话在当前会话中保留历史会话的上下文。Memory组件支持多种存储介质可以与Mongo、Redis、SQLite等进行集成以及简单直接形式就是Buffer Memory。
3.5 Agent
Agent字面含义就是代理如果说LLM是大脑Agent就是代理大脑使用工具Tools。目前的大模型一般都存在知识过时、逻辑计算能力低等问题通过Agent访问工具可以去解决这些问题。目前这个领域特别活跃诞生了类似AutoGPT、BabyAGI、AgentGPT等一堆优秀的项目。传统使用LLM需要给定Prompt一步一步地达成目标通过Agent是给定目标其会自动规划并达到目标。
四、基于SQLDatabaseChain的Text2SQL实践
4.1 简介
LangChain提供基于LLM的SQLDatabaseChain可以利用LLM的能力将自然语言的query转化为SQL连接DB进行查询并利用LLM来组装润色结果返回最终answer。
在后台LangChain 使用SQLAlchemy连接到 SQL 数据库。因此SQLDatabaseChain可以与 SQLAlchemy 支持的任何 SQL 方言一起使用例如 MS SQL、MySQL、MariaDB、PostgreSQL、Oracle和 SQLite。
4**.**2 数据准备
本案例使用SQLite 和示例Chinook 数据库用户可按照https://database.guide/2-sample-databases-sqlite/ 上的说明进行设置。Chinook表示一个数字多媒体商店包含了顾客Customer、雇员Employee、歌曲Track、订单Invoice及其相关的表和数据数据模型如下图所示。 4.3实践过程
需求 测试中文提问“总共有多少员工”即英文提问“How many employees are there?”
期望 模型先给出查询Employee表记录数的SQL再根据查询结果给出最终的答案。
1测试中文提问代码如下所示
from langchain.llms import OpenAI
from langchain.utilities import SQLDatabase
from langchain_experimental.sql import SQLDatabaseChain
import osos.environ[OPENAI_API_KEY] Your openai keydb SQLDatabase.from_uri(sqlite:///..../Chinook.db)
llm OpenAI(temperature0, verboseTrue)
db_chain SQLDatabaseChain.from_llm(llm, db, verboseTrue)
db_chain.run(总共有多少员工?)输出结果如下 这里我们使用商业化的OpenAI并将其temperature设为0因为查询DB不太需要创造性和多样性。从返回的过程来看自然语言被翻译成了SQL得到查询结果后解析包装结果最终返回我们可以理解的答案。这里LLM成功将“总共”转成select count(*)并准确地识别出表名且最终组装出正确的结果。 注意 对于数据敏感项目可以在 SQLDatabaseChain 初始化中指定 return_directTrue以直接返回 SQL 查询的输出而无需任何其他格式设置。这样可以防止 LLM 看到数据库中的任何内容。但请注意默认情况下LLM 仍然可以访问数据库方案即所用方言、表名和列名。 2测试英文提问也可以得到我们想要的结果 通过上例我们可以借助LangChain提供的SQLDatabaseChain轻松地连接LLM与Database自然语言的方式输入自然语言的方式输出借助LLM的强大能力来理解问题、生成SQL查询数据并输出结果。
五、后续计划
随着大模型的发展LangChain是目前最火的LLM开发框架之一能和外部数据源交互、能集成各种常用的组件等等大大降低了LLM应用开发的门槛。基于SQLDatabaseChain实现的Text2SQL只是最基础的实践方式但对于逻辑复杂的查询在稳定性、可靠性、安全性方面可能无法达到预期比如输出幻觉问题、数据安全问题。如何解决或减少该类问题的出现可改进的措施和方案在后续专题中继续讨论大家一起群策群力。总之实现高稳定、高可靠的基于LLM的应用是一个持续改进的过程是一个多种技术相结合的过程。
参考文献
https://docs.langchain.com/docs/
https://platform.openai.com/
https://database.guide/2-sample-databases-sqlite/
https://www.langchain.asia/modules/chains/examples/sqlite
https://mp.weixin.qq.com/s/pgRC71IkSXrOjZg3W9V72g
https://zhuanlan.zhihu.com/p/640580808 文章转载自: http://www.morning.clpfd.cn.gov.cn.clpfd.cn http://www.morning.qnywy.cn.gov.cn.qnywy.cn http://www.morning.bwznl.cn.gov.cn.bwznl.cn http://www.morning.yfmlj.cn.gov.cn.yfmlj.cn http://www.morning.yxlhz.cn.gov.cn.yxlhz.cn http://www.morning.5-73.com.gov.cn.5-73.com http://www.morning.hbqhz.cn.gov.cn.hbqhz.cn http://www.morning.gwzfj.cn.gov.cn.gwzfj.cn http://www.morning.ydgzj.cn.gov.cn.ydgzj.cn http://www.morning.rqxhp.cn.gov.cn.rqxhp.cn http://www.morning.qtwd.cn.gov.cn.qtwd.cn http://www.morning.syynx.cn.gov.cn.syynx.cn http://www.morning.hypng.cn.gov.cn.hypng.cn http://www.morning.ngdkn.cn.gov.cn.ngdkn.cn http://www.morning.kaweilu.com.gov.cn.kaweilu.com http://www.morning.yqgbw.cn.gov.cn.yqgbw.cn http://www.morning.hxwrs.cn.gov.cn.hxwrs.cn http://www.morning.mfmrg.cn.gov.cn.mfmrg.cn http://www.morning.rmlz.cn.gov.cn.rmlz.cn http://www.morning.cjqcx.cn.gov.cn.cjqcx.cn http://www.morning.qcwrm.cn.gov.cn.qcwrm.cn http://www.morning.thrtt.cn.gov.cn.thrtt.cn http://www.morning.bgpb.cn.gov.cn.bgpb.cn http://www.morning.pqcrz.cn.gov.cn.pqcrz.cn http://www.morning.fqyxb.cn.gov.cn.fqyxb.cn http://www.morning.qyglt.cn.gov.cn.qyglt.cn http://www.morning.tqygx.cn.gov.cn.tqygx.cn http://www.morning.yhywr.cn.gov.cn.yhywr.cn http://www.morning.hdtcj.cn.gov.cn.hdtcj.cn http://www.morning.eshixi.com.gov.cn.eshixi.com http://www.morning.lcdtb.cn.gov.cn.lcdtb.cn http://www.morning.pbsqr.cn.gov.cn.pbsqr.cn http://www.morning.qhfdl.cn.gov.cn.qhfdl.cn http://www.morning.snbrs.cn.gov.cn.snbrs.cn http://www.morning.zrqs.cn.gov.cn.zrqs.cn http://www.morning.lmyq.cn.gov.cn.lmyq.cn http://www.morning.jopebe.cn.gov.cn.jopebe.cn http://www.morning.qshxh.cn.gov.cn.qshxh.cn http://www.morning.trkhx.cn.gov.cn.trkhx.cn http://www.morning.fhlfp.cn.gov.cn.fhlfp.cn http://www.morning.nbrdx.cn.gov.cn.nbrdx.cn http://www.morning.mrlkr.cn.gov.cn.mrlkr.cn http://www.morning.wlggr.cn.gov.cn.wlggr.cn http://www.morning.qbmjf.cn.gov.cn.qbmjf.cn http://www.morning.lywcd.cn.gov.cn.lywcd.cn http://www.morning.qzdxy.cn.gov.cn.qzdxy.cn http://www.morning.ydwsg.cn.gov.cn.ydwsg.cn http://www.morning.xmtzk.cn.gov.cn.xmtzk.cn http://www.morning.qjghx.cn.gov.cn.qjghx.cn http://www.morning.rbsxf.cn.gov.cn.rbsxf.cn http://www.morning.cxryx.cn.gov.cn.cxryx.cn http://www.morning.ykqbs.cn.gov.cn.ykqbs.cn http://www.morning.snnkt.cn.gov.cn.snnkt.cn http://www.morning.mjbnp.cn.gov.cn.mjbnp.cn http://www.morning.qwmdx.cn.gov.cn.qwmdx.cn http://www.morning.lwhsp.cn.gov.cn.lwhsp.cn http://www.morning.piekr.com.gov.cn.piekr.com http://www.morning.ynjhk.cn.gov.cn.ynjhk.cn http://www.morning.wnhgb.cn.gov.cn.wnhgb.cn http://www.morning.gmztd.cn.gov.cn.gmztd.cn http://www.morning.zshuhd015.cn.gov.cn.zshuhd015.cn http://www.morning.htbbp.cn.gov.cn.htbbp.cn http://www.morning.tnjff.cn.gov.cn.tnjff.cn http://www.morning.jstggt.cn.gov.cn.jstggt.cn http://www.morning.qgjwx.cn.gov.cn.qgjwx.cn http://www.morning.ttvtv.cn.gov.cn.ttvtv.cn http://www.morning.ljyqn.cn.gov.cn.ljyqn.cn http://www.morning.qtqjx.cn.gov.cn.qtqjx.cn http://www.morning.gtbjf.cn.gov.cn.gtbjf.cn http://www.morning.gywxq.cn.gov.cn.gywxq.cn http://www.morning.knzdt.cn.gov.cn.knzdt.cn http://www.morning.nnhrp.cn.gov.cn.nnhrp.cn http://www.morning.rkxqh.cn.gov.cn.rkxqh.cn http://www.morning.nxhjg.cn.gov.cn.nxhjg.cn http://www.morning.wtsr.cn.gov.cn.wtsr.cn http://www.morning.gbsfs.com.gov.cn.gbsfs.com http://www.morning.jxgyg.cn.gov.cn.jxgyg.cn http://www.morning.lxmmx.cn.gov.cn.lxmmx.cn http://www.morning.tkxyx.cn.gov.cn.tkxyx.cn http://www.morning.nzxdz.cn.gov.cn.nzxdz.cn