首页 > 其他分享 >Hugging Face x LangChain: 全新 LangChain 合作伙伴包

Hugging Face x LangChain: 全新 LangChain 合作伙伴包

时间:2024-05-29 20:55:08浏览次数:13  
标签:LangChain langchain Face Hugging llm model

我们很高兴官宣发布 langchain_huggingface ,这是一个由 Hugging Face 和 LangChain 共同维护的 LangChain 合作伙伴包。这个新的 Python 包旨在将 Hugging Face 最新功能引入 LangChain 并保持同步。

源自社区,服务社区

目前,LangChain 中所有与 Hugging Face 相关的类都是由社区贡献的。虽然我们以此为基础蓬勃发展,但随着时间的推移,其中一些类在设计时由于缺乏来自 Hugging Face 的内部视角而在后期被废弃。

通过 Langchain 合作伙伴包这个方式,我们的目标是缩短将 Hugging Face 生态系统中的新功能带给 LangChain 用户所需的时间。

langchain-huggingface 与 LangChain 无缝集成,为在 LangChain 生态系统中使用 Hugging Face 模型提供了一种可用且高效的方法。这种伙伴关系不仅仅涉及到技术贡献,还展示了双方对维护和不断改进这一集成的共同承诺。

起步

langchain-huggingface 的起步非常简单。以下是安装该 软件包 的方法:

pip install langchain-huggingface

现在,包已经安装完毕,我们来看看里面有什么吧!

LLM 文本生成

HuggingFacePipeline

transformers 中的 Pipeline 类是 Hugging Face 工具箱中最通用的工具。LangChain 的设计主要是面向 RAG 和 Agent 应用场景,因此,在 Langchain 中流水线被简化为下面几个以文本为中心的任务: 文本生成文生文摘要翻译 等。

用户可以使用 from_model_id 方法直接加载模型:

from langchain_huggingface import HuggingFacePipeline

llm = HuggingFacePipeline.from_model_id(
    model_id="microsoft/Phi-3-mini-4k-instruct",
    task="text-generation",
    pipeline_kwargs={
        "max_new_tokens": 100,
        "top_k": 50,
        "temperature": 0.1,
    },
)
llm.invoke("Hugging Face is")

也可以自定义流水线,再传给 HuggingFacePipeline 类:

from transformers import AutoModelForCausalLM, AutoTokenizer,pipeline

model_id = "microsoft/Phi-3-mini-4k-instruct"
tokenizer = AutoTokenizer.from_pretrained(model_id)

model = AutoModelForCausalLM.from_pretrained(
    model_id,
    load_in_4bit=True,
    #attn_implementation="flash_attention_2", # if you have an ampere GPU
)
pipe = pipeline("text-generation", model=model, tokenizer=tokenizer, max_new_tokens=100, top_k=50, temperature=0.1)
llm = HuggingFacePipeline(pipeline=pipe)
llm.invoke("Hugging Face is")

使用 HuggingFacePipeline 时,模型是加载至本机并在本机运行的,因此你可能会受到本机可用资源的限制。

HuggingFaceEndpoint

该类也有两种方法。你可以使用 repo_id 参数指定模型。也可以使用 endpoint_url 指定服务终端,这些终端使用 无服务器 API,这对于有 Hugging Face 专业帐户企业 hub 的用户大有好处。普通用户也可以通过在代码环境中设置自己的 HF 令牌从而在免费请求数配额内使用终端。

from langchain_huggingface import HuggingFaceEndpoint

llm = HuggingFaceEndpoint(
    repo_id="meta-llama/Meta-Llama-3-8B-Instruct",
    task="text-generation",
    max_new_tokens=100,
    do_sample=False,
)
llm.invoke("Hugging Face is")
llm = HuggingFaceEndpoint(
    endpoint_url="<endpoint_url>",
    task="text-generation",
    max_new_tokens=1024,
    do_sample=False,
)
llm.invoke("Hugging Face is")

该类在底层实现时使用了 InferenceClient,因此能够为已部署的 TGI 实例提供面向各种用例的无服务器 API。

