CnosDB x LangChain: 聊着天来查询时序数据库

本篇我们将主要介绍如何使用 LangChain 连接 CnosDB 数据库,实现使用自然语言和数据库的交流。 

大模型等的相关话题已经霸榜半年有余,在讨论关注之余,CnosDB技术团队将大模型与人工智能相关技术与数据库开发与实践进行融合。继CnosDB全面整合TensorFlow(使用 CnosDB 与 TensorFlow 进行时间序列预测)与将Copilot与Cursor应用于生产实践(Coding With AI: Copilot与Cursor)之后,近期CnosDB技术团队将CnosDB与LangChain进行了生态融合,支持用户通过LangChain框架使用自然语言进行相关的时间序列数据查询。CnosDB与LangChain集成的示例请戳:(CnosDB | 🦜️🔗 Langchain)

因为支持标准SQL的生态,也使CnosDB成为全球第一个接入LangChain生态的时序数据库。在整合LangChain框架并接入GPT之后,客户可以提出类似于“最近一小时北京各个气象观察站的平均温度?”或者“这个月上海的最高气温与最低气温是多少?”等相关问题,不用编写任何SQL,从而轻松从数据库中取得相关的查询结果。

简介CnosDB与LangChain

CnosDB  是一款高性能、高压缩率、高易用性的开源分布式时序数据库。主要应用场景为物联网、工业互联网、车联网和IT运维。所有代码均已在 GitHub 开源。

它具有以下特性:

  • 高性能:CnosDB 解决了时间序列膨胀问题,理论上支持时间序列无上限,支持沿时间线的聚合查询,包括按等时间间隔划分窗口的查询、按某列枚举值划分窗口的查询、按相邻时序记录的时间间隔长度划分窗口。具备对最新数据的缓存能力,并且可以配置缓存空间,能够高速获取最新数据。

  • 简单易用:CnosDB 提供清晰明了的接口,简单的配置项目,支持标准 SQL ,轻松上手,与第三方工具生态无缝集成,拥有便捷的数据访问功能。支持 schemaless ("无模式")的写入方式,支持历史数据补录(含乱序写入)。

  • 云原生:CnosDB 有原生的分布式设计、数据分片和分区、存算分离、Quorum 机制、Kubernetes 部署和完整的可观测性,具有最终一致性,能够部署在公有云、私有云和混合云上。提供多租户的功能,有基于角色管理的权限分配。支持计算层无状态增减节点,储存层水平扩展提高系统存储容量。

LangChain 是一个用于开发由语言模型驱动的应用程序的框架。它可以实现以下功能:

  • 数据感知:将语言模型与其他数据源连接起来。

  • 主体性:允许语言模型与其环境进行交互。

LangChain 的主要价值在于:

  1. 组件化:为使用语言模型提供抽象化的工具,同时还提供了每个抽象化工具的一系列实现。这些组件是模块化且易于使用的,无论你是否使用LangChain框架的其他部分。

  2. 现成的链式结构:用于完成特定高级任务的一系列组件的结构化组合。现成的链式结构使得入门变得容易。对于更复杂的应用程序和细致的使用情况,组件使得自定义现有链式结构或构建新的链式结构变得容易。

实现架构图

通过架构图可以看出:通过利用 LangChain 的组件与现成的链,使得用户不需要提前去学习如何使用 SQL 脚本与数据库交互,节省了大量的时间与精力。利用 LangChain 、SQLDatabase、SQL Agent 以及 OpenAI 大型语言模型的强大功能,我们已经可以做到创建应用程序,实现让用户使用自然语言与 CnosDB 交流。

安装部署 CnosDB

我们以Docker为例安装CnosDB,其他的安装方法请参考官网文档,安装部分(安装 | 文档)。

1.安装 Docker 环境

2.使用 Docker 启动容器

docker run --name cnosdb -p 8902:8902 -d cnosdb/cnosdb:community-latest cnosdb run -M singleton

3.进入容器

  docker exec -it cnosdb sh

4.运行 cnosdb-cli

  cnosdb-cli --port 8902

连接成功之后会显示:

CnosDB CLI v2.3.1
Input arguments: Args { host: "localhost", port: 8902, user: "cnosdb", password: None, database: "public", target_partitions: Some(1), data_path: None, file: [], rc: None, format: Table, quiet: false }
public ❯

安装部署 LangChain

  1. 执行下面命令:

pip install langchain

安装 CnosDB 依赖

pip install cnos-connector
# cnosdb_connector版本需要大于0.1.8

连接CnosDB

我们使用 cnosdb_connector 以及 SQLDatabase 连接 CnosDB,需要创建 SQLDatabase 所需的 uri:

