0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

英特尔物联网 来源:OpenVINO 中文社区 2024-08-30 16:55 次阅读

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

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

wKgaombRiSSAEtPYAAGsXrwS45c283.jpg

图: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服务。

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

    关注

    37

    文章

    3240

    浏览量

    57593
  • 语言模型
    +关注

    关注

    0

    文章

    502

    浏览量

    10244
  • LLM
    LLM
    +关注

    关注

    0

    文章

    272

    浏览量

    304
  • OpenVINO
    +关注

    关注

    0

    文章

    87

    浏览量

    180

原文标题:LangChain框架现已正式支持OpenVINO™!| 开发者实战

文章出处:【微信号:英特尔物联网,微信公众号:英特尔物联网】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    JS应用开发框架组件

    JS应用开发框架组件简介目录接口使用相关仓简介JS应用开发框架,是OpenHarmony为开发者提供的一套开发OpenHarmony JS应用的开发框架。其组成如下所示:图 1 JS应
    发表于 04-23 18:05

    ComponentCodelab——Tablist的使用方法

    让开发者了解HarmonyOS应用开发常用布局和常用组件之Tablist的使用方法,体验从工程创建到代码、布局的编写,再到编译构建、部署和运行的全过程。
    发表于 05-08 22:04

    section的使用方法

    无论是GNU还是ARM的编译器,都支持__attribute__所指定的编译属性,这里着重讲解一下在KEIL环境下__attribute__中的section的使用方法。section关键字可以将
    发表于 11-25 08:10

    串行通信基础知识与UART驱动构件使用方法

    慕课苏州大学.嵌入式开发及应用.第二章.入门与软件框架.串行通信基础知识与UART驱动构件使用方法0 目录2 入门与软件框架2.1 串行通信基础知识与UART驱动构件使用方法2.1.1
    发表于 12-20 06:21

    介绍SPI的使用方法

    ,这篇介绍SPI的使用方法,流程与TIM类似。大致总结为以下几个步骤:在RT-thread settings中使能对应的驱动框架在stm32f4xx_hal_conf.h中使能对应的模块(HAL_XX_MODULE_ENABLED)在board.h中启用外设类型对应的宏定
    发表于 02-17 06:32

    OpenHarmony 3.1 Release版本关键特性解析——ArkUI框架又有哪些新增能力?

    绘制接口使用方法下面介绍一个示例,给大家展示声明式开发范式中 Canvas 组件的基础使用方法。图 3 是三张图片叠加的效果,顶层的图片覆盖了底层的图片。通过依次使用 drawImage(x,y
    发表于 05-31 18:05

    动态可重组的组件集成框架研究

    根据测评系统的功能用户可扩展和可定制的需求,结合基于组件的软件开发的方法,提出了测评系统的动态可重组的组件集成框架,支持无限级菜单自动生成和菜单名称自定义。
    发表于 01-27 13:29 20次下载

    Sharding-JDBC 基本使用方法

    的归途。 使用框架、中间件、数据库、工具包等公共组件来组装出应用系统是我们这一代 IT 打工人工作的常态。对于这些公共组件比如框架的学习,有些人的
    的头像 发表于 11-19 15:54 4708次阅读
    Sharding-JDBC 基本<b class='flag-5'>使用方法</b>

    示波器的使用方法(三):示波器的使用方法详解

    示波器的使用方法并非很难,重点在于正确使用示波器的使用方法。往期文章中,小编对模拟示波器的使用方法和数字示波器的使用方法均有所介绍。为增进大家对示波器的
    的头像 发表于 12-24 20:37 3185次阅读

    罗森伯格HFM电缆组件使用方法

    组件使用方法,目的是阐述安装使用过程中的注意事项,避免错误的操作。   1 2 表:HFM线端连接器 连接器和电缆组件的安装过程涉及到线缆组件与板端连接器的插入、拔出和线束的布置等过
    的头像 发表于 01-18 15:33 3438次阅读

    方舟开发框架新增开源组件及其使用方法介绍

    2021年的华为开发者大会(HDC2021)上,我们发布了新一代的声明式UI框架——方舟开发框架(ArkUI)。ArkUI框架引入了基于TS扩展的声明式开发范式。自此,越来越多的开发者加入到JS
    的头像 发表于 05-07 17:43 2579次阅读
    方舟开发<b class='flag-5'>框架</b>新增开源<b class='flag-5'>组件</b>及其<b class='flag-5'>使用方法</b>介绍

    射频电缆组件使用方法和注意事项

    射频电缆组件使用方法和注意事项  射频电缆组件是一类广泛应用于通信系统、无线电设备和其他射频设备中的重要电子组件。它们在传输高频信号时扮演着关键
    的头像 发表于 01-05 15:08 593次阅读

    LangChain 0.1版本正式发布

    LangChain 由 Harrison Chase 于 2022 年 10 月推出,是一个开源编排框架,用于使用 LLM 开发应用程序,推出后迅速脱颖而出,截至 2023 年 6 月,它是 GitHub 上增长最快的开源项目。
    的头像 发表于 01-10 10:28 935次阅读

    用Redis为LangChain定制AI代理——OpenGPTs

    OpenAI最近推出了OpenAIGPTs——一个构建定制化AI代理的无代码“应用商店”,随后LangChain开发了类似的开源工具OpenGPTs。OpenGPTs是一款低代码的开源框架,专用
    的头像 发表于 01-13 08:03 805次阅读
    用Redis为<b class='flag-5'>LangChain</b>定制AI代理——OpenGPTs

    太阳能组件检测设备的使用方法简单吗?

      JD-EL4太阳能组件检测设备的使用方法简单而直观,通常设计为用户友好型,以确保操作便捷、高效。以下将详细介绍太阳能组件检测设备的使用方法及相关特点:   1. 简洁直观的操
    的头像 发表于 05-21 17:09 385次阅读