【AIGC】LangChain入门指南——第三章 模型I/O

第三章 模型I/O


前言

本章我们将要介绍的是LangChain的核心,也是整个执行RAG(Retrieval-augmented Generation)流程的基础,模型I/O。我们在执行一个智能体任务时,会将整个任务分解为多个基础任务,但凡涉及到自然语言处理的基础任务都需要与大语言模型交互,交互的流程就必须交由模型I/O模块来完成,它由模型包装器、提示词模版、输出解释器三部分组成,它决定了我们调用什么样的模型、输入的文本内容、输出的文本格式,我们控制三者的自由组合来处理各式各样的任务。


一、主要内容

1、什么是模型I/O

1.1 什么是大语言模型

大语言模型是一种建立在Transformer架构上的大规模神经网络程序,其功能主要是理解和处理各种语言文字,它的优势在于它能够在多种任务中实现通用学习,不需要针对某一种语言进行定制。

想要大语言模型能够像人一样的理解和处理语言文字就得从零开始训练一个大语言模型。模型的训练方式与单词接龙类似,根据已出现的字预测下一个字,整个训练就是一个周而复始的过程,使用的文字越多越优质,训练得到的大语言模型也就越好。

2、模型I/O功能之模型包装器

2.1 模型包装器分类

目前是各大平台上的模型都分为两类,一种是文本补全类型的API,例如输入一段句子让模型生成句子剩余的部分。另外一种是专门用于聊天场景的API。对于这两种类型,LangChain提供了llms下的大语言模型包装器和chat_models聊天模型包装器。两种类型主要体现在输入输出的区别。聊天模型包装器的输入输出与对话结构类似而大语言模型输入输出则为一段文本内容。

2.2 LLM模型包装器

LLM模型包装器的使用相对比较简单,输入为文本字符串,输出同样也为一个文本字符串。

2.3 聊天模型包装器

聊天模型包装器与LLM模型包装器相比相对比较复杂,在使用时需要先导入几种数据模型,来构建聊天模型包装器需要的对话形式的输入结构。

3、模型I/O功能之提示词模版

3.1 什么是提示词模型

我们之前所介绍的,提示词的作用就是为了使得大语言模型能够准确的理解用户输入的指令并完成高质量的回复。提示词模版就是LangChain为了完成这一项工作设计出来的模块。模版中有很多的占位符,开发者可以把用户的输入动态的加入到模版中形成一些优质的提示词。并且LangChain还根据使用的模版包装器不同设计了不同的提示词模版。

3.2 提示词模版的输入和输出

提示词模版的输入根据来源主要分为两种输入:内部数据、外部数据。内部数据是指已经被LangChain框架封装好的或者是开发者提前写好的示例是一些需求描述的文本内容。外部数据是指用户的输入、用户和模型聊天记录这些相对比较自由添加的数据。

3.3 使用提示词模版构造提示词

在LangChain里面构造提示词其实就是实例化PromptTemplate类的过程,在实例化这个类的最主要的两个参数是template和input_variables。第一个参数就是自定义的或者是框架内部的提示词模板,第二个参数就是模版期望得到的输入变量。

提示模版的类同样分为两种,一种是用于文本补全类型的模版(PromptTemplate)和聊天场景的模版(ChatPromptTemplate)。两种类型的构建差异与模型包装器的类似,同样是用于文本补充的输入的是字符串,用于聊天场景的输入的是带有角色类型的消息提示词模版,并且二者可以转换。

3.4 少样本提示词模版

研究证明,在提示词中加入一些示例能够提高模型对文字的理解。所以在提示词模版中加入一些示例也是常见的提高模型回答质量的方法。LangChain提供FewShotPromptTemplate类为实现这一功能的组件。

少样本提示词模版有5个核心参数,examples(示例),example_selector(示例选择器),example_prompt(示例模版),prefix(模版前缀),suffix(模版后缀)。示例选择器用于接受一个实例化的示例选择器,主要功能是选择示例中与输入数据条件类似的示例。示例是输入一整个预先准备好的示例列表。示例模版接收一个实例化的提示词模版,用于构造示例。前缀和后缀两个参数分别拼接在整个模版的开始和结尾用于构建完整的少样本提示词模版。

