首页 > 其他分享 >从零学习大模型——使用GLM-4-9B-Chat + BGE-M3 + langchain + chroma建立的本地RAG应用(二)——将GLM-4-9B-Chat接入langchain

从零学习大模型——使用GLM-4-9B-Chat + BGE-M3 + langchain + chroma建立的本地RAG应用(二)——将GLM-4-9B-Chat接入langchain

时间:2024-07-10 14:18:50浏览次数:22  
标签:GLM self 9B ids langchain LLM kwargs model gen

第一篇介绍了如何配置最基本的环境并下载了GLM-4-9B-Chat到本地,接下来我们试着将GLM-4-9B-Chat接入LangChain。

LangChain 是一个基于大型语言模型(LLM)开发应用程序的框架。

LangChain 简化了LLM应用程序生命周期的每个阶段:

LangChain提供了很多LLM的封装,内置了 OpenAI、LLAMA 等大模型的调用接口。具体方法可自行查阅,本教程中使用本地模型接入LangChain。

为了接入本地LLM,我们需要继承Langchain.llms.base.LLM 中的一个子类,重写其中的几个关键函数。

还是在上一篇所使用的 /root/autodl-tmp 目录,新建glm4LLM.py文件:

from langchain.llms.base import LLM
from typing import Any, List, Optional, Dict
from langchain.callbacks.manager import CallbackManagerForLLMRun
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch

class ChatGLM4_LLM(LLM):
    # 基于本地 ChatGLM4 自定义 LLM 类
    tokenizer: AutoTokenizer = None
    model: AutoModelForCausalLM = None
    gen_kwargs: dict = None
        
    def __init__(self, model_name_or_path: str, gen_kwargs: dict = None):
        super().__init__()
        print("正在从本地加载模型...")
        self.tokenizer = AutoTokenizer.from_pretrained(
            model_name_or_path, trust_remote_code=True
        )
        self.model = AutoModelForCausalLM.from_pretrained(
            model_name_or_path,
            torch_dtype=torch.bfloat16,
            trust_remote_code=True,
            device_map="auto"
        ).eval()
        print("完成本地模型的加载")
        
        if gen_kwargs is None:
            gen_kwargs = {"max_length": 2500, "do_sample": True, "top_k": 1}
        self.gen_kwargs = gen_kwargs
        
    def _call(self, prompt: str, stop: Optional[List[str]] = None,
              run_manager: Optional[CallbackManagerForLLMRun] = None,
              **kwargs: Any) -> str:
        messages = [{"role": "user", "content": prompt}]
        model_inputs = self.tokenizer.apply_chat_template(
            messages, tokenize=True, return_tensors="pt", return_dict=True, add_generation_prompt=True
        )
        
        # 将input_ids移动到与模型相同的设备
        device = next(self.model.parameters()).device
        model_inputs = {key: value.to(device) for key, value in model_inputs.items()}
        
        generated_ids = self.model.generate(**model_inputs, **self.gen_kwargs)
        generated_ids = [
            output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs['input_ids'], generated_ids)
        ]
        response = self.tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
        return response
    
    @property
    def _identifying_params(self) -> Dict[str, Any]:
        """返回用于识别LLM的字典,这对于缓存和跟踪目的至关重要。"""
        return {
            "model_name": "glm-4-9b-chat",
            "max_length": self.gen_kwargs.get("max_length"),
            "do_sample": self.gen_kwargs.get("do_sample"),
            "top_k": self.gen_kwargs.get("top_k"),
        }

    @property
    def _llm_type(self) -> str:
        return "glm-4-9b-chat"

然后就可以进行简单的测试了,新建一个python文件testLLM.py

from glm4LLM import ChatGLM4_LLM
gen_kwargs = {"max_length": 2500, "do_sample": True, "top_k": 1}
llm = ChatGLM4_LLM(model_name_or_path="/root/autodl-tmp/ZhipuAI/glm-4-9b-chat", gen_kwargs=gen_kwargs)
print(llm.invoke("你是谁"))

运行该文件,如果输出了回答代表已成功将llm接入LangChain

标签:GLM,self,9B,ids,langchain,LLM,kwargs,model,gen
From: https://www.cnblogs.com/tarorat/p/18293967

