开源大型语言模型与LangChain的结合应用

随着开源大型语言模型(LLMs)的不断发布,对于特定于聊天机器人(ChatBot)的用例需求也在增长。HuggingFace作为开源LLMs的主要提供者,其模型参数对公众开放,任何人都可以用于推理。另一方面,LangChain结合HuggingFace是一个强大的大型语言模型框架,它帮助将AI无缝集成到应用中。通过结合HuggingFace和LangChain,可以轻松整合特定领域的ChatBots。

LangChain与Hugging Face的集成通过结合Hugging Face的预训练模型和LangChain的语言工具包增强了自然语言处理能力。这种伙伴关系简化了工作流程,使得模型部署和高级文本分析更加高效。

学习目标包括理解开源大型语言模型的需求,以及HuggingFace是如何成为最重要的提供者之一。探索三种方法来实现大型语言模型,借助Langchain框架和HuggingFace开源模型。学习如何使用T4 GPU免费实现HuggingFace任务管道与Langchain。学习如何在不下载模型参数的情况下,使用HuggingFace Hub的Inference API在CPU上实现模型。

本文作为数据科学博客马拉松的一部分发布。

  • HuggingFace与开源大型语言模型
  • 什么是Langchain?
  • 安装
  • 方法1:HuggingFace管道
  • 方法2:使用Inference API的HuggingFace Hub
  • 方法3:LlamaCPP
  • 参考
  • 常见问题

HuggingFace是开发AI和深度学习模型的基石。HuggingFace的Transformers库中丰富的开源模型使其成为许多实践者的首选。开源大型语言模型,如LLaMA、Falcon、Mistral等,其特点是公开可访问的学习参数,与此相反的是封闭源大型语言模型,它们拥有私有的学习参数。使用这些模型可能需要与API端点交互,例如GPT-4和GPT-3.5。

Hugging Face是一个顶级平台,提供预训练模型和库以理解自然语言。它以其Transformers库而闻名,该库包括各种预训练模型,可以调整用于不同的NLP任务。

这就是HuggingFace的便利之处。HuggingFace提供了HuggingFace Hub,一个拥有超过120k模型、20k数据集和50k空间(演示AI应用)的平台。

随着AI中大型语言模型的进步,对信息丰富的ChatBots的需求也在增加。假设创立了一家新的游戏公司,拥有许多用户手册和快捷文档。需要为这家公司的数据集成一个像ChatGPT这样的ChatBot。如何实现这一点?

这就是Langchain的用武之地。Langchain是一个强大的大型语言模型框架,它整合了各种组件,如嵌入、向量数据库、LLMs等。使用这些组件,可以向大型语言模型提供外部文档,并无缝构建AI应用。

要开始使用HuggingFace和Langchain的不同方法,需要安装所需的库。要使用Langchain组件,可以直接安装Langchain和Huggingface,如下命令:

!pip install langchain

要使用HuggingFace模型和嵌入,需要安装transformers和sentence-transformers。在Google Colab的最新更新中,不需要安装transformers。

!pip install transformers !pip install sentence-transformers !pip install bitsandbytes accelerate

要在边缘运行GenAI应用,Georgi Gerganov开发了LLamaCPP。LLamaCPP在高效的C/C++中实现了Meta的LLaMa架构。

!pip install llama-cpp-python

管道是使用模型进行推理的绝佳且简单的方式。HuggingFace提供了一个管道包装类,可以轻松集成文本生成和摘要等任务,仅需一行代码。这行代码包含通过实例化模型、分词器和任务名称来调用管道属性。

必须加载大型语言模型和相关的分词器来实现这一点。由于不是每个人都可以访问A100或V100 GPU,必须继续使用免费的T4 GPU。要使用管道运行大型语言模型进行推理,将使用orca-mini 3 billion参数LLM与量化配置以减小模型大小。

from langchain.llms.huggingface_pipeline import HuggingFacePipeline import torch from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline, from transformers import BitsAndBytesConfig nf4_config = BitsAndBytesConfig( load_in_4bit=True, bnb_4bit_quant_type="nf4", bnb_4bit_use_double_quant=True, bnb_4bit_compute_dtype=torch.bfloat16 ) model_id = "pankajmathur/orca_mini_3b" tokenizer = AutoTokenizer.from_pretrained(model_id) model = AutoModelForCausalLM.from_pretrained( model_id, quantization_config=nf4_config ) pipe = pipeline("text-generation", model=model, tokenizer=tokenizer, max_new_tokens=512 )

