chatglm4部署以及集成langchain

1.魔塔社区下载glm4

https://modelscope.cn/models/ZhipuAI/glm-4-9b-chat

2.jupyter下载,自己修改下载模型位置

在这里插入图片描述
在这里插入图片描述

3.环境安装:

本机已经安装了conda,使用conda虚拟环境隔离,就不重复演示了
新项目新激活一个环境:conda create --name ckglm4
切换环境:

conda activate ckglm4

安装环境:

安装依赖:
accelerate==0.34.2
aiofiles==23.2.1
aiohappyeyeballs==2.4.0
aiohttp==3.10.5
aiosignal==1.3.1
annotated-types==0.7.0
anyio==4.4.0
attrs==24.2.0
bitsandbytes==0.43.3
blinker==1.8.2
certifi==2024.8.30
charset-normalizer==3.3.2
click==8.1.7
contourpy==1.3.0
cycler==0.12.1
dataclasses-json==0.6.7
distro==1.9.0
einops==0.8.0
fastapi==0.112.4
ffmpy==0.4.0
filelock==3.15.4
Flask==3.0.3
fonttools==4.53.1
frozenlist==1.4.1
fsspec==2024.9.0
gradio==4.43.0
gradio_client==1.3.0
greenlet==3.0.3
h11==0.14.0
httpcore==1.0.5
httpx==0.27.2
huggingface-hub==0.24.6
idna==3.8
importlib_resources==6.4.4
itsdangerous==2.2.0
Jinja2==3.1.4
jiter==0.5.0
joblib==1.4.2
jsonpatch==1.33
jsonpointer==3.0.0
kiwisolver==1.4.7
langchain==0.2.16
langchain-community==0.2.16
langchain-core==0.2.38
langchain-text-splitters==0.2.4
langsmith==0.1.116
markdown-it-py==3.0.0
MarkupSafe==2.1.5
marshmallow==3.22.0
matplotlib==3.9.2
mdurl==0.1.2
mpmath==1.3.0
multidict==6.0.5
mypy-extensions==1.0.0
networkx==3.3
numpy==1.26.4
nvidia-cublas-cu12==12.1.3.1
nvidia-cuda-cupti-cu12==12.1.105
nvidia-cuda-nvrtc-cu12==12.1.105
nvidia-cuda-runtime-cu12==12.1.105
nvidia-cudnn-cu12==9.1.0.70
nvidia-cufft-cu12==11.0.2.54
nvidia-curand-cu12==10.3.2.106
nvidia-cusolver-cu12==11.4.5.107
nvidia-cusparse-cu12==12.1.0.106
nvidia-nccl-cu12==2.20.5
nvidia-nvjitlink-cu12==12.6.68
nvidia-nvtx-cu12==12.1.105
openai==1.44.0
orjson==3.10.7
packaging==24.1
pandas==2.2.2
pillow==10.4.0
psutil==6.0.0
pydantic==2.9.0
pydantic_core==2.23.2
pydub==0.25.1
Pygments==2.18.0
pylzma==0.5.0
pyparsing==3.1.4
python-dateutil==2.9.0.post0
python-multipart==0.0.9
pytz==2024.1
PyYAML==6.0.2
regex==2024.7.24
requests==2.32.3
rich==13.8.0
ruff==0.6.4
safetensors==0.4.5
scikit-learn==1.5.1
scipy==1.14.1
semantic-version==2.10.0
sentence-transformers==3.0.1
sentencepiece==0.2.0
setuptools==72.1.0
shellingham==1.5.4
six==1.16.0
sniffio==1.3.1
SQLAlchemy==2.0.34
sse-starlette==2.1.3
starlette==0.38.4
sympy==1.13.2
tenacity==8.5.0
threadpoolctl==3.5.0
tiktoken==0.7.0
timm==1.0.9
tokenizers==0.19.1
tomlkit==0.12.0
torch==2.4.1
torchvision==0.19.1
tqdm==4.66.5
transformers==4.44.0
triton==3.0.0
typer==0.12.5
typing-inspect==0.9.0
typing_extensions==4.12.2
tzdata==2024.1
urllib3==2.2.2
uvicorn==0.30.6
websockets==12.0
Werkzeug==3.0.4
wheel==0.43.0
yarl==1.11.0

4.python代码

from flask import Flask, request, jsonify
from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline
import torch
from langchain.llms import HuggingFacePipeline
from langchain.cache import InMemoryCache
from langchain.globals import set_llm_cache

