0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

LangChain框架關(guān)鍵組件的使用方法

英特爾物聯(lián)網(wǎng) ? 來源:OpenVINO 中文社區(qū) ? 2024-08-30 16:55 ? 次閱讀

以下文章來源于OpenVINO 中文社區(qū) ,作者:楊亦誠

LangChain是一個強(qiáng)大的框架,旨在幫助開發(fā)人員使用語言模型構(gòu)建端到端的應(yīng)用程序。它提供了一套工具、組件和接口,可簡化創(chuàng)建由大型語言模型 (LLM) 和聊天模型提供支持的應(yīng)用程序的過程。通過LangChain,開發(fā)者可以輕松構(gòu)建基于RAG或者Agent流水線的復(fù)雜應(yīng)用體系,而目前我們已經(jīng)可以在LangChain的關(guān)鍵組件LLM,Text Embedding和Reranker中直接調(diào)用OpenVINO進(jìn)行模型部署,提升本地RAG和Agent服務(wù)的性能,接下來就讓我們一起看下這些組件的使用方法吧。

wKgaombRiSSAEtPYAAGsXrwS45c283.jpg

圖:RAG系統(tǒng)參考流水線

01安裝方式

相比較常規(guī)的LangChain安裝,如果想在LangChain中調(diào)用OpenVINO,只需再額外安裝OpenVINO的Optimum-intel組件。其中已經(jīng)包含對OpenVINO runtime以及NNCF等依賴的安裝。

pip install langchain
pip install --upgrade-strategy eager "optimum[openvino,nncf]"

左滑查看更多

02LLM

大語言模型是LangChain框架中最核心的模型服務(wù)組件,可以實現(xiàn)RAG系統(tǒng)中的答案生成與Agent系統(tǒng)中的規(guī)劃和工具調(diào)用能力,鑒于OpenVINO的Optimum-intel組件目前已經(jīng)適配了大部分LLM的推理任務(wù),并且該套件可以無縫對接HuggingFace的Transformers庫,因此在和LangChain的集成中,我們將OpenVINO添加為了HuggingFace Pipeline中的一個Backend后端,并直接復(fù)用其代碼,開發(fā)者可以通過以下方式在LangChain的HuggingFace Pipeline中對OpenVINO的LLM對象進(jìn)行初始化, 其中model_id可以是一個HuggingFace的模型ID,也可以是本地的PyTorch或者OpenVINO格式模型路徑:

from langchain_community.llms.huggingface_pipeline import HuggingFacePipeline


ov_config = {"PERFORMANCE_HINT": "LATENCY", "NUM_STREAMS": "1", "CACHE_DIR": ""}


ov_llm = HuggingFacePipeline.from_model_id(
  model_id="gpt2",
  task="text-generation",
  backend="openvino",
  model_kwargs={"device": "CPU", "ov_config": ov_config},
  pipeline_kwargs={"max_new_tokens": 10},
)

左滑查看更多

在創(chuàng)建好OpenVINO的LLM模型對象后,我們便可以想調(diào)用其他LLM組件一樣來部署他的推理任務(wù)。

from langchain_core.prompts import PromptTemplate


template = """Question: {question}


Answer: Let's think step by step."""
prompt = PromptTemplate.from_template(template)


chain = prompt | ov_llm


question = "What is electroencephalography?"


print(chain.invoke({"question": question}))

左滑查看更多

如果你想把LLM部署在Intel的GPU上,也可以通過修改model_kwargs={"device": "GPU"}來進(jìn)行遷移。此外也可以通過Optimum-intel的命令行工具先將模型導(dǎo)出到本地,再進(jìn)行部署,這個過程中可以直接導(dǎo)出INT4量化后的模型格式。

optimum-cli export openvino --model gpt2 --weight-format int4 ov_model_dir

左滑查看更多

03Text Embedding

Text Embedding模型是作用是將文本轉(zhuǎn)化成特征向量,以便對基于文本進(jìn)行相似度檢索,該模型在RAG系統(tǒng)中得到了廣泛應(yīng)用,期望從Text Embedding任務(wù)中得到Top k個候選上下文Context,目前Text Embedding模型可以通過Optimum-intel中的feature-extraction任務(wù)進(jìn)行導(dǎo)出:

optimum-cli export openvino --model BAAI/bge-small-en --task feature-extraction

左滑查看更多

在LangChain中,我們可以通過OpenVINOEmbeddings 和OpenVINOBgeEmbeddings這兩個對象來部署傳統(tǒng)BERT類的Embedding模型以及基于BGE的Embedding模型,以下是一個BGE Embedding模型部署示例:

