langchain_chatchat+ollama部署本地知識庫,聯網查詢以及對資料庫(Oracle)資料進行查詢

DbWong_0918發表於2024-11-16

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虛擬環境管理工具
image
image

在當前環境下直接下載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

image

MODEL_PLATFORMS部分只保留ollama,同時修改內容

llm_models:
      - qwen2.5:14b
embed_models:
      - quentinz/bge-large-zh-v1.5:latest

image

langchain-chatchat執行:

詳細內容可以檢視文件:https://github.com/chatchat-space/Langchain-Chatchat

其實就三步

執行初始化

chatchat init

初始化知識庫

chatchat kb -r

啟動專案

chatchat start -a

一般會自動跳到瀏覽器裡面,地址為http://127.0.0.1:8501/

image

langchain-chatchat簡單操作:

模型對話,就是最基礎的對話操作,啟用agent的時候可以選擇不同的工具來進行對話

image

RAG對話,可以選擇不同的場景進行對話,其中有知識庫問答,檔案對話和搜尋引擎問答

image

知識庫問答就是使用專案路徑下的檔案內容回答,會有些自帶的檔案在裡面,可以自己上傳

image

image

檔案對話就是基於上傳的檔案內容進行問答

image

搜尋引擎對話後面會有補充,需要對配置檔案再進行調整

知識庫管理,即對專案中的內部知識庫進行增刪知識庫以及重建向量庫

image

langchain-chatchat聯網查詢:

如果使用duckduckgo作為搜尋引擎的話可能需要FQ,這個就自行解決了

先安裝duckduckgo-search

pip install -U duckduckgo-search

將tool_settings.yaml中的search_internet的search_engine_name設定成duckduckgo

image

如果要查詢天氣或者地圖相關的,可以增加用高德地圖的配置,api可以直接去高德申請,比較容易

image

將kb_settings.yaml中的DEFAULT_SEARCH_ENGINE也修改成duckduckgo

image

重新載入專案以後,就可以使用搜尋引擎對話了

image

langchain-chatchat連線oracle資料庫並查詢內容:

官方文件:https://github.com/chatchat-space/Langchain-Chatchat/blob/master/docs/install/README_text2sql.md

首先我們找到tool_settings.yaml中的text2sql進行修改

image

有幾個需要注意的地方

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

image

然後重新執行專案,選擇啟用agent並選擇資料庫對話,輸入要搜尋的東西,終端裡面可以看到對應的sql以及查詢結果

image

可以看到回答的和資料庫中查詢的內容一致

image

不過對Oracle資料庫好像不是很友好,有時候還是會有一些奇怪的報錯

以上

相關文章