# 使用 make_cnosdb_langchain_uri 来创建uri
uri = cnosdb_connector.make_cnosdb_langchain_uri()
# 通过 SQLDatabase.from_uri 来创建 DB
db = SQLDatabase.from_uri(uri)

或者使用 SQLDatabase 的 from_cnosdb 方法

def SQLDatabase.from_cnosdb(url: str = "127.0.0.1:8902",user: str = "root",password: str = "",tenant: str = "cnosdb",database: str = "public")

参数:

参数名

含义

url (str)

CnosDB服务的HTTP连接主机名和端口号,不包括 "http://" 或 "https://",默认值为 "127.0.0.1:8902"。

user (str)

用于连接到CnosDB服务的用户名,默认值为 "root"。

password (str)

连接到CnosDB服务的用户密码,默认值为空字符串 ""。

tenant (str)

用于连接到CnosDB服务的租户名称,默认值为 "cnosdb"。

database (str)

CnosDB租户中数据库的名称。

使用示例:

# 使用 SQLDatabase 连接 CnosDB
from cnosdb_connector import make_cnosdb_langchain_uri
from langchain import SQLDatabaseuri = cnosdb_connector.make_cnosdb_langchain_uri()
db = SQLDatabase.from_uri(uri)# 创建 OpenAI Chat LLM
from langchain.chat_models import ChatOpenAIllm = ChatOpenAI(temperature=0, model_name="gpt-3.5-turbo")

SQLDatabaseChain示例:

这个例子演示了如何使用 SQLDatabaseChain 通过一个数据库回答一个问题。

from langchain import SQLDatabaseChaindb_chain = SQLDatabaseChain.from_llm(llm, db, verbose=True)db_chain.run("What is the average temperature of air at station XiaoMaiDao between October 19, 2022 and October 20, 2022?"
)
> Entering new  chain...
What is the average temperature of air at station XiaoMaiDao between October 19, 2022 and Occtober 20, 2022?
SQLQuery:SELECT AVG(temperature) FROM air WHERE station = 'XiaoMaiDao' AND time >= '2022-10-19' AND time < '2022-10-20'
SQLResult: [(68.0,)]
Answer:The average temperature of air at station XiaoMaiDao between October 19, 2022 and October 20, 2022 is 68.0.
> Finished chain.

SQL Database Agent 示例:

from langchain.agents import create_sql_agent
from langchain.agents.agent_toolkits import SQLDatabaseToolkittoolkit = SQLDatabaseToolkit(db=db, llm=llm)
agent = create_sql_agent(llm=llm, toolkit=toolkit, verbose=True)
agent.run("What is the average temperature of air at station XiaoMaiDao between October 19, 2022 and Occtober 20, 2022?"
)
> Entering new  chain...
Action: sql_db_list_tables
Action Input: ""
Observation: air
Thought:The "air" table seems relevant to the question. I should query the schema of the "air" table to see what columns are available.
Action: sql_db_schema
Action Input: "air"
Observation: 
CREATE TABLE air (pressure FLOAT, station STRING, temperature FLOAT, time TIMESTAMP, visibility FLOAT
)/*
3 rows from air table:
pressure	station	temperature	time	visibility
75.0	XiaoMaiDao	67.0	2022-10-19T03:40:00	54.0
77.0	XiaoMaiDao	69.0	2022-10-19T04:40:00	56.0
76.0	XiaoMaiDao	68.0	2022-10-19T05:40:00	55.0
*/
Thought:The "temperature" column in the "air" table is relevant to the question. I can query the average temperature between the specified dates.
Action: sql_db_query
Action Input: "SELECT AVG(temperature) FROM air WHERE station = 'XiaoMaiDao' AND time >= '2022-10-19' AND time <= '2022-10-20'"
Observation: [(68.0,)]
Thought:The average temperature of air at station XiaoMaiDao between October 19, 2022 and October 20, 2022 is 68.0. 
Final Answer: 68.0> Finished chain.

未来:再谈AI4DB与DB4AI

自创立伊始,CnosDB坚持AI4DB与DB4AI的理念与信仰,促进人工智能与数据库进行相应的融合,并为人工智能打造生态友好、高可用、高稳定性的时序数据库系统。【延伸阅读:数据库管理系统的未来是什么(数据库管理系统的未来是什么?)】

"AI4DB"指的是利用AI技术来增强数据库的能力,例如利用AI技术来从数据中提取模式、进行预测和分类,或者利用自然语言处理技术来实现更智能的查询和分析。这种方法可以提高数据库的效率和准确性,使其更加适应不断变化的数据环境。"DB4AI"则是指利用数据库来支持AI应用程序。数据库可以提供数据存储和管理、数据清洗和预处理、数据访问和共享等基础设施,为AI应用程序提供支持。在这种情况下,数据库的作用是为AI算法提供数据,以帮助算法进行训练和预测。

