这段代码实现了一个基于 Gradio 的聊天机器人界面,并使用了 langchain 和 ChatGLM 作为后端模型支持。以下是对代码的详细解释:
1. 导入必要的库
import gradio as gr
from langchain_community.llms import ChatGLM
from langchain.chains import ConversationChain
from langchain.memory import ConversationBufferMemory
gradio:一个用于快速构建交互式界面的 Python 库,适合展示机器学习或 AI 模型。langchain_community.llms.ChatGLM:这是langchain提供的一个接口,用于与本地部署的 ChatGLM 模型进行交互。ConversationChain:langchain中的一个链式结构,用于管理对话流程。ConversationBufferMemory:langchain提供的记忆模块,用于保存对话历史记录。
2. 定义 ChatGLM 模型的服务地址
CHATGLM_URL = "http://127.0.0.1:8001"
- 这里指定了 ChatGLM 模型的服务地址为本地运行的服务(
http://127.0.0.1:8001)。 - 假设你已经在本地启动了一个 ChatGLM 模型服务,它通过 HTTP 接口提供推理能力。
3. 初始化聊天机器人
def init_chatbot():
llm = ChatGLM(
endpoint_url=CHATGLM_URL,
max_token=80000,
history=[],
top_p=0.9,
model_kwargs={"sample_model_args": False},
)
global CHATGLM_CHATBOT
CHATGLM_CHATBOT = ConversationChain(llm=llm,
verbose=True,
memory=ConversationBufferMemory())
return CHATGLM_CHATBOT
- 功能:
- 创建并初始化一个聊天机器人实例。
- 关键点:
ChatGLM:endpoint_url:指定 ChatGLM 模型的服务地址。max_token:设置最大生成 token 数量(这里设置为 80000)。history:初始对话历史为空列表。top_p:控制生成文本的多样性,值越接近 1 越倾向于选择高概率词汇。model_kwargs:传递额外的模型参数,这里禁用了sample_model_args。
ConversationChain:- 将
ChatGLM模型封装到ConversationChain中,用于管理对话逻辑。 verbose=True:启用调试信息输出。memory=ConversationBufferMemory():使用缓冲区记忆来保存对话历史。
- 将
- 全局变量:
- 使用
global CHATGLM_CHATBOT将聊天机器人实例存储在全局变量中,以便后续函数可以访问。
- 使用
4. 定义聊天逻辑
def chatglm_chat(message, history):
ai_message = CHATGLM_CHATBOT.predict(input=message)
return ai_message
- 功能:
- 处理用户输入的消息,并调用 ChatGLM 模型生成回复。
- 关键点:
CHATGLM_CHATBOT.predict(input=message):- 调用
ConversationChain的predict方法,将用户输入的消息传递给模型。 - 模型会根据当前对话历史生成回复。
- 调用
- 返回值:
- 返回模型生成的回复消息。
5. 启动 Gradio 界面
def launch_gradio():
demo = gr.ChatInterface(
fn=chatglm_chat,
title="ChatBot (Powered by ChatGLM)",
chatbot=gr.Chatbot(height=600),
)
demo.launch(share=True, server_name="0.0.0.0")
- 功能:
- 使用
Gradio构建一个聊天界面,并启动服务。
- 使用
- 关键点:
gr.ChatInterface:fn=chatglm_chat:指定处理用户输入的函数。title="ChatBot (Powered by ChatGLM)":设置界面标题。chatbot=gr.Chatbot(height=600):定义聊天窗口的高度为 600 像素。
demo.launch:share=True:启用 Gradio 的分享功能,生成一个公共链接,方便他人访问。server_name="0.0.0.0":监听所有网络接口,允许外部设备访问(例如在同一局域网中的其他设备)。
6. 主程序入口
if __name__ == "__main__":
# 初始化聊天机器人
init_chatbot()
# 启动 Gradio 服务
launch_gradio()
- 功能:
- 当脚本直接运行时,执行以下操作:
- 调用
init_chatbot()初始化聊天机器人。 - 调用
launch_gradio()启动 Gradio 界面。
- 调用
- 当脚本直接运行时,执行以下操作:
工作流程总结
- 初始化阶段:
- 加载 ChatGLM 模型,并将其封装到
ConversationChain中。 - 配置对话历史记忆模块。
- 加载 ChatGLM 模型,并将其封装到
- 用户交互阶段:
- 用户通过 Gradio 界面输入消息。
- 调用
chatglm_chat函数处理用户输入,并生成模型回复。 - 回复内容显示在界面上。
- 服务启动:
- Gradio 界面启动后,用户可以通过浏览器访问并与聊天机器人交互。
依赖项和运行环境
- Python 库:
gradio:用于构建界面。langchain和langchain_community:用于集成 ChatGLM 模型。
- ChatGLM 模型服务:
- 需要在本地运行 ChatGLM 模型服务,并确保其地址为
http://127.0.0.1:8001。
- 需要在本地运行 ChatGLM 模型服务,并确保其地址为
- 运行命令:
python your_script.py
改进方向
- 错误处理:
- 在
chatglm_chat函数中添加异常捕获,防止模型服务不可用时导致程序崩溃。
- 在
- 多语言支持:
- 扩展界面以支持多语言输入和输出。
- 性能优化:
- 如果模型响应较慢,可以考虑异步调用或缓存机制。






![[福游宝——AI智能旅游信息查询平台]全栈AI项目-阶段二:聊天咨询业务组件开发](https://i-blog.csdnimg.cn/img_convert/cbe7587980f70950e2eb46d9b7ebea77.png)











