首页 » 博客 » CnosDB x LangChain: 聊着天来查询时序数据库

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

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

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

 

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

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

简介 CnosDB 与 LangChain

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

它具有以下特性:

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

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

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

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

  • 数据感知:将语言模型与其他数据源连接起来。
  • 主体性:允许语言模型与其环境进行交互。

LangChain 的主要价值在于:

  1. 组件化:为使用语言模型提供抽象化的工具,同时还提供了每个抽象化工具的一系列实现。这些组件是模块化且易于使用的,无论你是否使用 LangChain 框架的其他部分。
  2. 现成的链式结构:用于完成特定高级任务的一系列组件的结构化组合。现成的链式结构使得入门变得容易。对于更复杂的应用程序和细致的使用情况,组件使得自定义现有链式结构或构建新的链式结构变得容易。

实现架构图

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

安装部署 CnosDB

我们以 Docker 为例安装 CnosDB,其他的安装方法请参考官网文档,安装部分(https://docs.cnosdb.com/zh/latest/deploy/install.html)。

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.1Input 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 来创建uriuri = cnosdb_connector.make_cnosdb_langchain_uri()# 通过 SQLDatabase.from_uri 来创建 DBdb = 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 连接 CnosDBfrom cnosdb_connector import make_cnosdb_langchain_urifrom langchain import SQLDatabase uri = cnosdb_connector.make_cnosdb_langchain_uri()db = SQLDatabase.from_uri(uri) # 创建 OpenAI Chat LLMfrom 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_agentfrom 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_tablesAction Input: ""Observation: airThought: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_schemaAction 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	visibility75.0	XiaoMaiDao	67.0	2022-10-19T03:40:00	54.077.0	XiaoMaiDao	69.0	2022-10-19T04:40:00	56.076.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_queryAction 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 社区交流群:

 

扫描下方二维码,加入 CC 进入 CnosDB 社区交流,CC 也会在群内分享直播链接哒