我们坚信未来将有更多的开发人员利用GPT等大模型技术创建应用程序,因此数据库的使用方式要更好的结合大模型的特定习惯。CnosDB正是基于此信仰,成为时序数据库首家拥抱LangChain生态的产品。应用程序开发的新范式即将到来,让我们一起拥抱未来,共同创建能够解决现实世界问题的强大应用程序。

补充阅读

1.使用 CnosDB 与 TensorFlow 进行时间序列预测

2.Coding With AI: Copilot与Cursor

3.数据库管理系统的未来是什么?

CnosDB简介

CnosDB是一款高性能、高易用性的开源分布式时序数据库,现已正式发布及全部开源。

欢迎关注我们的社区网站:https://cn.cnosdb.com

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1003.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第三方ipad电容笔哪个品牌好用?平板电容笔推荐

可能很多人都认为&#xff0c;苹果原装的电容笔&#xff0c;是不可取代&#xff0c;但我认为&#xff0c;这还要看个人的预算&#xff0c;以及实际的需求。苹果Pencil对于那些不太讲究画质的用户来说实在是太贵了&#xff0c;要是我们仅用于书写上&#xff0c;其实我们可以用平…

编程导航算法通关村第 1关 | 单链表的操作

编程导航算法通关村第 1关 | 链表的操作 文章目录 编程导航算法通关村第 1关 | 链表的操作单链表链表的定义初始化链表的遍历获取链表的长度链表的插入链表的节点的删除 双向链表节点的定义双向链表的定义节点的打印获取长度头部插入元素尾部插入元素链表的删除 单链表 链表的…

jenkins发布使用邮件添加审批