model_name = "BAAI/bge-small-en"
model_kwargs = {"device": "CPU"}
encode_kwargs = {"normalize_embeddings": True}
ov_embeddings = OpenVINOBgeEmbeddings(
  model_name_or_path=model_name,
  model_kwargs=model_kwargs,
  encode_kwargs=encode_kwargs,
)
embedding = ov_embeddings.embed_query("hi this is harrison")

左滑查看更多

04Reranker

Reranker本質(zhì)上是一個文本分類模型,通過該模型,我們可以得到每一條候選上下文Context與問題Query的相似度列表,對其排序后,可以進(jìn)一步過濾RAG系統(tǒng)中的上下文Context,Reranker模型可以通過Optimum-intel中的text-classification任務(wù)進(jìn)行導(dǎo)出:

optimum-cli export openvino --model BAAI/bge-reranker-large --task text-classification

左滑查看更多

在使用過過程中,通過OpenVINOReranker進(jìn)行創(chuàng)建Renrank任務(wù),搭配ContextualCompressionRetriever使用,實現(xiàn)對檢索器Retriever的搜索結(jié)果進(jìn)行壓縮。通過定義top n大小,可以限制最后輸出的上下文語句數(shù)量,例如在下面這個例子中,我們會對檢索器retriever的top k個檢索結(jié)果進(jìn)行重排,并選取其中與Query相似度最高的4個結(jié)果,達(dá)到進(jìn)一步壓縮輸入Prompt長度的目的。

model_name = "BAAI/bge-reranker-large"
ov_compressor = OpenVINOReranker(model_name_or_path=model_name, top_n=4)
compression_retriever = ContextualCompressionRetriever(
  base_compressor=ov_compressor, base_retriever=retriever
)

左滑查看更多

05總結(jié)

基于OpenVINO的模型任務(wù)目前已集成進(jìn)了LangChain框架組件中,開發(fā)者可以以更便捷的方式,在原本基于LangChain構(gòu)建的上層AI應(yīng)用中,獲取上對于關(guān)鍵模型推理性能上的提升。對于Intel的AIPC開發(fā)者來說,借助LangChain和OpenVINO的集成,也可以以更低的硬件門檻和資源占用來創(chuàng)建LLM服務(wù)。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 應(yīng)用程序
    +關(guān)注

    關(guān)注

    37

    文章

    3237

    瀏覽量

    57546
  • 語言模型
    +關(guān)注

    關(guān)注

    0

    文章

    501

    瀏覽量

    10236
  • LLM
    LLM
    +關(guān)注

    關(guān)注

    0

    文章

    264

    瀏覽量

    297
  • OpenVINO
    +關(guān)注

    關(guān)注

    0

    文章

    83

    瀏覽量

    168

原文標(biāo)題:LangChain框架現(xiàn)已正式支持OpenVINO?!| 開發(fā)者實戰(zhàn)

