点击蓝字
关注我们,让开发变得更有趣
作者| 杨亦诚
排版| 李擎
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 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™ 工具套件,评论区已开放,欢迎大家留言评论!
文章这么精彩,你有没有“在看”?