langchain_chatchat+ollama部署本地知識庫,聯網查詢以及對資料庫(Oracle)資料進行查詢
涉及的內容其實挺多的,所以儘量減少篇幅
- langchain_chatchat+ollama部署本地知識庫,聯網查詢以及對資料庫(Oracle)資料進行查詢
- 準備工作:
- 部署ollama以及拉取模型
- 部署langchain_chatchat
- 部署oracle資料庫
- 對langchain-chatchat的配置檔案初步調整:
- langchain-chatchat執行:
- langchain-chatchat簡單操作:
- langchain-chatchat聯網查詢:
- langchain-chatchat連線oracle資料庫並查詢內容:
- 重要的!!!最重要的!!!
- 準備工作:
準備工作:
部署ollama,並拉取qwen2.5:14b和quentinz/bge-large-zh-v1.5:latest
部署langchain_chatchat
部署oracle資料庫
部署ollama以及拉取模型
可以參考下面的文章:
https://www.cnblogs.com/jokingremarks/p/18151827
部署langchain_chatchat
Langchain_chatchat的github路徑:https://github.com/chatchat-space/Langchain-Chatchat
使用vscode快速建立一個venv虛擬環境管理工具
在當前環境下直接下載Langchain-Chatchat的python庫
注意:這個只能在Python 3.8-3.11的環境下,不然會報錯
Langchain-Chatchat 提供以 Python 庫形式的安裝方式,具體安裝請執行:
pip install langchain-chatchat -U
如果要用Xinference接入Langchain-Chatchat,建議使用如下安裝方式:
pip install "langchain-chatchat[xinference]" -U
本文使用ollama作為本地模型的呼叫,所以不需要裝Xinference
部署oracle資料庫
這裡我是直接下載到了本地,使用的版本是Oracle 19c,安裝教程網上大把,記得建立一個資料庫,我這裡資料庫名字是orcl
對langchain-chatchat的配置檔案初步調整:
首先先調整model_settings.yaml
DEFAULT_LLM_MODEL和DEFAULT_EMBEDDING_MODEL,將其替換成ollama下載下來的模型名,這裡我們使用qwen2.5:14b作為LLM,使用quentinz/bge-large-zh-v1.5:latest作為Embedding
# 預設選用的 LLM 名稱
DEFAULT_LLM_MODEL: qwen2.5:14b
# 預設選用的 Embedding 名稱
DEFAULT_EMBEDDING_MODEL: quentinz/bge-large-zh-v1.5:latest
MODEL_PLATFORMS部分只保留ollama,同時修改內容
llm_models:
- qwen2.5:14b
embed_models:
- quentinz/bge-large-zh-v1.5:latest
langchain-chatchat執行:
詳細內容可以檢視文件:https://github.com/chatchat-space/Langchain-Chatchat
其實就三步
執行初始化
chatchat init
初始化知識庫
chatchat kb -r
啟動專案
chatchat start -a
一般會自動跳到瀏覽器裡面,地址為http://127.0.0.1:8501/
langchain-chatchat簡單操作:
模型對話,就是最基礎的對話操作,啟用agent的時候可以選擇不同的工具來進行對話
RAG對話,可以選擇不同的場景進行對話,其中有知識庫問答,檔案對話和搜尋引擎問答
知識庫問答就是使用專案路徑下的檔案內容回答,會有些自帶的檔案在裡面,可以自己上傳
檔案對話就是基於上傳的檔案內容進行問答
搜尋引擎對話後面會有補充,需要對配置檔案再進行調整
知識庫管理,即對專案中的內部知識庫進行增刪知識庫以及重建向量庫
langchain-chatchat聯網查詢:
如果使用duckduckgo作為搜尋引擎的話可能需要FQ,這個就自行解決了
先安裝duckduckgo-search
pip install -U duckduckgo-search
將tool_settings.yaml中的search_internet的search_engine_name設定成duckduckgo
如果要查詢天氣或者地圖相關的,可以增加用高德地圖的配置,api可以直接去高德申請,比較容易
將kb_settings.yaml中的DEFAULT_SEARCH_ENGINE也修改成duckduckgo
重新載入專案以後,就可以使用搜尋引擎對話了
langchain-chatchat連線oracle資料庫並查詢內容:
官方文件:https://github.com/chatchat-space/Langchain-Chatchat/blob/master/docs/install/README_text2sql.md
首先我們找到tool_settings.yaml中的text2sql進行修改
有幾個需要注意的地方
oracle的連線我使用的是oracledb,所以需要安裝oracledb
python -m pip install oracledb
table_comments是一些提示用的,如果發現模型形成的sql老是找不對錶或者欄位,就在裡面說明下,準確率會大幅提高
重要的!!!最重要的!!!
因為oracle的語法比較特殊,所以要對langchain的原始碼進行修改
找到專案中的/envs/chat_0.3.1/lib/python3.11/site-packages/langchain_experimental/sql/base.py
在其中對SQL進行一些處理,目前我遇到的情況有如下的,都需要重新分割處理才行
if "sql" in sql_cmd:
sql_cmd = sql_cmd.split("sql")[-1].strip() # 增加的sql過濾,按照sql分割,取後一段,為了去掉```sql的開頭
if "`" in sql_cmd:
sql_cmd = sql_cmd.split("`")[0].strip() # 增加的sql過濾,按照sql分割,取後一段,為了去掉```的結尾
if "LIMIT" in sql_cmd:
sql_cmd = sql_cmd.split("LIMIT")[0].strip() # 增加的sql過濾,按照sql分割,取後一段,為了去掉LIMIT
然後重新執行專案,選擇啟用agent並選擇資料庫對話,輸入要搜尋的東西,終端裡面可以看到對應的sql以及查詢結果
可以看到回答的和資料庫中查詢的內容一致
不過對Oracle資料庫好像不是很友好,有時候還是會有一些奇怪的報錯
以上