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

news2024/11/26 17:29:36

本篇我们将主要介绍如何使用 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 SQLDatabase

uri = cnosdb_connector.make_cnosdb_langchain_uri()
db = SQLDatabase.from_uri(uri)

# 创建 OpenAI Chat LLM
from langchain.chat_models import ChatOpenAI

llm = ChatOpenAI(temperature=0, model_name="gpt-3.5-turbo")

SQLDatabaseChain示例:

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

from langchain import SQLDatabaseChain

db_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 SQLDatabaseToolkit

toolkit = 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.coloradmin.cn/o/760100.html

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

相关文章

实现最大子段和的计算,输入数据从文件读取。

1.设计思路   求解该题可以用分治法解题&#xff0c;总共有三种情况&#xff0c;最大子段在我们数组的左侧&#xff1b;最大子段在我们数组的右侧&#xff1b;最大子段跨过了左右两侧&#xff0c;在中间最大。第一种和第二种将两个子问题递归解出。分开的位置就是我们的中心位…

ios oc button 设置

Button调整内部的子控件的位置

图书借阅系统

系统描述 该图书借阅系统是一个用于图书馆或类似机构管理图书借阅流程的在线平台。系统主要包括管理员模块和读者模块&#xff0c;分别提供相应的功能和权限。 - 管理员模块&#xff1a; - 注册&#xff1a;允许管理员创建新的管理员账号。 - 登录&#xff1a;允许管理员使用账…

centos7 安装vmware17

vmware17 下载 官网 VMware Hong Kong - Delivering a Digital Foundation For Businesses | HK | HK 下载链接 Download VMware Workstation Pro 下载链接&#xff0c;直接点击下载即可 https://download3.vmware.com/software/WKST-1702-LX/VMware-Workstation-Full-17.0…

Unity自定义后处理——校色

Unity自定义校色后处理 大家好&#xff0c;我是阿赵。   之前介绍了一些后处理的做法&#xff0c;包括了PostProcessing和CommandBuffer。其实如果我们只是实现一些比较单一的全屏效果&#xff0c;也没必要搞那么复杂&#xff0c;直接在OnRenderImage里面写Graphics.Blit就可…

最近很火的 LangChain 你了解吗

最近 ChatGPT 很火&#xff0c;AIGC 很火&#xff0c;各类国产化 AI 很火。周边的 AI 工具集、框架也很火。各类新词也层出不穷。今天和大家学习和分享的是重量级新选手 LangChain。 一、什么是 LangChain LangChain 是一个 2023 年 1 月&#xff08;v0.0.64&#xff09;在 G…

网页聊天室测试

1.项目介绍&#xff1a; 该项目是一个基于网页的聊天室应用&#xff0c;具有用户注册、登录、会话列表、好友列表、发送消息等功能。下面是更详细的项目介绍&#xff1a; 用户注册和登录功能&#xff1a;用户可以通过输入用户名和设置密码来注册新账户&#xff0c;在注册过程中…

实施工程师需要了解的mysql知识

一、前言 做为实施工程师&#xff0c;在现场有时候是需要协助开发人员做一些简单的sql查询、更新动作的&#xff0c;不需要多复杂&#xff0c;下面就简单介绍下mysql的安装以及举一些最简单常用的sql用例。 二、安装mysql 2.1 下载安装包 第一步&#xff1a;在百度搜索"…

vue 通过多组复选框来过滤数据

1.通过if else 来筛选数据 <template> <div><div><label><input type"checkbox" v-model"checkedNames" value"北京"> 北京</label><label><input type"checkbox" v-model"chec…

使用python进行AI选股之同花顺问财

通过问财python库&#xff0c;可以输入中文就能获取AI选股结果&#xff0c;而不需要写很多代码来进行股票选取&#xff0c;如上图就是输入中文”均线多头排列的股票”获取的结果。本文主要介绍问财python库的选股功能和使用步骤。 什么是问财python库 同花顺i问财是同花顺旗下…

Echarts 定制化日历图