首先安装好Email Extension Plugin插件并在 system下配置好邮件 然后配置流水线需要的参数 ![在这里插入图片描述](https://img-blog.csdnimg.cn/418fc89bfa89429783a1eb37d3e4ee26.png#pic_center pipeline如下&#xff1a; def skipRemainingStages false //是否跳过生…

采集发布到WordPress网址(OneNav主题-WordPress主题)

WordPress系统的一导航主题&#xff08;OneNav主题&#xff09;是集网址、资源、资讯于一体的导航主题。 要将采集的数据批量自动发布到一导航主题&#xff08;OneNav主题&#xff09;的网址要怎么设置&#xff1f; 普通的文章采集器一般只能发布为wordpress文章类型&#xff…

自监督语义分割面模型——Masked Autoencoders Are Scalable Vision Learners(MAE)论文阅读

1、摘要 This paper shows that masked autoencoders (MAE) are scalable self-supervised learners for computer vision. Our MAE approach is simple: we mask random patches of the input image and reconstruct the missing pixels. It is based on two core designs. F…

SpringBoot使用JWT进行身份验证

JWT身份验证的流程 用户登录&#xff1a; 用户向服务器提供他们的用户名和密码。 服务器验证&#xff1a;服务器接收到请求&#xff0c;验证用户名和密码。 生成JWT&#xff1a;如果用户名和密码验证通过&#xff0c;服务器将创建一个 JWT。 JWT 包含了一些数据&#xff08;称…

[JVM] 5. 运行时数据区(2)-- 程序计数器(Program Counter Register)

一、概述 JVM中的程序计数器&#xff08;Program Counter Register&#xff09;是对物理PC寄存器的一种抽象模拟。它是一块很小的内存空间&#xff0c;几乎可以忽略不记。也是运行速度最快的存储区域。在 JVM 规范中&#xff0c;每个线程都有它自己的程序计数器&#xff0c;是…

redis之主从复制、哨兵、集群

文章目录 一、redis的高可用1.1 redis高可用的概念1.2 Redis的高可用技术 二、redis 主从复制2.1主从复制的原理2.2搭建Redis 主从复制 三、Redis 哨兵模式3.1搭建Redis 哨兵模式3.2启动哨兵模式3.3查看哨兵信息3.4故障模拟 四、Redis 群集模式4.1搭建Redis 群集模式 一、redis…

【Excel】excel多个单元格的内容合并到一个单元格,并使用分隔符

方法一&#xff1a;使用连接符 & 左键单击选中“D2”单元格&#xff0c;在D2单元格中输入公式“A2&B2&C2”&#xff0c;按“Enter”即可实现数据合并。 ------如果想连接的时候&#xff0c;中间加分隔符&#xff0c;可以使用&#xff1a;公式A2&"&#xf…

Azure Kinect 之 Note(一)

Azure Kinect Azure Kinect DK 是一款开发人员工具包&#xff0c;配有先进的AI 传感器&#xff0c;提供复杂的计算机视觉和语音模型。 Kinect 将深度传感器、空间麦克风阵列与视频摄像头和方向传感器整合成一体式的小型设备&#xff0c;提供多种模式、选项和软件开发工具包(S…

面试题更新之-HTML5的新特性

文章目录 导文新特性有哪些&#xff1f;HTML5的新特性带来了许多好处 导文 面试题更新之-HTML5的新特性 新特性有哪些&#xff1f; HTML5引入了许多新特性和改进&#xff0c;以下是一些HTML5的新特性&#xff1a; 语义化标签&#xff1a;HTML5引入了一系列的语义化标签&#…

远程在Ubuntu20.04安装nvidia显卡驱动

第零步&#xff0c;找人装一个todesk。 在终端运行&#xff1a; ifconfig 记住ip地址&#xff0c;后面要用。 第一步&#xff0c;安装软件&#xff1a; sudo apt-get update sudo apt-get install g gcc make 第二步&#xff0c;下载显卡驱动&#xff1a; 官方驱动 | NVI…

【ThinkPHP】实现一个逆向工程生成model

ThinkPHP为了节省一些重复的步骤&#xff0c;写了个简单版的生成model的工具&#xff0c;逆向生成model代码&#xff0c;节省时间&#xff0c;专注写业务代码。 ThinkPHP中的命令行也提供了一些生成代码的命令&#xff1a; make:controller 创建控制器 make:model 创建模型 m…

医院制剂研发与真实世界评价论坛圆满闭幕

医院制剂是新药的摇篮和宝库&#xff0c;现代科技为医院制剂的研发和转化赋能。在新时代新政策下&#xff0c;2023年07月16日&#xff0c;由湖南省药学会医院制剂研发与真实世界评价专业委员会&#xff08;下称“专委会”&#xff09;主委单位湖南易能生物医药有限公司&#xf…

划片机的技术分解

划片机是一种切割设备&#xff0c;主要用于将硬脆材料&#xff08;如硅晶圆、蓝宝石基片、LED基片等&#xff09;分割成较小的单元。其工作原理是以强力磨削为划切机理&#xff0c;通过空气静压电主轴带动刀片与工件接触点的划切线方向呈直线运动&#xff0c;将每一个具有独立电…

概率论的学习和整理18:为什么 P(至少成功1次) = Σ P(几何分布) ,总结几何分布和连续失败概率的关系,二项分布和累计成功k次的关系

目录 1 先说结论&#xff1a; 2 Σ几何分布的P(xn) P(n次试验至少成功1次) 2.1 几何分布的概率 2.2 这个是可以证明的&#xff0c;下面是推导过程 2.3 怎么理解呢&#xff1f; 3 另外&#xff0c;P(累计成功k次) ΣP(成功k次的二项分布) 3.1 成功k次的概率 和 累计成…

回收站怎么看当天删除的文件?在回收站中找不到被删除文件怎么回事

在日常使用电脑的过程中&#xff0c;我们常常会遭遇删除文件的错误&#xff0c;这时回收站就像是一剂“后悔药”。然而&#xff0c;当回收站中堆积了许多已删除的文件时&#xff0c;我们如何才能找到当天删除的文件呢&#xff1f;如果回收站在这时无法提供文件&#xff0c;我们…

本地Linux 部署 Dashy 并远程访问

文章目录 简介1. 安装Dashy2. 安装cpolar3.配置公网访问地址4. 固定域名访问 转载自cpolar极点云文章&#xff1a;本地Linux 部署 Dashy 并远程访问 简介 Dashy 是一个开源的自托管的导航页配置服务&#xff0c;具有易于使用的可视化编辑器、状态检查、小工具和主题等功能。你…

Python应用实例(二)数据可视化(一)

数据可视化&#xff08;一&#xff09; 1.安装Matplotlib2.绘制简单的折线图2.1 修改标签文字和线条粗细2.2 矫正图形2.3 使用内置样式2.4 使用scatter()绘制散点图并设置样式2.5 使用scatter()绘制一系列点2.6 自动计算数据2.7 自定义颜色2.8 使用颜色映射2.9 自动保存图表 数…

Visual Studio 自定义的颜色字体不生效

问题描述&#xff1a; 1、dll1中引用第三方库的类不识别&#xff0c;颜色黑白&#xff0c;自定义颜色不生效&#xff1b;定义的是结构体 2、在dll2引用另一个dll1中的结构体。结构体不识别&#xff0c;今天成员函数cpp中自定义颜色不生效。 问题解决方式&#xff1a; 全部清…