当前位置: 首页 > news >正文

实战基于LangChain和ChatGLM私有化部署聊天机器人

本文主要阐述了如何使用第二代6B模型进行对话训练,以及如何通过微调来提高大模型的性能。文中提到了在8501端口上启动第二代6B模型,并使用极简模板进行请求。与第一代模型相比,第二代6B模型具有更强的对话能力,并且可以通过微调来适应特定任务。此外,本文还介绍了如何使用ChatGLM-6B模型进行调用,以及如何使用gradio进行环境隔离和客户端创建。最后,文中提到了向量数据库和基于大模型的RAG或chatbot等检索方法。

ChatGLM3-6B 模型私有化部署

ChatGLM-6B 是一个开源的、支持中英双语的对话语言模型,基于 General Language Model (GLM) 架构,具有 62 亿参数。结合模型量化技术,用户可以在消费级的显卡上进行本地部署(INT4 量化级别下最低只需 6GB 显存)。 ChatGLM-6B 使用了和 ChatGPT 相似的技术,针对中文问答和对话进行了优化。经过约 1T 标识符的中英双语训练,辅以监督微调、反馈自助、人类反馈强化学习等技术的加持,62 亿参数的 ChatGLM-6B 已经能生成相当符合人类偏好的回答。

使用 Transformers 库加载模型

可以通过如下代码调用 ChatGLM-6B 模型来生成对话:

>>> from transformers import AutoTokenizer, AutoModel
>>> tokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True)
>>> model = AutoModel.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True).half().cuda()
>>> model = model.eval()
>>> response, history = model.chat(tokenizer, "你好", history=[])
>>> print(response)
你好👋!我是人工智能助手 ChatGLM-6B,很高兴见到你,欢迎问我任何问题。
>>> response, history = model.chat(tokenizer, "晚上睡不着应该怎么办", history=history)
>>> print(response)
晚上睡不着可能会让你感到焦虑或不舒服,但以下是一些可以帮助你入睡的方法:1. 制定规律的睡眠时间表:保持规律的睡眠时间表可以帮助你建立健康的睡眠习惯,使你更容易入睡。尽量在每天的相同时间上床,并在同一时间起床。
2. 创造一个舒适的睡眠环境:确保睡眠环境舒适,安静,黑暗且温度适宜。可以使用舒适的床上用品,并保持房间通风。
3. 放松身心:在睡前做些放松的活动,例如泡个热水澡,听些轻柔的音乐,阅读一些有趣的书籍等,有助于缓解紧张和焦虑,使你更容易入睡。
4. 避免饮用含有咖啡因的饮料:咖啡因是一种刺激性物质,会影响你的睡眠质量。尽量避免在睡前饮用含有咖啡因的饮料,例如咖啡,茶和可乐。
5. 避免在床上做与睡眠无关的事情:在床上做些与睡眠无关的事情,例如看电影,玩游戏或工作等,可能会干扰你的睡眠。
6. 尝试呼吸技巧:深呼吸是一种放松技巧,可以帮助你缓解紧张和焦虑,使你更容易入睡。试着慢慢吸气,保持几秒钟,然后缓慢呼气。如果这些方法无法帮助你入睡,你可以考虑咨询医生或睡眠专家,寻求进一步的建议。

加载库
模型的实现仍然处在变动中。如果希望固定使用的模型实现以保证兼容性,可以在 from_pretrained 的调用中增加 revision=“v1.1.0” 参数。以上代码会由 transformers 自动下载模型实现和参数。完整的模型实现可以在 Hugging Face Hub。如果你的网络环境较差,下载模型参数可能会花费较长时间甚至失败。此时可以先将模型下载到本地,然后从本地加载。

使用 Gradio WebUI 启动模型(Basic Demo)

首先安装 Gradio:pip install gradio,然后运行仓库中的 web_demo.py:

git clone https://github.com/THUDM/ChatGLM-6B
cd ChatGLM-6B

程序会运行一个 Web Server,并输出地址。在浏览器中打开输出的地址即可使用。最新版 Demo 实现了打字机效果,速度体验大大提升。
2024年的 PR 更新改变了 ChatGLM3 代码结构,相关DEMO启动文件均移动到 *_demo目录下。
README.md 还未及时更新,如下所示:
启动模型
通过GradIO和LangChain,可以将ChatGLM模型转换为有界面的应用。
chatbot界面使用 Gradio Web UI 部署 ChatGLM3-6B(后台日志)
后台日志

使用 Streamlit WebUI 启动模型(Composite Demo)

建议将 ChatGLM3 的依赖包都安装在此隔离环境中:
使用 Streamlit Web UI 部署 ChatGLM3-6B
使用 Streamlit Web UI 部署 ChatGLM3-6B(对话 + 工具模式 + 代码解释器)
使用 Streamlit Web UI 部署 ChatGLM3-6B(对话 + 工具模式 + 代码解释器)
使用 Streamlit Web UI 部署 ChatGLM3-6B(对话)
使用 Streamlit Web UI 部署 ChatGLM3-6B(对话)
使用 Streamlit Web UI 部署 ChatGLM3-6B(后台日志)
在这里插入图片描述

局限性

