我们这一节需要对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中的模型的基本使用

分为了三个部分,分别是输入时的模板管理,模型的使用,以及输出的解析

接下来我们将详细讲解下模板的高阶使用。

 

 

发表评论

邮箱地址不会被公开。 必填项已用*标注