app = Flask(__name__)

# 设置 LangChain 的缓存
set_llm_cache(InMemoryCache())

# 加载ChatGLM模型和Tokenizer
model_name = "/home/ck/llm/ZhipuAI/glm-4-9b-chat/"  # 替换为本地或远程模型的地址
device = torch.device("cuda:1" if torch.cuda.is_available() else "cpu")
tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(model_name, trust_remote_code=True, torch_dtype=torch.float16).to(device)
# 自定义的生成函数,带有生成参数
def custom_generate(text, max_length=1000, do_sample=False, temperature=0, top_p=0.95, top_k=50):
    inputs = tokenizer(text, return_tensors="pt").to(device)
    output = model.generate(
        inputs.input_ids, 
        max_length=max_length, 
        do_sample=do_sample, 
        temperature=temperature, 
        top_p=top_p, 
        top_k=top_k
    )
    # 将生成的token解码为文本
    return tokenizer.decode(output[0], skip_special_tokens=True)

# 创建一个基于 HuggingFace 的自定义 Pipeline
class CustomPipeline:
    def __init__(self, model, tokenizer):
        self.model = model
        self.tokenizer = tokenizer
        self.task = "text-generation"

    def __call__(self, text):
        generated_text = custom_generate(text)
        return [{"generated_text": generated_text}]

# 将自定义 Pipeline 传入 LangChain
generator = CustomPipeline(model=model, tokenizer=tokenizer)

# 将模型集成到 LangChain 中
llm = HuggingFacePipeline(pipeline=generator)
# # 将模型转换为 HuggingFacePipeline,用于LangChain集成
# generator = pipeline("text-generation", model=model, tokenizer=tokenizer, device=device.index)

# # 将模型集成到LangChain
# llm = HuggingFacePipeline(pipeline=generator)

# 定义生成回答的函数
def generate_answer(question):
    question = question.strip()  # 确保问题输入的一致性
    # 使用 LangChain 的 LLM 对象生成回答
    # answer = llm(question)
    predict = llm.predict(question)
    return predict

# Flask API 路由
@app.route("/ask", methods=["POST"])
def ask_question():
    # 获取请求中的问题
    data = request.get_json()
    question = data.get("question", "")
    
    if not question:
        return jsonify({"error": "No question provided"}), 400
    
    # 调用生成回答的函数
    answer = generate_answer(question)
    
    # 返回生成的回答
    return jsonify({"question": question, "answer": answer})

# 启动 Flask 应用
if __name__ == "__main__":
    app.run(host="0.0.0.0", port=5000)

5.启动后测试:

在这里插入图片描述

6.过程中遇到的报错:

