使用Langchain構(gòu)建簡單的數(shù)據(jù)庫Agent
上篇文章我們介紹了一個使用RAG進行SQL生成的項目(RAG做SQL生成處理表格,一個10.1k※的開源工具vanna)。這篇文章我們介紹一個使用LangChain實現(xiàn)SQLagent的方法,LangChain直接內(nèi)置了自己的SQLagent實現(xiàn)-—SQLDatabaseChain。這個方法使用 SQL Alchemy 與數(shù)據(jù)庫交互。感興趣的可以考慮一下這兩個方案是否可以融合,這樣保證SQL的準(zhǔn)確性從而提升最終結(jié)果的準(zhǔn)確率。下面將介紹今天主要內(nèi)容的實現(xiàn)步驟:
實現(xiàn)步驟
首先,我們得有一個數(shù)據(jù)庫。這里我們用的是ClickHouse,一個開源的、面向列的SQL數(shù)據(jù)庫管理系統(tǒng),特別適合大數(shù)據(jù)分析。安裝起來超級簡單,一行命令就搞定。
接下來,我們得讓Agent學(xué)會和ClickHouse交流。這里就需要用到clickhouse-sqlalchemy這個包了。安裝它之后,我們就可以建立數(shù)據(jù)庫連接,然后初始化我們的Toolkit。這個Toolkit就像是我們的Agent的工具箱,里面裝滿了有用的工具。
現(xiàn)在,讓我們來創(chuàng)建一個SQLDatabaseChain的Agent。這個Agent可以直接和數(shù)據(jù)庫交互,回答問題。我們只需要定義一些工具,比如查詢表結(jié)構(gòu)、執(zhí)行SQL查詢等。然后,我們就可以快速創(chuàng)建并運行這個Agent了。
環(huán)境搭建
今天用到的主要安裝包如下,其它可以根據(jù)提示安裝:
# 安裝 clickhouse-sqlalchemy 包來連接 ClickHouse
pip install clickhouse-sqlalchemy langchain
運行代碼
代碼大概是這樣的:
from langchain.agents import AgentExecutor, AgentType
from langchain.sql_database_toolkit import SQLDatabaseToolkit
# 設(shè)置數(shù)據(jù)庫連接
uri = 'clickhouse+native://localhost/ecommerce'
db = SQLDatabase.from_uri(uri)
# 初始化工具箱
toolkit = SQLDatabaseToolkit(db=db, llm=OpenAI(temperature=0))
# 創(chuàng)建并運行基于 OpenAI 函數(shù)的 Agent
agent_executor = create_sql_agent(
llm=ChatOpenAI(temperature=0.1, model='gpt-4-1106-preview'),
toolkit=toolkit,
verbose=True,
agent_type=AgentType.OPENAI_FUNCTIONS
)
# 運行 Agent,回答數(shù)據(jù)相關(guān)問題
agent_executor.run("我們有多少來自上海的活躍客戶?")
運行這段代碼后,Agent就會根據(jù)我們的問題去數(shù)據(jù)庫里找到答案,然后告訴我們。比如,它會告訴我們有多少來自上海的活躍客戶。這個Agent的好處在于,它可以直接理解我們的問題,然后去數(shù)據(jù)庫里找到答案。我們不需要自己寫SQL查詢,也不需要擔(dān)心查詢的語法問題。Agent會幫我們搞定一切。
如果對內(nèi)容有什么疑問和建議可以私信和留言,也可以添加我加入大模型交流群,一起討論大模型在創(chuàng)作、RAG和agent中的應(yīng)用。