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

点击蓝字

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

作者| 杨亦诚

排版| 李擎

LangChain 框架

现已正式支持 OpenVINO™!

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

facea5742525ccf8943db1860da615fb.png

图:RAG系统参考流水线

OpenVINO™

1. 安装方式

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

pip install langchain
pip 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™ 工具套件,评论区已开放,欢迎大家留言评论!

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值