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