成功运行管道后,HuggingFacePipeline包装类有助于集成Transformers模型和Huggingface与Langchain。下面的代码片段定义了orca模型的提示模板。

hf = HuggingFacePipeline(pipeline=pipe) query = "谁是沙鲁克·汗?" prompt = f""" ### 系统: 是一个非常听话的AI助手。 尽所能提供帮助。请务必真实并给出直接的答案 ### 用户: {query} ### 响应: """ response = hf.predict(prompt) print(response)

在方法一中,可能已经注意到,在使用管道时,模型和标记化下载并加载权重。如果模型的长度非常大,这种方法可能会耗时。因此,HuggingFace Hub Inference API就派上用场了。要将HuggingFace Hub与Langchain集成,需要一个HuggingFace访问令牌。

获取HuggingFace访问令牌的步骤:

  1. 登录HuggingFace.co。
  2. 点击右上角的头像,然后选择“设置”。
  3. 在左侧边栏中,导航到“访问令牌”。
  4. 生成一个新的访问令牌,并分配“写入”角色。
from langchain.llms import HuggingFaceHub import os from getpass import getpass os.environ["HUGGINGFACEHUB_API_TOKEN"] = getpass("HF Token:")

一旦获得了访问令牌,使用HuggingFaceHub将Transformers模型与Langchain集成。在这种情况下,使用Zephyr,一个在Mistral 7B上微调的模型。

llm = HuggingFaceHub( repo_id="huggingfaceh4/zephyr-7b-alpha", model_kwargs={"temperature": 0.5, "max_length": 64,"max_new_tokens":512} ) query = "印度和阿联酋的首都是哪里?" prompt = f""" <|system|> 是一个非常听话的AI助手。 请务必真实并给出直接的答案 <|user|> {query} <|assistant|> """ response = llm.predict(prompt) print(response)

由于使用的是免费的Inference API,使用13B、34B和70B的大型语言模型有一些限制。

LLamaCPP允许使用以.gguf文件格式打包的模型,在仅CPU和混合CPU/GPU环境中高效运行。要使用LlamaCPP,特别需要模型路径以.gguf结尾的模型。可以从这里下载模型:

zephyr-7b-beta.Q4.gguf

from langchain.llms import LlamaCpp from google.colab import drive drive.mount('/content/drive') llm_cpp = LlamaCpp( streaming = True, model_path="/content/drive/MyDrive/LLM_Model/zephyr-7b-beta.Q4_K_M.gguf", n_gpu_layers=2, n_batch=512, temperature=0.75, top_p=1, verbose=True, n_ctx=4096 ) query = "埃隆·马斯克是谁?" prompt = f""" <|system|> 是一个非常听话的AI助手。 请务必真实并给出直接的答案 <|user|> {query} <|assistant|> """ response = llm_cpp.predict(prompt) print(response)
  • 使用HuggingFace的Transformers管道,可以轻松选择任何顶级的大型语言模型,如Llama2 70B、Falcon 180B或Mistral 7B。推理脚本不到五行代码。
  • 并非所有人都能负担得起使用A100或V100 GPU,HuggingFace提供免费的Inference API(访问令牌)来实现HuggingFace Hub中的一些模型。在这种情况下,最受欢迎的模型是7B模型。
  • 当需要在CPU上运行大型语言模型时,使用LLamaCPP。目前,LLamaCPP仅支持.gguf模型文件。
  • 建议遵循提示模板,在用户查询上运行predict()方法。
Q1. LangChain和Hugging Face之间有什么区别?
LangChain专注于基于区块链的去中心化AI模型,强调透明度和数据所有权。相比之下,Hugging Face提供了一个分享和使用预训练AI模型的平台,专注于NLP应用。
Q2. LangChain是否比Hugging Face更好?
Hugging Face用于寻找预训练模型。LangChain用于使用这些模型构建应用。它们经常一起工作。将Hugging Face视为模型商店,LangChain视为构建器。
Q3. LangChain用于什么?
LangChain用于在区块链上部署去中心化AI模型,确保透明度和用户对数据及算法的控制。
Q4. Hugging Face到底做什么?
Hugging Face提供了一个分享、发现和使用预训练AI模型的平台,主要关注自然语言处理(NLP)任务,如文本生成、翻译和情感分析。
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485