ChatHuggingFace

每个模型都有最适合自己的特殊词元。如果没有将这些词元添加到提示中,将大大降低模型的表现。

为了把用户的消息转成 LLM 所需的提示,大多数 LLM 分词器中都提供了一个名为 chat_template 的成员属性。

要了解不同模型的 chat_template 的详细信息,可访问我创建的 space

ChatHuggingFace 类对 LLM 进行了包装,其接受用户消息作为输入,然后用 tokenizer.apply_chat_template 方法构造出正确的提示。

from langchain_huggingface import ChatHuggingFace, HuggingFaceEndpoint

llm = HuggingFaceEndpoint(
    endpoint_url="<endpoint_url>",
    task="text-generation",
    max_new_tokens=1024,
    do_sample=False,
)
llm_engine_hf = ChatHuggingFace(llm=llm)
llm_engine_hf.invoke("Hugging Face is")

上述代码等效于:

# with mistralai/Mistral-7B-Instruct-v0.2
llm.invoke("<s>[INST] Hugging Face is [/INST]")

# with meta-llama/Meta-Llama-3-8B-Instruct
llm.invoke("""<|begin_of_text|><|start_header_id|>user<|end_header_id|>Hugging Face is<|eot_id|><|start_header_id|>assistant<|end_header_id|>""")

嵌入

Hugging Face 里有很多非常强大的嵌入模型,你可直接把它们用于自己的流水线。

首先,选择你想要的模型。关于如何选择嵌入模型,一个很好的参考是 MTEB 排行榜

HuggingFaceEmbeddings

该类使用 sentence-transformers 来计算嵌入。其计算是在本机进行的,因此需要使用你自己的本机资源。

from langchain_huggingface.embeddings import HuggingFaceEmbeddings

model_name = "mixedbread-ai/mxbai-embed-large-v1"
hf_embeddings = HuggingFaceEmbeddings(
    model_name=model_name,
)
texts = ["Hello, world!", "How are you?"]
hf_embeddings.embed_documents(texts)

HuggingFaceEndpointEmbeddings

HuggingFaceEndpointEmbeddingsHuggingFaceEndpoint 对 LLM 所做的非常相似,其在实现上也是使用 InferenceClient 来计算嵌入。它可以与 hub 上的模型以及 TEI 实例一起使用,TEI 实例无论是本地部署还是在线部署都可以。

from langchain_huggingface.embeddings import HuggingFaceEndpointEmbeddings

hf_embeddings = HuggingFaceEndpointEmbeddings(
    model= "mixedbread-ai/mxbai-embed-large-v1",
    task="feature-extraction",
    huggingfacehub_api_token="<HF_TOKEN>",
)
texts = ["Hello, world!", "How are you?"]
hf_embeddings.embed_documents(texts)

总结

我们致力于让 langchain-huggingface 变得越来越好。我们将积极监控反馈和问题,并努力尽快解决它们。我们还将不断添加新的特性和功能,以拓展该软件包使其支持更广泛的社区应用。我们强烈推荐你尝试 langchain-huggingface 软件包并提出宝贵意见,有了你的支持,这个软件包的未来道路才会越走越宽。


英文原文: https://hf.co/blog/langchain

原文作者: Joffrey Thomas,Kirill Kondratenko,Erick Friis

译者: Matrix Yao (姚伟峰),英特尔深度学习工程师,工作方向为 transformer-family 模型在各模态数据上的应用及大规模模型的训练推理。

标签:LangChain,langchain,Face,Hugging,llm,model
From: https://www.cnblogs.com/huggingface/p/18221048

