LangChain簡(jiǎn)介
LangChain 是一個(gè)高層級(jí)的開源的框架,從字面意義理解,LangChain 可以被用來(lái)構(gòu)建 “語(yǔ)言處理任務(wù)的鏈條”,它可以讓AI開發(fā)人員把大型語(yǔ)言模型(LLM)的能力和外部數(shù)據(jù)結(jié)合起來(lái),從而去完成一些更復(fù)雜的任務(wù)。簡(jiǎn)單來(lái)說(shuō),LangChain 可以讓你的 LLM 在回答問(wèn)題時(shí)參考自定義的知識(shí)庫(kù),實(shí)現(xiàn)更精確的答案輸出。例如在以下這個(gè)Retrieval Augmented Generation (RAG)任務(wù),LangChain 可以根據(jù)問(wèn)題從已有的知識(shí)庫(kù)中進(jìn)行檢索,并將原始的檢索結(jié)果和問(wèn)題一并包裝為Prompt提示送入 LLM 中,以此獲得更加貼近問(wèn)題需求的答案。
LangChain 的核心能力主要由以下幾個(gè)模型所構(gòu)成。
提示(prompts): 包括提示管理、提示優(yōu)化和提示序列化。
大語(yǔ)言模型(LLM): 提供調(diào)用大預(yù)言模型生成文本的接口。
檢索(Retrieval): 該模塊用于構(gòu)建自定義的知識(shí)倉(cāng)庫(kù),從而基于LLM實(shí)現(xiàn)基于文檔數(shù)據(jù)檢測(cè)的文本生成任務(wù)(RAG),這也是LangChain最核心的能力之一。
代理(agents): LLM作為代理其他工具的代理,通過(guò)LLM來(lái)判斷可以調(diào)用什么工具(tool)來(lái)解決用戶提出的特殊需求。此處的工具需要被封裝成API接口,供LangChain調(diào)用,比如一個(gè)返回文本長(zhǎng)度的函數(shù),就可以是一個(gè)工具。
記憶(memory): 記憶主要用來(lái)存儲(chǔ)多輪對(duì)話中的歷史數(shù)據(jù),以便在后續(xù)的回答任務(wù)中可以對(duì)之前的交流記錄進(jìn)行參考。
基于以上這些模塊,LangChain可以被應(yīng)用于一些更復(fù)雜的任務(wù)中,例如:個(gè)人AI郵件助手,AI學(xué)習(xí)伙伴,AI數(shù)據(jù)分析,定制公司客服聊天機(jī)器人,社交媒體內(nèi)容創(chuàng)作助手等,做為L(zhǎng)angChain任務(wù)部署過(guò)程中的底座,LLM的推理任務(wù)勢(shì)必是重點(diǎn)可以被優(yōu)化的方向,那如何利用OpenVINO來(lái)加速LangChain的中LLM任務(wù)呢,這里為大家整理了以下兩個(gè)方法:
方法一:利用 Huggingface pipeline
調(diào)用 Optimum 后端
鑒于langchain.llm對(duì)象已經(jīng)支持了huggingface_pipeline來(lái)直接調(diào)用huggingface上的LLM
同時(shí)Huggingface的Optimum-intel組件可以將huggingface pipeline中的LLM推理任務(wù)通過(guò)OpenVINO進(jìn)行加速。因此我們的第一種方案就是利用Optimum-intel的pipeline來(lái)替換原本的Transformers pipeline,如下代碼所示:
from langchain.llms import HuggingFacePipeline from transformers import pipeline - from transformers import AutoModelForCausalLM + from optimum.intel.openvino import OVModelForCausalLM - model = AutoModelForCausalLM.from_pretrained(model_id) + ov_model = OVModelForCausalLM.from_pretrained(model_id) pipe = pipeline("text-generation", model=ov_model, tokenizer=tokenizer, max_new_tokens=128, pad_token_id=tokenizer.eos_token_id) hf = HuggingFacePipeline(pipeline=pipe) llm_chain = LLMChain(prompt=prompt, llm= hf) output=llm_chain.run(question)
紅色部分是標(biāo)準(zhǔn)Transformers (第3、5行)庫(kù)在 huggingface_pipeline 中的調(diào)用方式,綠色部分為Optimum-intel(第4、6行)的調(diào)用方式,可以看到我們僅僅只需修改兩行代碼就可以把 LangChain 原生的 LLM 任務(wù),通過(guò) OpenVIN 進(jìn)行加速,并且 Optimum-intel 提供的 API 也支持將 LLM 部署到不同的硬件平臺(tái),例如 Intel 的 CPU 及 GPU 系列產(chǎn)品。
方法二:構(gòu)建新的 OpenVINO pipeline 類
第一種方法固然簡(jiǎn)單,但如果遇到 Optimum-intel 中還未適配的 LLM,那依然無(wú)法奏效,因此這里的第二種辦法就是參考 HuggingFacePipeline 這個(gè)類對(duì)象,重新構(gòu)建一個(gè)基于 OpenVINO 的類對(duì)象,以此來(lái)支持自定義的模型類別。
倉(cāng)庫(kù)中的ov_pipeline.py就是用來(lái)構(gòu)建 OpenVINO pipeline 的代碼,為了方便演示,示例中底層還是調(diào)取 Optimum-intel 進(jìn)行推理,但不同與第一種方式,這里我們可以選擇脫離 Optimum-intel 的束縛,自行定義pipeline中的關(guān)鍵方法。這里有兩個(gè)關(guān)鍵方法:
1. from_model_id函數(shù)用于讀取本地或者遠(yuǎn)端的LLM以及其對(duì)應(yīng)的Tokenizer,并利用OpenVINO runtime 對(duì)其進(jìn)行編譯以及初始化。這里的函數(shù)名僅供參考,大家可以根據(jù)自己的習(xí)慣自行修改,此外在這個(gè)函數(shù)中,我們還可以對(duì)模型的配置進(jìn)行調(diào)整,比如指定不同的硬件平臺(tái)進(jìn)行部署,修改硬件端性能配置,例如供推理任務(wù)線程數(shù)(tread),并行任務(wù)數(shù)(stream)等,該函數(shù)預(yù)期返回一個(gè)可以直接運(yùn)行的模型對(duì)象。
from_model_id( cls, model_id: str, model_kwargs: Optional[dict] = None, **kwargs: Any, )->LLM
2. _call函數(shù)繼承自父類 LLM,用于根據(jù)提升生成本文,根據(jù)父類中的定義,他的輸入為 prompt文本,輸出同樣也是一個(gè)文本,因此在這個(gè)函數(shù)中就要求我們實(shí)現(xiàn)三個(gè)功能,Tokenizer分詞編碼->LLM推理->tokenizer 解碼,其實(shí)這也是LLM 問(wèn)答任務(wù)中必須經(jīng)歷的三個(gè)步驟,所以這里的實(shí)現(xiàn)方式大家可以根據(jù)自己LLM模型對(duì)于輸入輸出的要求自行定義。
def _call( self, prompt: str, stop: Optional[List[str]] = None, **kwargs: Any, )->str:
3. 這個(gè)倉(cāng)庫(kù)中提供了一個(gè)簡(jiǎn)單的 LangChain 示例sample.py,用于展示自定義 OpenVINO pipeline 在 LangChain 中的調(diào)用方式,核心部分可以參考以下代碼片段。
llm = OpenVINO_Pipeline.from_model_id( model_id=model_path, model_kwargs={"device":device, "temperature": 0, "trust_remote_code": True}, max_new_tokens=64 ) llm_chain=LLMChain(prompt=prompt,llm=llm)
總結(jié)
LangChain 做為當(dāng)前最受歡迎的自然語(yǔ)言系統(tǒng)框架之一,可以幫助開發(fā)者快速構(gòu)建起基于LLM的上層應(yīng)用方案。而 OpenVINO 2023.2 新版本的發(fā)布又進(jìn)一步提升了LLM的性能表現(xiàn),同時(shí)降低了部署門檻,兩者的結(jié)合可以幫助開發(fā)者更便捷地在英特爾平臺(tái)上部署基于大語(yǔ)言模型的服務(wù)系統(tǒng),豐富本地化 AI PC 應(yīng)用場(chǎng)景的落地。
審核編輯:湯梓紅
-
開源
+關(guān)注
關(guān)注
3文章
3125瀏覽量
42067 -
語(yǔ)言模型
+關(guān)注
關(guān)注
0文章
487瀏覽量
10201 -
OpenVINO
+關(guān)注
關(guān)注
0文章
73瀏覽量
139
原文標(biāo)題:如何在 LangChain 中調(diào)用 OpenVINO? 加速大語(yǔ)言模型
文章出處:【微信號(hào):CVSCHOOL,微信公眾號(hào):OpenCV學(xué)堂】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論