ChatGLM3 是智譜AI和清華大學 KEG 實驗室聯合釋出的新一代對話預訓練模型。ChatGLM3-6B 是 ChatGLM3 系列中的開源模型,在保留了前兩代模型對話流暢、部署門檻低等眾多優秀特性的基礎上,ChatGLM3-6B 引入瞭如下特性:
ChatGLM3 開源模型旨在與開源社群一起推動大模型技術發展,懇請開發者和大家遵守開源協定,勿將開源模型和程式碼及基於開源專案產生的衍生物用於任何可能給國家和社會帶來危害的用途以及用於任何未經過安全評估和備案的服務。目前,本專案團隊未基於 ChatGLM3 開源模型開發任何應用,包括網頁端、安卓、蘋果 iOS 及 Windows App 等應用。
儘管模型在訓練的各個階段都盡力確保資料的合規性和準確性,但由於 ChatGLM3-6B 模型規模較小,且模型受概率隨機性因素影響,無法保證輸出內容的準確。同時模型的輸出容易被使用者的輸入誤導。本專案不承擔開源模型和程式碼導致的資料安全、輿情風險或發生任何模型被誤導、濫用、傳播、不當利用而產生的風險和責任。
Model | Seq Length | Download |
---|---|---|
ChatGLM3-6B | 8k | HuggingFace | ModelScope |
ChatGLM3-6B-Base | 8k | HuggingFace | ModelScope |
ChatGLM3-6B-32K | 32k | HuggingFace | ModelScope |
對 ChatGLM3 進行加速的開源專案:
我們選取了 8 箇中英文典型資料集,在 ChatGLM3-6B (base) 版本上進行了效能測試。
Model | GSM8K | MATH | BBH | MMLU | C-Eval | CMMLU | MBPP | AGIEval |
---|---|---|---|---|---|---|---|---|
ChatGLM2-6B-Base | 32.4 | 6.5 | 33.7 | 47.9 | 51.7 | 50.0 | - | - |
Best Baseline | 52.1 | 13.1 | 45.0 | 60.1 | 63.5 | 62.2 | 47.5 | 45.8 |
ChatGLM3-6B-Base | 72.3 | 25.7 | 66.1 | 61.4 | 69.0 | 67.5 | 52.4 | 53.7 |
Best Baseline 指的是截止 2023年10月27日、模型引數在 10B 以下、在對應資料集上表現最好的預訓練模型,不包括只針對某一項任務訓練而未保持通用能力的模型。
對 ChatGLM3-6B-Base 的測試中,BBH 採用 3-shot 測試,需要推理的 GSM8K、MATH 採用 0-shot CoT 測試,MBPP 採用 0-shot 生成後執行測例計算 Pass@1 ,其他選擇題型別資料集均採用 0-shot 測試。
我們在多個長文字應用場景下對 ChatGLM3-6B-32K 進行了人工評估測試。與二代模型相比,其效果平均提升了超過 50%。在論文閱讀、檔案摘要和財報分析等應用中,這種提升尤為顯著。此外,我們還在 LongBench 評測集上對模型進行了測試,具體結果如下表所示
Model | 平均 | Summary | Single-Doc QA | Multi-Doc QA | Code | Few-shot | Synthetic |
---|---|---|---|---|---|---|---|
ChatGLM2-6B-32K | 41.5 | 24.8 | 37.6 | 34.7 | 52.8 | 51.3 | 47.7 |
ChatGLM3-6B-32K | 50.2 | 26.6 | 45.8 | 46.1 | 56.2 | 61.2 | 65 |
首先需要下載本倉庫:
git clone https://github.com/THUDM/ChatGLM3
cd ChatGLM3
然後使用 pip 安裝依賴:
pip install -r requirements.txt
其中 transformers
庫版本推薦為 4.30.2
,torch
推薦使用 2.0 及以上的版本,以獲得最佳的推理效能。
我們建議通過 Conda 進行環境管理。
執行以下命令新建一個 conda 環境並安裝所需依賴:
conda create -n chatglm3-demo python=3.10
conda activate chatglm3-demo
pip install -r requirements.txt
請注意,本專案需要 Python 3.10 或更高版本。
此外,使用 Code Interpreter 還需要安裝 Jupyter 核心:
ipython kernel install --name chatglm3-demo --user
執行以下命令在本地載入模型並啟動 demo:
streamlit run main.py
之後即可從命令列中看到 demo 的地址,點選即可存取。初次存取需要下載並載入模型,可能需要花費一定時間。
如果已經在本地下載了模型,可以通過 export MODEL_PATH=/path/to/model
來指定從本地載入模型。如果需要自定義 Jupyter 核心,可以通過 export IPYKERNEL=<kernel_name>
來指定。
ChatGLM3 Demo 擁有三種模式:
對話模式下,使用者可以直接在側邊欄修改 top_p, temperature, System Prompt 等引數來調整模型的行為。例如
可以通過在 tool_registry.py
中註冊新的工具來增強模型的能力。只需要使用 @register_tool
裝飾函數即可完成註冊。對於工具宣告,函數名稱即為工具的名稱,函數 docstring 即為工具的說明;對於工具的引數,使用 Annotated[typ: type, description: str, required: bool]
標註引數的型別、描述和是否必須。
例如,get_weather
工具的註冊如下:
@register_tool
def get_weather(
city_name: Annotated[str, 'The name of the city to be queried', True],
) -> str:
"""
Get the weather for `city_name` in the following week
"""
...
此外,你也可以在頁面中通過 Manual mode
進入手動模式,在這一模式下你可以通過 YAML 來直接指定工具列表,但你需要手動將工具的輸出反饋給模型。
由於擁有程式碼執行環境,此模式下的模型能夠執行更為複雜的任務,例如繪製圖表、執行符號運算等等。模型會根據對任務完成情況的理解自動地連續執行多個程式碼塊,直到任務完成。因此,在這一模式下,你只需要指明希望模型執行的任務即可。
例如,我們可以讓 ChatGLM3 畫一個愛心:
Stop
按鈕進行打斷。可以通過如下程式碼呼叫 ChatGLM 模型來生成對話:
>>> from transformers import AutoTokenizer, AutoModel
>>> tokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm3-6b", trust_remote_code=True)
>>> model = AutoModel.from_pretrained("THUDM/chatglm3-6b", trust_remote_code=True, device='cuda')
>>> model = model.eval()
>>> response, history = model.chat(tokenizer, "你好", history=[])
>>> print(response)
你好