目录 改造一&#xff08;变化X轴、Y轴label&#xff09;&#xff1a; 改造二&#xff08;单元格、图例改造&#xff09;&#xff1a; 改造三&#xff08;tooltip、细节优化&#xff09;&#xff1a; 最近在做可视化&#xff0c;发现日历图挺有意思&#xff0c;分享一波吧&am…

SpringBoot项目打包Docker镜像

1、创建springboot项目&#xff0c;并在根目录新建Dockerfile文件 Dockerfile文件内容 FROM adoptopenjdk/openjdk8:jre8u-nightly ADD target/test-k8s-0.0.1-SNAPSHOT.jar test-k8s-0.0.1-SNAPSHOT.jar ENTRYPOINT ["java","-jar","/test-k8s-0.0.…

Python编程——字符串的拼接

作者&#xff1a;Insist-- 个人主页&#xff1a;insist--个人主页 本文专栏&#xff1a;python专栏 专栏介绍&#xff1a;本专栏为免费专栏&#xff0c;并且会持续更新python基础知识&#xff0c;欢迎各位订阅关注。 前言 本文将讲解字符串的拼接与使用%进行拼接。 目录 ​编…

(二)Qt下多线程实现多个海康工业相机内触发采集回调取流显示

系列文章目录 提示&#xff1a;这里是该系列文章的所有文章的目录 第一章&#xff1a;&#xff08;一&#xff09;Qt下实现多个海康工业相机内触发采集回调取流显示 第二章&#xff1a;&#xff08;二&#xff09;Qt下多线程实现多个海康工业相机内触发采集回调取流显示 文章目…

单例模式之常见模式详解

单例模式之常见模式详解 单例模式的定义单例模式的分类饿汉模式懒汉模式 单例模式的主要特点单例模式的应用场景总结 单例模式的定义 单例模式是一种设计模式&#xff0c;用于确保一个类只有一个实例&#xff0c;并提供一个全局访问点来获取该实例。 在单例模式中&#xff0c;类…

2023需求最高的编程语言:Python、JavaScript和Java

科技招聘平台 CodinGame 和 CoderPad 最新发布了一份 2023 年科技行业招聘报告&#xff0c;基于对 14000 名专业人士的调查&#xff0c;对 2023 年科技行业招聘人员和求职者可能面临的情况进行了深入分析。其中一些关键亮点包括&#xff1a; 59% 的开发人员没有计算机科学方面的…

吴恩达机器学习笔记-week2

第2周 目录 第2周 四、多变量线性回归(Linear Regression with Multiple Variables) 4.1 多维特征4.2 多变量梯度下降4.3 梯度下降法实践1-特征缩放4.4 梯度下降法实践2-学习率4.5 特征和多项式回归4.6 正规方程4.7 正规方程及不可逆性(可选) 四、多变量线性回归(Linear Regres…

docker的安装以及常用命令详解

目录 一、docker简介 二、docker安装 三、常用命令 1、显示 Docker 版本信息 2、显示 Docker 系统信息&#xff0c;包括镜像和容器数 3、帮助 四、镜像管理 1、列出镜像 2、获取一个新的镜像 3、查找镜像 4、删除镜像 5、镜像导入与导出 五、容器生命周期 1、运行…

Bring Your Data!Self- supervised Evolution of Large Language Models

Bring Your Data&#xff01;Self- supervised Evolution of Large Language Models IntroductionMethod参考 Introduction 这篇论文提出了一种自监督的评估方式来衡量大型语言模型的能力和局限性。常规的基于数据集的评估方式存在一些缺点: 需要不断新建数据集。存在数据集和…

外包软件定制开发中时间和进度管理

引言 时间和进度管理是外包软件定制开发项目中至关重要的方面。有效地管理时间和进度可以确保项目按计划顺利进行&#xff0c;减少延误和风险&#xff0c;从而提高交付的可靠性和质量。然而&#xff0c;由于外包团队和客户位于不同的地理位置和时区&#xff0c;时间和进度管理…