我们这一节需要对LangChain中的核心元素-模型进行讲解
对于模型的使用,可以大致分为三块
输入提示,调用模型,输出解析,这三块构成了一个整体,统称为Model IO
在模型IO的每个环节,都有对应的模板和工具,可以方便我们调用不同语言模型的接口。
提示模板,可以将提示信息输入到模型中,创建LangChain模板,从而通过参数的方式生成特定输入语句,而这些语句更加符合模型的理解能力。
语言模型,通过选定模型,并进行统一的调用,从而提高了灵活性和便利性
输出解析,LangChain辅助我们从模型返回中,精准提取需要的信息,并且以结构化的方式返回。
那么首先是模板的构建
这个模板其实就是一个更加符合模型的输入,只不过输入的生成是可以交给LangChain生成的,比如下面的代码生成,
我们希望当用户选择一种品类的鲜花的时候,可以根据价格和种类生成合适的文字
from langchain import PromptTemplate # 创建原始模板 template = “””您是一位专业的鲜花店文案撰写员。\n 对于售价为 {price} 元的 {flower_name} ,您能提供一个吸引人的简短描述吗? “”” # 根据原始模板创建LangChain提示模板 prompt = PromptTemplate.from_template(template) # 打印LangChain提示模板的内容 print(prompt) |
这对这样的一个声明的模板,我们该如何使用。
from langchain import OpenAI # 创建模型实例 model = OpenAI(model_name=’text-davinci-003′) # 输入提示 input = prompt.format(flower_name=[“玫瑰”], price=’50’) # 得到模型的输出 output = model(input) # 打印输出内容 print(output) |
其实调用format的函数,类似string的format进行格式化处理
利用PromptTemplate的from_template的方法将一个模板字符串转换为一个真正的template,从而增加了更多的类和函数
当然我们也有不使用template的方式,但是这就需要更多地方维护这类模板
其次是第二章的调用
不过这个调用其主角是大语言模型,主要有三类
大语言模型,LLM
聊天模型,支持上下文
文本嵌入模型,将文本作为输入并返回浮点数列表,方便我们存入向量数据库。
上看我们也使用了OpenAI作为模型,进行调用着
最后一步是对输出进行解析
也就是利用LangChain从模型输出之中获取到结构化的数据
比如原本的模型返回的结果是:
文案是:让你心动!50元就可以拥有这支充满浪漫气息的玫瑰花束,让TA感受你的真心爱意。为什么这样说呢?因为爱情是无价的,50元对应热恋中的情侣也会觉得值得。”
但是这一句话,可以拆分为dict包含两个字段
{description: “让你心动!50元就可以拥有这支充满浪漫气息的玫瑰花束,让TA感受你的真心爱意。” ; reason: “因为爱情是无价的,50元对应热恋中的情侣也会觉得值得。”}
那么从原本的文本数据到现在的结构化数据,就可以交给LangChain的输出解析器进行使用。
那么如何创建并使用这个的一个输出解析器呢?
首先我们需要从langchain的output_parser中导入StructuredOutputParser, ResponseSchema
ResponseSchema负责创建想要接收的响应模式
response_schemas = [
ResponseSchema(name=”description”, description=”鲜花的描述文案”),
ResponseSchema(name=”reason”, description=”问什么要这样写这个文案”)
]
然后根据这两个schema去创建一个Parser
output_parser = StructuredOutputParser.from_response_schemas(response_schemas)
之后就是利用这个parser去得到给模型输入用的提示
format_instructions = output_parser.get_format_instructions()
之后就是在根据字符串创建模板的时候,可以传入上面的提示信息
prompt = PromptTemplate.from_template(prompt_template,
partial_variables={“format_instructions”: format_instructions})
然后是获取一个响应结果
input = prompt.format(flower_name=flower, price=price)
output = model(input)
parsed_output = output_parser.parse(output)
这样我们获取到的结果之中,就包含了description和reason
那么我们总结一下
我们说了LangChain中的模型的基本使用
分为了三个部分,分别是输入时的模板管理,模型的使用,以及输出的解析
接下来我们将详细讲解下模板的高阶使用。
4. LangChain中的模型I/O
我们这一节需要对LangChain中的核心元素-模型进行讲解
对于模型的使用,可以大致分为三块
输入提示,调用模型,输出解析,这三块构成了一个整体,统称为Model IO
在模型IO的每个环节,都有对应的模板和工具,可以方便我们调用不同语言模型的接口。
提示模板,可以将提示信息输入到模型中,创建LangChain模板,从而通过参数的方式生成特定输入语句,而这些语句更加符合模型的理解能力。
语言模型,通过选定模型,并进行统一的调用,从而提高了灵活性和便利性
输出解析,LangChain辅助我们从模型返回中,精准提取需要的信息,并且以结构化的方式返回。
那么首先是模板的构建
这个模板其实就是一个更加符合模型的输入,只不过输入的生成是可以交给LangChain生成的,比如下面的代码生成,
我们希望当用户选择一种品类的鲜花的时候,可以根据价格和种类生成合适的文字
from langchain import PromptTemplate # 创建原始模板 template = “””您是一位专业的鲜花店文案撰写员。\n 对于售价为 {price} 元的 {flower_name} ,您能提供一个吸引人的简短描述吗? “”” # 根据原始模板创建LangChain提示模板 prompt = PromptTemplate.from_template(template) # 打印LangChain提示模板的内容 print(prompt) |
这对这样的一个声明的模板,我们该如何使用。
from langchain import OpenAI # 创建模型实例 model = OpenAI(model_name=’text-davinci-003′) # 输入提示 input = prompt.format(flower_name=[“玫瑰”], price=’50’) # 得到模型的输出 output = model(input) # 打印输出内容 print(output) |
其实调用format的函数,类似string的format进行格式化处理
利用PromptTemplate的from_template的方法将一个模板字符串转换为一个真正的template,从而增加了更多的类和函数
当然我们也有不使用template的方式,但是这就需要更多地方维护这类模板
其次是第二章的调用
不过这个调用其主角是大语言模型,主要有三类
大语言模型,LLM
聊天模型,支持上下文
文本嵌入模型,将文本作为输入并返回浮点数列表,方便我们存入向量数据库。
上看我们也使用了OpenAI作为模型,进行调用着
最后一步是对输出进行解析
也就是利用LangChain从模型输出之中获取到结构化的数据
比如原本的模型返回的结果是:
文案是:让你心动!50元就可以拥有这支充满浪漫气息的玫瑰花束,让TA感受你的真心爱意。为什么这样说呢?因为爱情是无价的,50元对应热恋中的情侣也会觉得值得。”
但是这一句话,可以拆分为dict包含两个字段
{description: “让你心动!50元就可以拥有这支充满浪漫气息的玫瑰花束,让TA感受你的真心爱意。” ; reason: “因为爱情是无价的,50元对应热恋中的情侣也会觉得值得。”}
那么从原本的文本数据到现在的结构化数据,就可以交给LangChain的输出解析器进行使用。
那么如何创建并使用这个的一个输出解析器呢?
首先我们需要从langchain的output_parser中导入StructuredOutputParser, ResponseSchema
ResponseSchema负责创建想要接收的响应模式
response_schemas = [
ResponseSchema(name=”description”, description=”鲜花的描述文案”),
ResponseSchema(name=”reason”, description=”问什么要这样写这个文案”)
]
然后根据这两个schema去创建一个Parser
output_parser = StructuredOutputParser.from_response_schemas(response_schemas)
之后就是利用这个parser去得到给模型输入用的提示
format_instructions = output_parser.get_format_instructions()
之后就是在根据字符串创建模板的时候,可以传入上面的提示信息
prompt = PromptTemplate.from_template(prompt_template,
partial_variables={“format_instructions”: format_instructions})
然后是获取一个响应结果
input = prompt.format(flower_name=flower, price=price)
output = model(input)
parsed_output = output_parser.parse(output)
这样我们获取到的结果之中,就包含了description和reason
那么我们总结一下
我们说了LangChain中的模型的基本使用
分为了三个部分,分别是输入时的模板管理,模型的使用,以及输出的解析
接下来我们将详细讲解下模板的高阶使用。