相关文章

  • 一起学习大模型 - langchain里的 PromptTemplate详细介绍
    文章目录前言一、安装LangChain二、基本用法1.导入库并定义模板2.填充模板三、进阶用法1.使用多个变量2.嵌套模板3.动态变量四、应用模板与大模型交互五、疑问解答1.举例说明2.更详细的例子总结前言上一篇文章我们讲了Prompt的概念和作用(大模型的交......
  • huggingface 下载与训练模型时会报 SSLERROR 连接 错误,解决办法如下
    我用方案一解决解决方案方案1:使用代理(需要梯子)在你的Python代码的开头加上如下代码importosos.environ['HTTP_PROXY']='http://proxy_ip_address:port'os.environ['HTTPS_PROXY']='http://proxy_ip_address:port'其中 http://proxy_ip_address:port 中的 ......
  • 人脸识别——Webface-OCC遮挡人脸识别算法解析
    1.概述自2019年被誉为人脸识别技术的元年,各地纷纷引入这项技术。然而,自2020年起,为了抵御冠状病毒(COVID-19)的全球传播,人们普遍开始佩戴口罩。众所周知,现有人脸识别模型在面对遮挡物(如口罩)时,其识别精度会显著下降。这一现象的主要原因在于,现有数据集往往没有充分考虑遮挡因......
  • IdentiFace——多模态人脸识别系统,可捕捉从情绪到性别的所有信息及其潜力
    1.概述面部识别系统的开发极大地推动了计算机视觉领域的发展。如今,人们正在积极开发多模态系统,将多种生物识别特征高效、有效地结合起来。本文介绍了一种名为IdentiFace的多模态人脸识别系统。该系统利用基于VGG-16架构的模型,将人脸识别与性别、脸型和情绪等重要生物......
  • Facebook海外户&海外三不限户是什么?
        在当今的互联网时代,社交媒体已经成为人们沟通交流不可或缺的一部分,而Facebook作为全球最大的社交网络平台之一,吸引着数以亿计的用户,也成为跨境电商们推广产品、扩大品牌影响力的必争之地。Facebook广告户的开户渠道也有很多中,市面上的FB国内三不限户,海外户,二不限户,......
  • 国内访问huggingface
    目录国内访问huggingface方法一国内访问huggingface方法一(1)在终端安装依赖:$pipinstall-Uhuggingface_hub(2)设置环境$exportHF_ENDPOINT=https://hf-mirror.com(3)写入~/.bashrc:$vim~/.bashrc英文状态下按"i"进入insert模式,在文件模型末尾插入(2)中的语句,按下Esc退......
  • 5分钟明白LangChain 的输出解析器和链
    本文介绍LangChain的输出解析器OutputParser的使用,和基于LangChain的LCEL构建链。1.输出解析器OutputParser1.1、为什么需要OutputParser常规的使用LangChain构建LLM应用的流程是:Prompt输入、调用LLM、LLM输出。有时候我们期望LLM给到的数据是格式化的数据,方便做后续的处......
  • AI菜鸟向前飞 — LangChain系列之十四 - Agent系列:从现象看机制(上篇)
    上一篇介绍了Agent与LangGraph的基础技能Tool的必知必会AI菜鸟向前飞—LangChain系列之十三-关于Tool的必知必会前面已经详细介绍了Prompt、RAG,终于来到Agent系列(别急后面还有LangGraph),大家可以先看下这张图:   看完我这系列就都懂了:)牛刀初试    由于本篇是入......
  • AI菜鸟向前飞 — LangChain系列之十二 - RAG(下篇):Index和Retriever
    AI菜鸟向前飞—LangChain系列之十-RAG(上篇)AI菜鸟向前飞—LangChain系列之十一-RAG(中篇)先分享个问题的解法#在使用Chroma实例化过程中,可能会出现如下报错AttributeError:typeobject'hnswlib.Index'hasnoattribute'file_handle_count'当使用代码遇到如上问......
  • USB EHCI(Enhanced Host Controller Interface)与OHCI(Open Host Controller Interface)
    USBEHCI(EnhancedHostControllerInterface)与OHCI(OpenHostControllerInterface)在多个方面存在显著的差异,以下是对这些差异的分点表示和归纳:1.**接口标准与版本**:-EHCI:这是Intel主导的USB2.0的接口标准。它专门描述了一个通用串行总线(USB)2.0版的主机控制器的寄存器......