本笔记是对青训营-AI方向的第四课:LangChain实践课的第四节的思考。第四节课主题是:模型IO-输入提示,调用模型、解析输出。
首先,我们学习了模型的使用流程,使用大语言模型进行问答的流程主要分为三步:输入提示(提示词Prompt)、调用大模型的接口(Predict)以及输出解析(把模型的输出规范化)。 接下来,我们分别回顾这三块内容:
- 输入提示模板 提示模板是构建高质量提示的关键,LangChain提供了创建和使用提示模板的工具,以生成适合不同场景的文案。 模板就相当于日常生活中的话术,我们总结了一套话术标准,然后喂给大模型,只需要根据具体的使用场景替换模板中的关键对象(也就是主语)。当然,具体问题具体分析,我们不可能有“一招鲜吃遍天”的模板,那也太逆天了哈哈哈。因此我们需要学习“提示工程”的相关知识。
如何构建好的提示模板?
构建原则:1)给予模型清晰的指示 2)让模型慢慢地思考
如下图是提示模板的生成方式
这里有个知识点:就是from_template()方法,是直接基于我们自定义的字符串模板构建从LangChain中的提示模板PromptTemplate创建模板对象。这个方法输出变量(定义的花名和价格)、输出解释器、模板格式、是否验证模板等等信息。
- 语言模型
LangChain支持多种语言模型,包括大语言模型、聊天模型和文本嵌入模型,允许通过通用接口调用,提高灵活性和便利性。 大语言模型:也是Text Model,输入字符串,输出字符串 聊天模型:也是Chat Model,输入聊天消息,返回聊天消息,更加符合人类日常交流 文本嵌入模型:负责把文本切割,存入向量数据库。
- 输出解析
LangChain的输出解析功能可以将非结构化文本转换成结构化数据,便于程序处理,加快基于语言模型的应用开发效率。输出解析器来重构程序,让模型有能力生成结构化的回应,同时对其进行解析,直接将解析好的数据存入CSV文档。 接下来我们使用输出解释器重构程序,让模型具有生成结构化答案的能力,并可以对答案进行解析,还可以存入CSV文档。
最后,我对思考题有如下看法:
思考1:请你用自己的理解,简述LangChain调用大语言模型来做应用开发的优势。
解答:使用该框架可以更好管理模板,同一个模板可以调用不同的模型API使用,框架中还可以对变量进行检查,更重要的是该框架嵌入了输出格式,可以输出我们想要格式的回答。
思考2:在上面的示例中,format_instructions,也就是输出格式是怎样用output_parser构建出来的,又是怎样传递到提示模板中的?
format_instructions 是通过 output_parser 构建的,并通过提示模板中的占位符传递给模型。这样,模型就知道如何格式化它的输出,以便于后续的解析。这里,prompt_template 是一个包含占位符 {format_instructions} 的字符串,这个占位符会被 format_instructions 的值替换。这样,当提示被格式化时,它会包含如何结构化输出的说明。在提示模板中,{format_instructions} 是一个占位符,它会被 output_parser.get_format_instructions() 方法返回的字符串替换。这个字符串提供了关于如何格式化输出的详细说明,以确保输出符合 response_schemas 中定义的结构。
思考3:加入了partial_variables,也就是输出解析器指定的format_instructions之后的提示,为什么能够让模型生成结构化的输出?你可以打印出这个提示,一探究竟。
当你将format_instructions作为partial_variables的一部分传递给PromptTemplate.from_template()方法时,它会将这些说明嵌入到提示模板中。这样,当你使用prompt.format(flower_name=flower, price=price)格式化提示时,format_instructions会被替换为实际的格式化说明。
您是一位专业的鲜花店文案撰写员。
对于售价为 20 元的 康乃馨 ,您能提供一个吸引人的简短描述吗?
The output should be a markdown code snippet formatted in the following schema, including the leading and trailing "json" and "":
{
"description": string // 鲜花的描述文案
"reason": string // 问什么要这样写这个文案
}
4。使用输出解析器后,调用模型时有没有可能仍然得不到所希望的输出?也就是说,模型有没有可能仍然返回格式不够完美的输出?
使用输出解析器可以帮助确保模型的输出符合特定的格式要求,但并不能完全保证模型每次都会返回完美格式化的输出。模型的输出仍然受到多种因素的影响,包括模型的训练数据、模型的参数设置、输入的质量和复杂性等。