相关文章

  • 从零学习大模型——使用GLM-4-9B + BGE-M3 + langchain + chroma建立的本地RAG应用(一)
    本项目基于DataWhaleChina的self-llm教程与llm-universe及Langchain官方文档等资料开发,旨在实现全部本地化的RAG应用。本项目使用AutoDL的云服务器进行开发。在 AutoDL 平台中租一个3090等24G显存的显卡机器,如下图所示镜像选择 PyTorch-->2.1.0-->3.10(ubuntu22.04)-->12.......
  • 使用langchain与你自己的数据对话(三):检索(Retrieval)_langchain 数据收集
    今天我们来继续讲解deepleaning.AI的在线课程“LangChain:ChatwithYourData”的第四门课:检索(Retrieval)。Langchain在实现与外部数据对话的功能时需要经历下面的5个阶段,它们分别是:DocumentLoading->Splitting->Storage->Retrieval->Output,如下图所示:在上一篇博客......
  • 拆解LangChain的大模型记忆方案
    之前我们聊过如何使用LangChain给LLM(大模型)装上记忆,里面提到对话链ConversationChain和MessagesPlaceholder,可以简化安装记忆的流程。下文来拆解基于LangChain的大模型记忆方案。1.安装记忆的原理1.1.核心步骤给LLM安装记忆的核心步骤就3个:在对话之前调取之前的历史消息。......
  • 关于BGE-M3接入LangChain时遇到的问题与解决方法
    本文基于https://github.com/datawhalechina/self-llm/blob/master/GLM-4/02-GLM-4-9B-chat%20langchain%20%E6%8E%A5%E5%85%A5.md提供的教程。由于使用本地部署的大模型,在继承LangChain中的LLM类时需要重写几个函数。但是在具体测试的时候出现了以下的错误/root/miniconda3/lib......
  • 构建LangChain应用程序的示例代码:56、如何实现一个多智能体模拟,其中没有固定的发言顺
    多智能体分散式发言人选择示例展示了如何实现一个多智能体模拟,其中没有固定的发言顺序。智能体自行决定谁来发言,通过竞价机制实现。我们将在下面的示例中展示一场虚构的总统辩论来演示这一过程。导入LangChain相关模块fromtypingimportCallable,Listimporttena......
  • langchain学习之agent
    系列文章目录第一部分langchain入门以及prompt、解析器使用第二部分langchain学习之memory机制第三部分langchain学习之chain机制文章目录系列文章目录前言一、导入需要的库二、准备模型三、使用网上的工具四、代理写代码五、自定义写方法总结前言LangChain......
  • 【AI落地工程技术】-LangChain框架介绍及使用步骤
    目录一、特点二、原理三、应用场景四、未来发展趋势五、简单LangChain使用步骤 安装LangChain2.配置环境3.创建提示模板(PromptTemplates)4.构建链(Chains)5.运行链并处理结果6.优化和部署7.持续监控和评估示例代码整合六、复杂LangChain使用步骤(构建一个问......
  • 快速调用 GLM-4-9B-Chat 语言模型
    一、确认本机显卡配置二、下载大模型国内可以从魔搭社区下载,下载地址:https://modelscope.cn/models/ZhipuAI/glm-4-9b-chat/files  三、运行官方代码 importtorchfromtransformersimportAutoModelForCausalLM,AutoTokenizerdevice="cuda"tokenizer=Aut......
  • Java开发者LLM实战——使用LangChain4j构建本地RAG系统
    1、引言由于目前比较火的chatGPT是预训练模型,而训练一个大模型是需要较长时间(参数越多学习时间越长,保守估计一般是几个月,不差钱的可以多用点GPU缩短这个时间),这就导致了它所学习的知识不会是最新的,最新的chatGPT-4o只能基于2023年6月之前的数据进行回答,距离目前已经快一年的时间,如......
  • 吴恩达AI系列:教你如何用Langchain封装一本书
    教你快速上手AI应用——吴恩达AI系列教程人工智能风靡全球,它的应用已经渗透到我们生活的方方面面,从自动驾驶到智能家居,再到医疗辅助和量化交易等等。他们逐渐改变了我们的生活方式,然而,对于许多人来说,AI仍然是一个神秘且无法理解的领域。为了帮助更多的人理解并掌握A......