利用LangChain构建的智能数据库操作系统

简介: LangChain库简化了数据库与AI结合,通过LLM将自然语言转为SQL语句进行查询和数据分析。它降低了数据查询的门槛,支持创建基于数据库的问答机器人和数据分析面板。实战案例展示了如何使用LangChain进行查询并以自然语言形式返回结果。通过限制表名,可处理大量数据。总结:掌握LangChain在数据库操作、查询及结果自然语言转换的应用。

在 Retrieval 或者 ReACT 的一些场景中,常常需要数据库与人工智能结合。而 LangChain 本身就封装了许多相关的内容,在其官方文档-SQL 能力中,也有非常好的示例。

而其实现原理主要是通过 LLM 将自然语言转换为 SQL 语句,然后再通过 LLM 获取执行的操作,最终生成一个答案和结论。

image.png

应用场景

在未出现人工智能,如果想要完成数据查询与数据分析的工作,则需要相关人员有相应的数据库的功底,而在 LangChain 结合大语言模型的过程中,应对这些问题则相当轻松——写清晰的提示词即可。

  • 生成将基于自然语言问题运行的查询。

在传统的工作流程中,如果想要在数据库中搜索一些信息,那么就必须要掌握相应的数据库技术,比如 SQL 语句查询等,但是其本身有很高的学习成本。如果能用自然语言代替这个过程,则任何人都无需学习 SQL 语法,即可轻松进行数据的查询。

  • 根据数据库数据回答问题的聊天机器人。

自然也可以做一个基于数据库信息的问答机器人,比如产品经理以及一些业务人员,也可以轻松获得数据库的信息。

  • 数据分析展示面板

之前常常会通过 SQL 完成一些数据分析的工作,并通过各种样式的表格展示出来。此过程也可以通过人工智能完成。

实战案例

需求说明

  • 输入查询的需求,返回查询的结果。
  • 查询的结果通过自然语言表述(选做)。

实现思路

image.png

对应源码

实现输入查询的提示词,返回查询结果:


from langchain_community.utilities import SQLDatabase
db = SQLDatabase.from_uri("sqlite:///Chinook.db")
# 通过LLM 获取查询语句
from langchain.chains import create_sql_query_chain
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0)
from langchain_community.tools.sql_database.tool import QuerySQLDataBaseTool
# 执行查询动作
execute_query = QuerySQLDataBaseTool(db=db)
# 获取sql 查询语句
write_query = create_sql_query_chain(llm, db)
# 先生成查询语句,再执行查询动作
chain = write_query | execute_query
response = chain.invoke({
   
   "question": "How many employees are there"})
print(response)

查询结果转换为自然语言(更好让人理解):

from operator import itemgetter
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import PromptTemplate
from langchain_core.runnables import RunnablePassthrough
# 定义提示词,其中有 question、query、result 三个变量
answer_prompt = PromptTemplate.from_template(
    """Given the following user question, corresponding SQL query, and SQL result, answer the user question.

Question: {question}
SQL Query: {query}
SQL Result: {result}
Answer: """
)

answer = answer_prompt | llm | StrOutputParser()
# query通过write_query链的执行结果获取
# result 通过 execute_query链获取
chain = (
    RunnablePassthrough.assign(query=write_query).assign(
        result=itemgetter("query") | execute_query
    )
    | answer
)
print(chain.invoke({
   
   "question": "How many employees are there"}))

解决数据库表数据过多的问题

在实际使用过程中,如果数据库表数据过多,可以限制使用的表名,以缩小查询范围,节省token

chain.invoke(SQLInputWithTables(question="xxx", table_names_to_use=['表a', '表b']))

总结

  1. 掌握 LangChain 完成数据库操作的应用场景。
  2. 掌握通过 LangChain 完成数据库查询的能力。
  3. 掌握通过 LangChain 将结果转换为自然语言的能力。