由于 ChatGLM-6B 的小规模,其能力仍然有许多局限性。以下是我们目前发现的一些问题:

  • 模型容量较小:6B 的小容量,决定了其相对较弱的模型记忆和语言能力。在面对许多事实性知识任务时,ChatGLM-6B 可能会生成不正确的信息;它也不擅长逻辑类问题(如数学、编程)的解答。
  • 产生有害说明或有偏见的内容:ChatGLM-6B 只是一个初步与人类意图对齐的语言模型,可能会生成有害、有偏见的内容。
  • 英文能力不足:ChatGLM-6B 训练时使用的指示/回答大部分都是中文的,仅有极小一部分英文内容。因此,如果输入英文指示,回复的质量远不如中文,甚至与中文指示下的内容矛盾,并且出现中英夹杂的情况。
  • 易被误导,对话能力较弱:ChatGLM-6B 对话能力还比较弱,而且 “自我认知” 存在问题,并很容易被误导并产生错误的言论。例如当前版本的模型在被误导的情况下,会在自我认知上发生偏差。

LangChain 与 ChatGLM 生态集成

使用 LangChain 调用 ZHIPU AI 模型服务(API KEY)

https://python.langchain.com/docs/integrations/chat/zhipuai
ZHIPU AI 大模型服务

私有化部署 ChatGLM2-6B API Server(LLM Mode)

https://python.langchain.com/docs/integrations/llms/chatglm
私有化部署

ChatGLM模型优化方法

使用 LangChain LLMChain 调用 ChatGLM2-6B 模型服务

gradio就是在ConversationChain外面套上一层Web UI,并采用history这种记录方式记录对话内容。LangChain调用ChatGLM模型服务的pipeline,形成如下图的基础框架,并基于此框架,内嵌向量知识库库以及查询功能,从而形成各种垂类聊天类型的机器人。
使用 LangChain LLMChain 调用 ChatGLM2-6B 模型服务

使用 LangChain ConversationChain 调用 ChatGLM2-6B 模型服务

使用 LangChain ConversationChain 调用 ChatGLM2-6B 模型服务

LLMChain 实现单轮对话

from langchain_community.llms import ChatGLM
from langchain.chains import LLMChain
from langchain.prompts import PromptTemplate
# ChatGLM 私有化部署的 Endpoint URL
endpoint_url = "http://127.0.0.1:8001"

实例化 ChatGLM 大模型

llm = ChatGLM(endpoint_url=endpoint_url,max_token=80000,history=[["你是一个专业的销售顾问", "欢迎问我任何问题。"]],top_p=0.9,model_kwargs={"sample_model_args": False},
)

提示词模板

template = """{question}"""
prompt = PromptTemplate(template=template, input_variables=["question"])
llm_chain = LLMChain(prompt=prompt, llm=llm)
llm_chain.run("你们衣服怎么卖?")

示例

带记忆功能的聊天对话

from langchain.chains import ConversationChain
from langchain.memory import ConversationBufferMemory
conversation = ConversationChain(llm=llm, verbose=True, memory=ConversationBufferMemory()
)

示例2
示例3

## 使用 Gradio WebUI 启动聊天机器人

示例4

http://www.lryc.cn/news/491393.html

相关文章:

  • 利用adb工具安装卸载安卓平板(手机)软件
  • 基于docker进行任意项目灵活发布
  • Datatables:监听行内文本框,进行行内数据修改;计算行总和
  • 对于某些原型或UI软件的个人看法(2024/11)
  • 嵌入式硬件实战提升篇(二)PCB高速板设计 FPGA核心板带DDR3 PCB设计DDR全面解析
  • 亚信安全携手飞书“走近先进” 与保隆科技探索制造业数字化转型
  • 【C++篇】排队的艺术:用生活场景讲解优先级队列的实现
  • VTK的基本概念(一)
  • error LNK2001: 无法解析的外部符号 memcpy strcmp strlen
  • 打造智能扩容新纪元:Kubernetes Custom Metrics深度解析
  • 【K8s】专题十五(4):Kubernetes 网络之 Calico 插件安装、切换网络模式、卸载
  • Unity类银河战士恶魔城学习总结(P141 Finalising ToolTip优化UI显示)
  • c++(入门)
  • 【优选算法】前缀和
  • Spring Bean 的生命周期详解
  • MySQL【知识改变命运】12
  • shell编程(完整版)
  • 数字逻辑(一)——导论
  • 量化交易系统开发-实时行情自动化交易-4.4.做市策略
  • 《线性代数的本质》
  • Gbase8s 允许内置用户创建用户以及创建只读权限用户以及利用角色管理普通用户权限
  • 24/11/25 视觉笔记 深度传感器和手势识别
  • 迄今为止的排序算法总结
  • HTML和CSS 表单、表格练习
  • H5流媒体播放器EasyPlayer.js网页直播/点播播放器如果H.265视频在播放器上播放不流畅,可以考虑的解决方案
  • Http 转 https 中 Nginx 的详细配置过程
  • 【测试工具JMeter篇】JMeter性能测试入门级教程(二)出炉,测试君请各位收藏了!!!
  • Otter 安装流程
  • 一文学会Golang里拼接字符串的6种方式(性能对比)
  • 【笔记】Linux下编译Python3.10.15为动态库同时正确处理OpenSSL3依赖