Skip to main content

CnosDB

CnosDB 是一个开源的分布式时间序列数据库,具有高性能、高压缩率和高易用性。

安装和设置

pip install cnos-connector

连接到 CnosDB

您可以使用 SQLDatabase.from_cnosdb() 方法连接到 CnosDB。

语法

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

参数:

  1. url (str): CnosDB 服务的 HTTP 连接主机名和端口号,不包括 "http://" 或 "https://",默认值为 "127.0.0.1:8902"。
  2. user (str): 用于连接到 CnosDB 服务的用户名,默认值为 "root"。
  3. password (str): 连接到 CnosDB 服务的用户的密码,默认值为 ""。
  4. tenant (str): 用于连接到 CnosDB 服务的租户名称,默认值为 "cnosdb"。
  5. database (str): CnosDB 租户中的数据库名称。

示例

# 使用 SQLDatabase 包装器连接到 CnosDB
from langchain import SQLDatabase

db = SQLDatabase.from_cnosdb()
# 创建一个 OpenAI Chat LLM 包装器
from langchain.chat_models import ChatOpenAI

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

SQL 数据库链

此示例演示了使用 SQL 链回答 CnosDB 上的问题的用法。

from langchain import SQLDatabaseChain

db_chain = SQLDatabaseChain.from_llm(llm, db, verbose=True)

db_chain.run(
"在2022年10月19日至2022年10月20日期间,小麦岛站的平均气温是多少?"
)
> 进入新的链...
在2022年10月19日至2022年10月20日期间,小麦岛站的平均气温是多少?
SQLQuery:SELECT AVG(temperature) FROM air WHERE station = 'XiaoMaiDao' AND time >= '2022-10-19' AND time < '2022-10-20'
SQLResult: [(68.0,)]
Answer:在2022年10月19日至2022年10月20日期间,小麦岛站的平均气温是68.0。
> 完成链。

SQL 数据库代理

此示例演示了使用 SQL 数据库代理回答 CnosDB 上的问题的用法。

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(
"在2022年10月19日至2022年10月20日期间,小麦岛站的平均气温是多少?"
)
> 进入新的链...
Action: sql_db_list_tables
Action Input: ""
Observation: air
Thought: "air" 表似乎与问题相关。我应该查询 "air" 表的模式,看看有哪些列可用。
Action: sql_db_schema
Action Input: "air"
Observation:
CREATE TABLE air (
pressure FLOAT,
station STRING,
temperature FLOAT,
time TIMESTAMP,
visibility FLOAT
)

/*
air 表的 3 行数据:
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: "air" 表中的 "temperature" 列与问题相关。我可以查询指定日期之间的平均温度。
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:在2022年10月19日至2022年10月20日期间,小麦岛站的平均气温是68.0。
Final Answer: 68.0

> 完成链。