文章出處:【微信號:英特爾物聯(lián)網(wǎng),微信公眾號:英特爾物聯(lián)網(wǎng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    JS應(yīng)用開發(fā)框架組件

    JS應(yīng)用開發(fā)框架組件簡介目錄接口使用相關(guān)倉簡介JS應(yīng)用開發(fā)框架,是OpenHarmony為開發(fā)者提供的一套開發(fā)OpenHarmony JS應(yīng)用的開發(fā)框架。其組成如下所示:圖 1 JS應(yīng)
    發(fā)表于 04-23 18:05

    ComponentCodelab——Tablist的使用方法

    讓開發(fā)者了解HarmonyOS應(yīng)用開發(fā)常用布局和常用組件之Tablist的使用方法,體驗從工程創(chuàng)建到代碼、布局的編寫,再到編譯構(gòu)建、部署和運行的全過程。
    發(fā)表于 05-08 22:04

    section的使用方法

    無論是GNU還是ARM的編譯器,都支持__attribute__所指定的編譯屬性,這里著重講解一下在KEIL環(huán)境下__attribute__中的section的使用方法。section關(guān)鍵字可以將
    發(fā)表于 11-25 08:10

    串行通信基礎(chǔ)知識與UART驅(qū)動構(gòu)件使用方法

    慕課蘇州大學(xué).嵌入式開發(fā)及應(yīng)用.第二章.入門與軟件框架.串行通信基礎(chǔ)知識與UART驅(qū)動構(gòu)件使用方法0 目錄2 入門與軟件框架2.1 串行通信基礎(chǔ)知識與UART驅(qū)動構(gòu)件使用方法2.1.1
    發(fā)表于 12-20 06:21

    介紹SPI的使用方法

    ,這篇介紹SPI的使用方法,流程與TIM類似。大致總結(jié)為以下幾個步驟:在RT-thread settings中使能對應(yīng)的驅(qū)動框架在stm32f4xx_hal_conf.h中使能對應(yīng)的模塊(HAL_XX_MODULE_ENABLED)在board.h中啟用外設(shè)類型對應(yīng)的宏定
    發(fā)表于 02-17 06:32

    OpenHarmony 3.1 Release版本關(guān)鍵特性解析——ArkUI框架又有哪些新增能力?

    繪制接口使用方法下面介紹一個示例,給大家展示聲明式開發(fā)范式中 Canvas 組件的基礎(chǔ)使用方法。圖 3 是三張圖片疊加的效果,頂層的圖片覆蓋了底層的圖片。通過依次使用 drawImage(x,y
    發(fā)表于 05-31 18:05

    動態(tài)可重組的組件集成框架研究

    根據(jù)測評系統(tǒng)的功能用戶可擴(kuò)展和可定制的需求,結(jié)合基于組件的軟件開發(fā)的方法,提出了測評系統(tǒng)的動態(tài)可重組的組件集成框架,支持無限級菜單自動生成和菜單名稱自定義。
    發(fā)表于 01-27 13:29 ?20次下載

    Sharding-JDBC 基本使用方法

    的歸途。 使用框架、中間件、數(shù)據(jù)庫、工具包等公共組件來組裝出應(yīng)用系統(tǒng)是我們這一代 IT 打工人工作的常態(tài)。對于這些公共組件比如框架的學(xué)習(xí),有些人的
    的頭像 發(fā)表于 11-19 15:54 ?4690次閱讀
    Sharding-JDBC 基本<b class='flag-5'>使用方法</b>

    示波器的使用方法(三):示波器的使用方法詳解

    示波器的使用方法并非很難,重點在于正確使用示波器的使用方法。往期文章中,小編對模擬示波器的使用方法和數(shù)字示波器的使用方法均有所介紹。為增進(jìn)大家對示波器的
    的頭像 發(fā)表于 12-24 20:37 ?3144次閱讀

    羅森伯格HFM電纜組件使用方法

    組件使用方法,目的是闡述安裝使用過程中的注意事項,避免錯誤的操作。 ? 1 2 表:HFM線端連接器 連接器和電纜組件的安裝過程涉及到線纜組件與板端連接器的插入、拔出和線束的布置等過
    的頭像 發(fā)表于 01-18 15:33 ?3415次閱讀

    方舟開發(fā)框架新增開源組件及其使用方法介紹

    2021年的華為開發(fā)者大會(HDC2021)上,我們發(fā)布了新一代的聲明式UI框架——方舟開發(fā)框架(ArkUI)。ArkUI框架引入了基于TS擴(kuò)展的聲明式開發(fā)范式。自此,越來越多的開發(fā)者加入到JS
    的頭像 發(fā)表于 05-07 17:43 ?2569次閱讀
    方舟開發(fā)<b class='flag-5'>框架</b>新增開源<b class='flag-5'>組件</b>及其<b class='flag-5'>使用方法</b>介紹

    射頻電纜組件使用方法和注意事項

    射頻電纜組件使用方法和注意事項? 射頻電纜組件是一類廣泛應(yīng)用于通信系統(tǒng)、無線電設(shè)備和其他射頻設(shè)備中的重要電子組件。它們在傳輸高頻信號時扮演著關(guān)鍵
    的頭像 發(fā)表于 01-05 15:08 ?575次閱讀

    LangChain 0.1版本正式發(fā)布

    LangChain 由 Harrison Chase 于 2022 年 10 月推出,是一個開源編排框架,用于使用 LLM 開發(fā)應(yīng)用程序,推出后迅速脫穎而出,截至 2023 年 6 月,它是 GitHub 上增長最快的開源項目。
    的頭像 發(fā)表于 01-10 10:28 ?919次閱讀

    用Redis為LangChain定制AI代理——OpenGPTs

    OpenAI最近推出了OpenAIGPTs——一個構(gòu)建定制化AI代理的無代碼“應(yīng)用商店”,隨后LangChain開發(fā)了類似的開源工具OpenGPTs。OpenGPTs是一款低代碼的開源框架,專用
    的頭像 發(fā)表于 01-13 08:03 ?794次閱讀
    用Redis為<b class='flag-5'>LangChain</b>定制AI代理——OpenGPTs

    太陽能組件檢測設(shè)備的使用方法簡單嗎?

      JD-EL4太陽能組件檢測設(shè)備的使用方法簡單而直觀,通常設(shè)計為用戶友好型,以確保操作便捷、高效。以下將詳細(xì)介紹太陽能組件檢測設(shè)備的使用方法及相關(guān)特點:   1. 簡潔直觀的操
    的頭像 發(fā)表于 05-21 17:09 ?365次閱讀