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

news/2025/3/14 22:37:03/

本篇我们将主要介绍如何使用 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.ppmy.cn/news/913100.html

相关文章

邮件格式

邮件格式 Dear&#xff1a;收件人 邮件内容......Sincerely Mobile: 电话 E-mail : 邮件 Dept&#xff1a;部门 Co., Ltd&#xff1a;公司抬头 ******** 本郵件可能含有機密訊息&#xff0c;若您非本郵件之收件人請勿閱讀。 謝謝&#xff01;******** 保密警語: 本信件及附件…

一文读懂Makefile

1 程序的编译和链接 我们平时说的代码编译其实是要分为两个部分&#xff1a;编译和链接。编译就是将我们的代码翻译称为二进制文件&#xff0c;链接就是将各个文件所翻译成的二进制文件进行合并和重定位&#xff0c;最终生成可执行文件。由于没有学过编译原理&#xff0c;这里…

如何判断用户输入的邮箱格式是否正确?

用户名网站名-例sina.com、tom.com、yahoo.com.cn……&#xff08;有些小网站的邮箱在填资料时不认&#xff0c;所以推荐用网站的邮箱&#xff09; 一般都是用<正则表达式>来判断.什么是正则表达式&#xff1f;就是用如下特殊符号或其组合来代表某个字符&#xff08;以下…

gmail如何设置邮箱别名

abcdefgooglemail.com和abcdefgmail.com&#xff0c;是同一个邮箱&#xff0c;只是后缀不同。 不管发到哪个后缀&#xff0c;都是可以收到信的。------------------------------ 为abcdefgmail.com增加googlemail.com为别名的具体操作&#xff1a; 登录Gmail------设置-------帐…

常用正则表达式—邮箱(Email)

要验证一个字符串是否为邮箱的话&#xff0c;首先要了解邮箱账号的格式。我尝试过在网上找出一个标准的格式&#xff0c;但是很遗憾我没有找到。我也尝试使用RFC标准来判断邮箱的格式&#xff0c;但是也没有结果。网上些博客说不应该使用RFC标准来验证邮箱是否合法&#xff0c;…

【机器学习算法】奇异值分解(SVD)

文章目录 奇异值分解(SVD)1.理论部分1.1特征分解(ED)1.2 奇异值分解(SVD)求解U和V求解Σ 2.应用部分2.1图像压缩2.2图像数据集成分分析2.3 数据降维(PCA的一种解法) Reference 奇异值分解(SVD) 奇异值分解(Singular Value Decomposition) 是矩阵低秩分解的一种方法&#xff0c;…

Allegro Design Entry HDL 原理图设计专题

&#x1f3e1;《总目录》   &#x1f3e1;《宝典目录》 目录 1&#xff0c;内容概述2&#xff0c;内容目录 1&#xff0c;内容概述 本专题内容详细介绍Allegro Design Entry HDL原理图设计的软件编辑环境。 2&#xff0c;内容目录 Allegro Design Entry HDL&#xff08;OrCAD…

暗黑破坏神【题解】

Description 游戏的主人公有 n 个魔法&#xff0c;每个魔法分为若干个等级&#xff0c;第 i 个魔法有 p[i] 个等级&#xff08;不包括 0&#xff09;&#xff0c;每个魔法的每个等级都有一个效果值&#xff0c;一个 j 级的 i 种魔法的效果值为 w[i][j]&#xff0c;魔法升一级需…