相关实践学习
使用CLup和iSCSI共享盘快速体验PolarDB for PostgtreSQL
在Clup云管控平台中快速体验创建与管理在iSCSI共享盘上的PolarDB for PostgtreSQL。
AnalyticDB PostgreSQL 企业智能数据中台:一站式管理数据服务资产
企业在数据仓库之上可构建丰富的数据服务用以支持数据应用及业务场景;ADB PG推出全新企业智能数据平台,用以帮助用户一站式的管理企业数据服务资产,包括创建, 管理,探索, 监控等; 助力企业在现有平台之上快速构建起数据服务资产体系
相关文章
|
5天前
|
机器学习/深度学习 人工智能 算法
打造未来:构建下一代智能操作系统的蓝图
【5月更文挑战第15天】 随着人工智能和机器学习技术的不断进步,下一代智能操作系统的构想正在从科幻走向现实。本文深入探讨了构建一个能够自我学习、适应并优化用户体验的操作系统所需的关键技术组件。我们将分析现有操作系统的局限性,并提出一个创新的框架设计,该设计集成了模块化结构、自适应算法和高级用户交互界面。文章还将讨论实现这一目标所面临的技术挑战以及潜在的解决方案,为未来的操作系统发展提供一个可能的蓝图。
6 1
|
5天前
|
算法 Go 分布式数据库
构建高可用的分布式数据库集群:使用Go语言与Raft共识算法
随着数据量的爆炸式增长,单一数据库服务器已难以满足高可用性和可扩展性的需求。在本文中,我们将探讨如何使用Go语言结合Raft共识算法来构建一个高可用的分布式数据库集群。我们不仅会介绍Raft算法的基本原理,还会详细阐述如何利用Go语言的并发特性和网络编程能力来实现这一目标。此外,我们还将分析构建过程中可能遇到的挑战和解决方案,为读者提供一个完整的实践指南。
|
5天前
|
安全 物联网 vr&ar
构建未来:移动应用开发与操作系统的创新融合
【5月更文挑战第14天】 在数字化的浪潮中,移动应用和操作系统是推动现代社会发展的双引擎。随着技术的不断进步,这两者之间的界限越来越模糊,它们的融合预示着无限的可能性。本文将深入探讨移动应用开发的最新趋势、移动操作系统的关键创新以及它们如何相互作用,共同塑造着未来的数字世界。通过分析当前的挑战和机遇,我们预见一个更加智能、互联的移动生态系统即将到来。
|
5天前
|
存储 监控 中间件
构建高性能数据库的秘诀
【5月更文挑战第13天】构建高性能数据库涉及硬件选型(如SSD、RAID)、内存与CPU优化、网络带宽保障。数据库设计要平衡规范化与反规范化,合理使用索引,考虑分区和分片技术。定期备份恢复、监控日志、维护和参数调优是管理关键。使用内存数据库、列式存储、分布式数据库和中间件能进一步提升性能。综合优化可打造稳定高效的数据库系统,支持企业成功。
|
5天前
|
存储 机器学习/深度学习 人工智能
新一代数据库技术:融合AI的智能数据管理系统
传统数据库管理系统在数据存储和查询方面已经取得了巨大的成就,但随着数据量的不断增长和应用场景的多样化,传统数据库已经难以满足日益增长的需求。本文将介绍一种新一代数据库技术,即融合了人工智能技术的智能数据管理系统。通过结合AI的强大能力,这种系统能够实现更高效的数据管理、更智能的数据分析和更精准的数据预测,为用户带来全新的数据管理体验。
|
5天前
|
Shell Android开发
Android系统 adb shell push/pull 禁止特定文件
Android系统 adb shell push/pull 禁止特定文件
34 1
|
5天前
|
Android开发 Python
Python封装ADB获取Android设备wifi地址的方法
Python封装ADB获取Android设备wifi地址的方法
65 0
|
8月前
|
开发工具 Android开发
Mac 安卓(Android) 配置adb路径
Mac 安卓(Android) 配置adb路径
236 0
|
4天前
|
Shell Android开发
ADB更改Android设备屏幕显示方向
ADB更改Android设备屏幕显示方向
13 5
|
5天前
|
Shell Android开发
Android Activity重写dump方法实现通过adb调试代码
Android Activity重写dump方法实现通过adb调试代码
17 0