开发者实战 | LangChain 框架现已正式支持 OpenVINO™!

原创
05/18 17:08
阅读数 52

点击蓝字

关注我们,让开发变得更有趣

作者| 杨亦诚

排版| 李擎

LangChain 框架

现已正式支持 OpenVINO™!


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


图:RAG系统参考流水线


OpenVINO™

1. 安装方式


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

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


OpenVINO™

2.  LLM


大语言模型是 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

关于 OpenVINO™ LLM 组件更多的信息和使用方式可以访问:

https://python.langchain.com/v0.1/docs/integrations/llms/openvino/


OpenVINO™

3.Text 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")

关于 OpenVINO™ Embedding 组件更多的信息和使用方式可以访问:

https://python.langchain.com/v0.1/docs/integrations/text_embedding/openvino/


OpenVINO™

4.Reranker


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)

关于 OpenVINO™ Reranker 组件更多的信息和使用方式可以访问:

https://python.langchain.com/v0.1/docs/integrations/document_transformers/openvino_rerank/


OpenVINO™

5.总结


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


OpenVINO™

6.参考资料


基于 LangChain 和 OpenVINO™ 的 RAG 示例:

https://github.com/openvinotoolkit/openvino_notebooks/tree/latest/notebooks/llm-rag-langchain

基于 LangChain 和 OpenVINO™ 的 Agent 示例:

https://github.com/openvinotoolkit/openvino_notebooks/tree/latest/notebooks/llm-agent-langchain


OpenVINO™

--END--


      
      
      

点击下方图片,让我们一起成为“Issues 猎手”,共创百万用户开源生态!


               
               
               
你也许想了解(点击蓝字查看)⬇️
➡️ 解锁 LLM 新高度,拓宽模型新边界 —OpenVINO™ 2024.1 赋能生成式 AI 高效运行
➡️  隆重介绍 OpenVINO™ 2024.0: 为开发者提供更强性能和扩展支持
➡️  隆重推出 OpenVINO 2023.3 ™ 最新长期支持版本
➡️  OpenVINO™ 2023.2 发布:让生成式 AI 在实际场景中更易用
➡️ 开发者实战 | 介绍OpenVINO™ 2023.1:在边缘端赋能生成式AI
➡️ 基于 ChatGLM2 和 OpenVINO™ 打造中文聊天助手
➡️ 基于 Llama2 和 OpenVINO™ 打造聊天机器人
➡️ OpenVINO™ DevCon 2023重磅回归!英特尔以创新产品激发开发者无限潜能
➡️ 5周年更新 | OpenVINO™  2023.0,让AI部署和加速更容易
➡️ OpenVINO™5周年重头戏!2023.0版本持续升级AI部署和加速性能
➡️ 开发者实战系列资源包来啦!


              
              
              

扫描下方二维码立即体验 

OpenVINO™ 工具套件 2024.1


点击 阅读原文 OpenVINO™ 工具套件,评论区已开放,欢迎大家留言评论!

文章这么精彩,你有没有“在看”?

本文分享自微信公众号 - OpenVINO 中文社区(openvinodev)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部