File “/home/ck/anaconda2/envs/ckglm4/lib/python3.12/site-packages/langchain_core/language_models/llms.py”, line 960, in generate
new_results = self._generate_helper(
^^^^^^^^^^^^^^^^^^^^^^
File “/home/ck/anaconda2/envs/ckglm4/lib/python3.12/site-packages/langchain_core/language_models/llms.py”, line 787, in _generate_helper
raise e
File “/home/ck/anaconda2/envs/ckglm4/lib/python3.12/site-packages/langchain_core/language_models/llms.py”, line 774, in _generate_helper
self._generate(
File “/home/ck/anaconda2/envs/ckglm4/lib/python3.12/site-packages/langchain_community/llms/huggingface_pipeline.py”, line 285, in _generate
if self.pipeline.task == “text-generation”:
^^^^^^^^^^^^^^^^^^
AttributeError: ‘CustomPipeline’ object has no attribute ‘task’

代码在调用 HuggingFacePipeline 的 _generate 方法时遇到了 AttributeError,其中 self.pipeline 的对象没有 task 属性。
这通常意味着你传递给 HuggingFacePipeline 的自定义 pipeline 对象没有正确设置 task 属性。HuggingFace 的 pipeline 对象通常应该有 task 属性来标识它的类型,例如 “text-generation”, “translation”, “summarization” 等。

这是我一开始初始化自有模型的时候没有添加task属性

一开始的代码

# 创建一个基于 HuggingFace 的自定义 Pipeline
class CustomPipeline:
    def __init__(self, model, tokenizer):
        self.model = model
        self.tokenizer = tokenizer

    def __call__(self, text):
        return custom_generate(text)

# 将自定义 Pipeline 传入 LangChain
generator = CustomPipeline(model=model, tokenizer=tokenizer)

修改后的代码:

# 创建一个基于 HuggingFace 的自定义 Pipeline
class CustomPipeline:
    def __init__(self, model, tokenizer):
        self.model = model
        self.tokenizer = tokenizer
        self.task = "text-generation"  # 显式添加 task 属性

    def __call__(self, text):
        return [{"generated_text": custom_generate(text)}]  # 返回格式要与 Hugging Face 的 pipeline 一致

# 将自定义 Pipeline 传入 LangChain
generator = CustomPipeline(model=model, tokenizer=tokenizer)

# 将模型集成到 LangChain 中
llm = HuggingFacePipeline(pipeline=generator)

# 测试生成
response = llm.generate("Tell me something interesting about AI.")
print(response)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/873731.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

vue3 ts语法在index.ts中vue有红色波浪线

vue.js - Vue 3 with Typescript Could Not Find A Declaration File - Stack Overflow 只要在 vue文件中 写上就好 <script setup lang"ts">

IIS 反向代理模块: URL Rewrite 和 Application Request Routing (ARR)

需要设置iis反向代理的场景其实挺多的。例如websocket、Server Sent Events(SSE) 都需要反向代理。 对于需要临时放公网访问的应用&#xff0c;直接运行127.0.0.1的开发环境&#xff0c;然后通过反向代理访问127.0.0.1就可以了&#xff0c;省去麻烦的iis设置。 IIS 实现反向代…

Java | Leetcode Java题解之第393题UTF-8编码验证

题目&#xff1a; 题解&#xff1a; class Solution {static final int MASK1 1 << 7;static final int MASK2 (1 << 7) (1 << 6);public boolean validUtf8(int[] data) {int m data.length;int index 0;while (index < m) {int num data[index];…

科研绘图系列:R语言差异基因四分图(Quad plot)

文章目录 介绍加载R包导入数据数据预处理画图参考介绍 四分图(Quad plot)是一种数据可视化技术,通常用于展示四个变量之间的关系。它由四个子图组成,每个子图都显示两个变量之间的关系。四分图的布局通常是2x2的网格,每个格子代表一个变量对的散点图。 在四分图中,通常…

安卓framework美化手势导航侧滑返回UI

文章目录 手势导航的侧滑返回效果图原生效果如下:要实现的功能,: 实现代码1. 初始化代码2. 修改绘制的代码,进行箭头与退出UI的显示3. 拖动的时候手指上下移动时,箭头ui跟着移动 以下是一些其他可以美化安卓右滑手势拖动 UI 的方法&#xff1a;视觉效果方面形状和布局方面 安卓…

C++解决:求排列数

描述 输入两个整数m,n&#xff0c;求m个数字中选n个数的排列数。&#xff08;1<n<m<50&#xff09; 输入描述 两个正整数m和n。 输出描述 一个正整数表示排列数。 用例输入 1 6 5 用例输出 1 720 AC code #include<bits/stdc.h> using namespace s…

孩子用的台灯哪个牌子好?挑选护眼台灯先了解护眼台灯十大排名

孩子们的日常生活中有高达80%的时间是在阅读、做作业或面对电脑屏幕中度过的&#xff0c;因此对良好照明的需求显得尤为严格和精确。一些家长可能认为&#xff0c;只要孩子使用的是纸质材料&#xff0c;不像电子产品那样对眼睛有害&#xff0c;使用普通的台灯照明就足够了&…

Qt_概述

目录 1、图形用户界面 2、客户端开发 3、什么是界面 4、Qt的发展史 5、Qt支持的平台 6、Qt的版本 7、Qt的优点 8、Qt的应用场景 小结 前言&#xff1a; Qt是一个应用程序开发框架&#xff0c;他具有跨平台性质&#xff0c;主要使用C语言进行编程&#xff0c;Qt的开发…

css之雪碧图(精灵图)

听到雪碧图是不是跟我一样&#xff0c;啥&#xff1f;雪碧图&#xff1f;不知所以。 如果一张大图由许多小图构成&#xff0c;那么每张小图都需要进行网络请求&#xff0c;这样一来就会有很多请求&#xff0c;为了减少网络请求&#xff0c;雪碧图就出现了。 雪碧图&#xff0…

MapBox Android版开发 4 国际化功能v11

MapBox Android版开发 4 国际化功能v11 前言遇到的问题国际化功能原文给出的方案(V10版)migrate-to-v11适用于V11版的代码 示例MapStyle类运行效果图 前言 在前文MapBox地图样式v11中&#xff0c;使用Style的localizeLabels方法本地化地图语言。但Mapbox Standard样式和Mapbox…

3DMax基础- 样条线和点,线,面,边界操作

目录 一、样条线 二、多边形编辑​​​​​​​ 三. 点操作 三、线操作 四、面操作 五. 边界 一、样条线 创建样条线&#xff1a; 在 “创建” 面板中选择 “图形”&#xff0c;然后可以看到各种样条线工具&#xff0c;如线、矩形、圆、椭圆等。以 “线” 工具为例&#…

EPIC超级“喜加N”!AOC U32G4ZMN助你畅玩缤纷九月

废土探险、绿茵征战、狙击猎杀&#xff0c;AOC U32G4ZMN带你玩转九月&#xff01; Epic游戏商城近日开启“喜加N”游戏盛宴&#xff0c;上周公布的免费游戏&#xff1a;《辐射经典合集》与《外卡橄榄球》&#xff0c;领取时间截止至9月5日&#xff0c;还没领取的玩家&#xff…

Kafka【九】如何实现数据的幂等性操作

为了解决Kafka传输数据时&#xff0c;所产生的数据重复和乱序问题&#xff0c;Kafka引入了幂等性操作&#xff0c;所谓的幂等性&#xff0c;就是Producer同样的一条数据&#xff0c;无论向Kafka发送多少次&#xff0c;kafka都只会存储一条。注意&#xff0c;这里的同样的一条数…

计算机网络:http协议

计算机网络&#xff1a;http协议 一、本文内容与前置知识点1. 本文内容2. 前置知识点 二、HTTP协议工作简介1. 特点2. 传输时间分析3. http报文结构 三、HTTP版本迭代1. HTTP1.0和HTTP1.1主要区别2. HTTP1.1和HTTP2主要区别3. HTTPS与HTTP的主要区别 四、参考文献 一、本文内容…

BERT 论文逐段精读【论文精读】

BERT: 近 3 年 NLP 最火 CV: 大数据集上的训练好的 NN 模型&#xff0c;提升 CV 任务的性能 —— ImageNet 的 CNN 模型 NLP: BERT 简化了 NLP 任务的训练&#xff0c;提升了 NLP 任务的性能 BERT 如何站在巨人的肩膀上的&#xff1f;使用了哪些 NLP 已有的技术和思想&#xff…

网络层协议-ARP协议

网络层协议-ARP协议 1&#xff09;概述 ARP&#xff1a;地址解析协议&#xff0c;作用&#xff1a;根据IP地址查询MAC地址 数据包发送前需要进行封包&#xff0c;在数据链路层需要封装源mac地址是自己的mac&#xff0c;目的mac地址是别人&#xff0c;但是不知道别人的mac地址…

基于VUE的校园二手物品交易管理系统的设计与实现 (含源码+sql+视频导入教程)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 基于VUE的校园二手物品交易管理系统8拥有两种角色 管理员&#xff1a;闲置物品管理、订单管理、用户管理 用户&#xff1a;登录注册、购物车、发布闲置物品、评论、发货、收货地址管理等…

AI在医学领域:MIL回归用于前列腺癌复发预测

2024年&#xff0c;全球男性新癌症病例预计为1029080例&#xff0c;其中前列腺癌病例预计为29%。前列腺癌是男性中第二常见的癌症类型&#xff0c;仅次于肺癌。它主要影响老年男性&#xff0c;且发病率随年龄增长而增加。前列腺癌的主要治疗方法是前列腺切除术&#xff0c;但术…

探索手势能够识别在训练数据中未观察到的情绪

介绍 论文地址&#xff1a;https://arxiv.org/pdf/2202.10571.pdf 基于人工智能的情感识别研究领域是各个领域不可或缺的&#xff0c;如机器人和情感计算&#xff0c;并在语音中使用面部表情和手势来实现人们提出了各种方法来识别一个人的情绪。然而&#xff0c;这些基于机器学…

C语言 | Leetcode C语言题解之第391题完美矩形

题目&#xff1a; 题解&#xff1a; /* 参照官方答案题解&#xff1a; 1.小矩形面积之和等于大矩形区域面积 2.矩形区域内部顶点出现次数只能是2次或4次&#xff08;边界四个顶点只能出现一次&#xff09; */ typedef struct {int x;int y; } Coordinate;typedef struct {Coor…