部署一个本地的聊天机器人-基于ChatGLM3
预备
理论上来说
- 8G及以上显存的英伟达GPU
笔者的设备
- RTX 4060Ti (16G显存)
- Archlinux
- Python 3.10.10
- ChatGLM3 代码版本 33953b119e7
开整
下载ChatGLM3
ChatGLM3 是智谱AI几周前才开源的模型, 6B大小的话只是个人用的话算是完全免费的. 这个相比之前的2感觉是prompt优化了一些(不过也复杂了一些), 可以直接用来让机器人调用工具等等
需要下载两个仓库, 一个是代码库一个是模型库, 下面的命令不需要代理也可以直接执行
git clone https://www.modelscope.cn/ZhipuAI/chatglm3-6b.git
git clone https://mirror.ghproxy.com/https://github.com/THUDM/ChatGLM3
运行
我本地用gradio 3.50.2
跑web_demo
有点问题, 所以微改了一下自带的web_demo
diff --git a/basic_demo/web_demo.py b/basic_demo/web_demo.py
index a6e4e19..b30d834 100644
--- a/basic_demo/web_demo.py
+++ b/basic_demo/web_demo.py
@@ -5,7 +5,8 @@ import mdtex2html
from utils import load_model_on_gpus
import torch
-MODEL_PATH = os.environ.get('MODEL_PATH', 'THUDM/chatglm3-6b')
+# MODEL_PATH = os.environ.get('MODEL_PATH', 'THUDM/chatglm3-6b')
+MODEL_PATH = os.path.expanduser("~/Github/chatglm3-6b")
TOKENIZER_PATH = os.environ.get("TOKENIZER_PATH", MODEL_PATH)
DEVICE = 'cuda' if torch.cuda.is_available() else 'cpu'
@@ -21,6 +22,7 @@ else: # CPU, Intel GPU and other GPU can use Float16 Precision Only
"""Override Chatbot.postprocess"""
+chat_postprocess = gr.Chatbot.postprocess
def postprocess(self, y):
if y is None:
return []
@@ -29,10 +31,9 @@ def postprocess(self, y):
None if message is None else mdtex2html.convert((message)),
None if response is None else mdtex2html.convert(response),
)
- return y
+ return chat_postprocess(self, y)
-
-gr.Chatbot.postprocess = postprocess
+# gr.Chatbot.postprocess = postprocess
def parse_text(text):
@@ -75,7 +76,7 @@ def predict(input, chatbot, max_length, top_p, temperature, history, past_key_va
return_past_key_values=True,
max_length=max_length, top_p=top_p,
temperature=temperature):
- chatbot[-1] = (parse_text(input), parse_text(response))
+ chatbot[-1] = (parse_text(input), response)
yield chatbot, history, past_key_values
@@ -90,13 +91,12 @@ def reset_state():
with gr.Blocks() as demo:
gr.HTML("""<h1 align="center">ChatGLM3-6B</h1>""")
-
+ gr.ChatInterface
chatbot = gr.Chatbot()
with gr.Row():
with gr.Column(scale=4):
with gr.Column(scale=12):
- user_input = gr.Textbox(show_label=False, placeholder="Input...", lines=10).style(
- container=False)
+ user_input = gr.Textbox(show_label=False, placeholder="Input...", lines=10, container=False)
with gr.Column(min_width=32, scale=1):
submitBtn = gr.Button("Submit", variant="primary")
with gr.Column(scale=1):
@@ -108,10 +108,11 @@ with gr.Blocks() as demo:
history = gr.State([])
past_key_values = gr.State(None)
+ # submitBtn.click(predict, [user_input, chatbot, max_length, top_p, temperature, history, past_key_values],
+ # [chatbot, history, past_key_values])
submitBtn.click(predict, [user_input, chatbot, max_length, top_p, temperature, history, past_key_values],
- [chatbot, history, past_key_values], show_progress=True)
- submitBtn.click(reset_user_input, [], [user_input])
+ [chatbot, history, past_key_values]).then(reset_user_input, [], [user_input], queue=False)
- emptyBtn.click(reset_state, outputs=[chatbot, history, past_key_values], show_progress=True)
+ emptyBtn.click(reset_state, outputs=[chatbot, history, past_key_values], queue=False)
-demo.queue().launch(share=False, server_name="127.0.0.1", server_port=8501, inbrowser=True)
+ demo.queue().launch(share=False, server_name="127.0.0.1", server_port=8501, inbrowser=True)
跑了一下结果也是非常的棒, 生成速度还蛮快的, 非常的丝滑文章来源:https://www.toymoban.com/news/detail-747222.html
看看效果
文章来源地址https://www.toymoban.com/news/detail-747222.html
到了这里,关于部署一个本地的聊天机器人-基于ChatGLM3的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!