模版在使用时与基础的提示词模版类似,直接传入到链或者其他组件的提示词参数上即可。

少样本提示词模版的选择器,有多种:根据长度判断的,根据相似度判断的,根据最大边际相关的,根据n-gram重叠度的四种。目的都是为了再构建提示词模版是选择的是与输入内容相似的提示词。

3.5 多功能提示词模版

为了使得构建提示词模版够能更加的灵活自由,LangChain还提出了很多的功能和组件来适应更加开放的场景。模版可以通过调用partial方法来实现内置的模版内容和用户输入相结合的功能。使用PipelinePrompt可以将一部分高度重复的模版内容组合起来形成一个新的模版。模版内容还支持序列化可以加载JSON、YAML格式的提示词模版。LangChain还支持将特征库中的检索数据与模版内容结合生成一个包含用户信息的提示词模版。最后LangChain还支持模版参数校验功能,确保用户输入的参数是与模版期望的参数是一致的。

4、模型I/O功能之输出解析器

4.1 输出解析器的功能

我们在使用大语言模型的过程中,有一项关键的任务就是需要能将大语言模型的输入解析为我们所期望的格式方便我们处理。输出解释器就是做的这一项工作。

输出解释器由两个功能组成,第一就是添加提示词模版的输出指令,第二就是解析输出的格式。添加输出指令是因为所有与大语言模型的交互都是依靠于提示词,想要大语言模型能够按照我们指定的格式做出输出就需要添加指定的提示词内容。需要解析输出这也是这个输出解释器的本职工作将大语言模型的输出解析为我们所期望的结构。

LangChain提供了包括布尔类型、日期类型、枚举类型等多种输出解析器用于应对不同的开发环境。

4.2 输出解析器的使用

输出解释器的输入用与它的功能密切相关,按照功能第一步就是将实例化之后的输出解析器使用说明(调用get_format_instructions)传入提示词模版中。以正常使用模版的方式将提示词模版类传入其他的组件调用。第二步就是当获取到返回的结果之后调用parse方法解析返回的内容获取指定的格式。

4.3 Pydantic JSON输出解析器

Pydantic JSON解释器是一个特殊的输出解释器,它能够使得模型输出的结果为我们指定实体结构,与其它输出解析器不同的是它在实例化的时候需要传入一个BaseModel的实现类,也就是需要返回的数据格式。其他的使用方式与基础的输出解释器相同。

4.4 结构化输出解析器

StructuredOutputParser解释器本质上的功能与Pydantic JSON解释器的功能类似,都是使得模型返回的结果为程序可以解析的数据结构。只是在实现方式上有所不同应用的场景也不太相同。

二、总结

LangChain中的模型I/O的模块是一个用于应用程序与大语言模型交互的框架。它由三部分组成
1、模型包装器
模型包装器其实就是各种大语言模型的包装器,LangChain整合了各类平台的大语言模型的调用,使得所有的调用的入口统一化,节省了开发者学习各类平台调用的时间。
包装类只要分为两个大类,一种是用于文本生成的基础的类型如:OpenAI,一种是用于处理对话信息的模型如:ChatOpenAI,两种模型的输入格式不同,输出格式也不同。

2、提示词模版
提示词模版就是用于处理我们常说的大语言模型的提示词。我们可以自定义自己的提示词,也可以使用LangChain内置的一些提示词模版,然后使用模版将用户的输入和模版的内容结合起来形成一个完整的大语言模型的提示词。

3、输出解释器
输出解释器就是字面意思,目的就是用于处理大语言模型的输出内容,我们有的时候需要大语言模型的输出并非文本内容,而是一些其他的数据格式例如Json。我们就可以将输出解释器的实体类与前面提到的模型包装器组装起来,就可以实现指定数据格式的输出。

最近发现一个可以白嫖的构建自己知识库和文本生成的网站【小杨同学】https://www.xytxai.com,不花钱就是嫖!

  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值