本篇我们将主要介绍如何使用 LangChain 连接 CnosDB 数据库,实现使用自然语言和数据库的交流。
大模型等的相关话题已经霸榜半年有余,在讨论关注之余,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 的主要价值在于:
组件化:为使用语言模型提供抽象化的工具,同时还提供了每个抽象化工具的一系列实现。这些组件是模块化且易于使用的,无论你是否使用 LangChain 框架的其他部分。
现成的链式结构:用于完成特定高级任务的一系列组件的结构化组合。
现成的链式结构使得入门变得容易。对于更复杂的应用程序和细致的使用情况,组件使得自定义现有链式结构或构建新的链式结构变得容易。
实现架构图
通过架构图可以看出:通过利用 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 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
执行下面命令:
安装 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")
复制代码
参数:
使用示例:
# 使用 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
评论