LangChain框架关键组件的使用方法

描述

以下文章来源于OpenVINO 中文社区 ,作者:杨亦诚

LangChain是一个强大的框架,旨在帮助开发人员使用语言模型构建端到端的应用程序。它提供了一套工具、组件和接口,可简化创建由大型语言模型 (LLM) 和聊天模型提供支持的应用程序的过程。通过LangChain,开发者可以轻松构建基于RAG或者Agent流水线的复杂应用体系,而目前我们已经可以在LangChain的关键组件LLM,Text Embedding和Reranker中直接调用OpenVINO进行模型部署,提升本地RAG和Agent服务的性能,接下来就让我们一起看下这些组件的使用方法吧。

LLM

图:RAG系统参考流水线

01安装方式

相比较常规的LangChain安装,如果想在LangChain中调用OpenVINO,只需再额外安装OpenVINO的Optimum-intel组件。其中已经包含对OpenVINO runtime以及NNCF等依赖的安装。

 

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

 

左滑查看更多

02LLM

大语言模型是LangChain框架中最核心的模型服务组件,可以实现RAG系统中的答案生成与Agent系统中的规划和工具调用能力,鉴于OpenVINO的Optimum-intel组件目前已经适配了大部分LLM的推理任务,并且该套件可以无缝对接HuggingFace的Transformers库,因此在和LangChain的集成中,我们将OpenVINO添加为了HuggingFace Pipeline中的一个Backend后端,并直接复用其代码,开发者可以通过以下方式在LangChain的HuggingFace Pipeline中对OpenVINO的LLM对象进行初始化, 其中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},
)

 

左滑查看更多

在创建好OpenVINO的LLM模型对象后,我们便可以想调用其他LLM组件一样来部署他的推理任务。

 

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"}来进行迁移。此外也可以通过Optimum-intel的命令行工具先将模型导出到本地,再进行部署,这个过程中可以直接导出INT4量化后的模型格式。

 

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

 

左滑查看更多

03Text Embedding

Text Embedding模型是作用是将文本转化成特征向量,以便对基于文本进行相似度检索,该模型在RAG系统中得到了广泛应用,期望从Text Embedding任务中得到Top k个候选上下文Context,目前Text Embedding模型可以通过Optimum-intel中的feature-extraction任务进行导出:

 

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

 

左滑查看更多

在LangChain中,我们可以通过OpenVINOEmbeddings 和OpenVINOBgeEmbeddings这两个对象来部署传统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本质上是一个文本分类模型,通过该模型,我们可以得到每一条候选上下文Context与问题Query的相似度列表,对其排序后,可以进一步过滤RAG系统中的上下文Context,Reranker模型可以通过Optimum-intel中的text-classification任务进行导出:

 

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

 

左滑查看更多

在使用过过程中,通过OpenVINOReranker进行创建Renrank任务,搭配ContextualCompressionRetriever使用,实现对检索器Retriever的搜索结果进行压缩。通过定义top n大小,可以限制最后输出的上下文语句数量,例如在下面这个例子中,我们会对检索器retriever的top k个检索结果进行重排,并选取其中与Query相似度最高的4个结果,达到进一步压缩输入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总结

基于OpenVINO的模型任务目前已集成进了LangChain框架组件中,开发者可以以更便捷的方式,在原本基于LangChain构建的上层AI应用中,获取上对于关键模型推理性能上的提升。对于Intel的AIPC开发者来说,借助LangChain和OpenVINO的集成,也可以以更低的硬件门槛和资源占用来创建LLM服务。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分