我們很高興官宣釋出 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
HuggingFaceEndpointEmbeddings
與 HuggingFaceEndpoint
對 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 模型在各模態資料上的應用及大規模模型的訓練推理。