网站如何提高流量,永湖网站建设,阿里巴巴网站分类板块做全屏,网站合同一、输出解析器#xff08;Output Parser#xff09;
作用#xff1a;#xff08;1#xff09;让模型按照指定的格式输出#xff1b;
#xff08;2#xff09;解析模型输出#xff0c;提取所需的信息
1、逗号分隔列表
CommaSeparatedListOutputParser#xff1a;…
一、输出解析器Output Parser
作用1让模型按照指定的格式输出
2解析模型输出提取所需的信息
1、逗号分隔列表
CommaSeparatedListOutputParser规定模型输出为以逗号分隔的字符串形式它是自然语言意义上的列表不是 Python 意义上的列表解析时再将逗号分隔的字符串转成列表。
#使用CommaSeparatedListOutputParser限制模型输出格式并对输出进行解析将其转换为列表形式。from langchain.output_parsers import CommaSeparatedListOutputParser
from langchain.prompts import ChatPromptTemplate
from langchain_community.chat_models import ChatOpenAI# 初始化模型
modelChatOpenAI(modelgpt-3.5-turbo,base_urlhttps://api.gptsapi.net/v1,)#构建消息列表
prompt ChatPromptTemplate.from_messages([ #构建提示模板(system, {parser_instructions}),(human, 列出5个{subject}色系的十六进制颜色码。)
])output_parserCommaSeparatedListOutputParser() #创建输出解析器以逗号分隔的列表
parser_instructionsoutput_parser.get_format_instructions() #获取解析器的指令
print(parser_instructions) #Your response should be a list of comma separated values, eg: foo, bar, baz or foo,bar,bazfinal_promptprompt.invoke( #将变量填充生成最终提示{parser_instructions:parser_instructions,subject:莫兰迪}
)# 调用模型并输出结果
responsemodel.invoke(final_prompt)
print(type(response)) #class langchain_core.messages.ai.AIMessage
print(response.content) # #F0A202, #FFCD75, #F8E6A0, #EAE0C8, #E1D9B7response2listoutput_parser.invoke(response) #使用output_parser的invoke方法对模型的响应response进行解析
print(response2list) #[#F0A202, #FFCD75, #F8E6A0, #EAE0C8, #E1D9B7] 系统消息({parser_instructions})此消息位置用于传递输出解析器的指令告诉模型如何格式化输出。 创建CommaSeparatedListOutputParser实例output_parser用于解析模型输出。
通过output_parser.get_format_instructions()获取输出格式指令这些指令会告诉模型应以逗号分隔的列表形式输出结果。打印这些指令可查看具体内容例如“你的回答应该是一个逗号分隔的列表不包含任何其他解释或说明。” 使用output_parser的invoke方法对模型的响应response进行解析。output_parser会按照之前定义的格式指令将模型输出转换为 Python 列表。
对于output_parser的invoke函数 Union[str, BaseMessage] 是 Python typing 模块中的类型注解表示 input 参数可以是 str 类型字符串类型或者 BaseMessage 类型。Union 用于指定一个参数可以是多种类型中的任意一种。 2、JSON # 从给定的书籍概述中提取书名、作者以及书籍体裁等信息并将提取结果解析为 Pydantic 模型对象from langchain.output_parsers import PydanticOutputParser
from langchain.prompts import ChatPromptTemplate
from pydantic import BaseModel,Field
from typing import List
from langchain_community.chat_models import ChatOpenAI# 初始化模型
modelChatOpenAI(modelgpt-3.5-turbo,base_urlhttps://api.gptsapi.net/v1,)# 消息列表
## 定义数据输出和解析格式获取parser_instructions
class BookInfo(BaseModel):book_name:strField(description书籍的名字,example百年孤独)author_name:strField(description书籍的作者,example加西亚·马尔克斯)genres:List[str]Field(description书籍的体裁,example[小说,文学])output_parserPydanticOutputParser(pydantic_objectBookInfo) #将BookInfo类作为参数传递用于将模型输出解析为BookInfo对象
parser_instructionsoutput_parser.get_format_instructions()
print(parser_instructions)## 构建提示模板
promptChatPromptTemplate.from_messages([(system,{parser_instructions}。你输出的结果请使用中文。),(human,请你帮我从书籍概述中提取书名、作者以及书籍的体裁。书籍概述会被三个#符号包围。\n###{book_introduction}###)]
)book_introduction
《明朝那些事儿》作者是当年明月。2006 年 3 月在天涯社区首次发表
2009 年 3 月 21 日连载完毕边写作边集结成书出版发行一共 7 本。
《明朝那些事儿》主要讲述的是从 1344 年到 1644 年这三百年间关于明朝的一些故事。
以史料为基础以年代和具体人物为主线并加入了小说的笔法语言幽默风趣。
对明朝十六帝和其他王公权贵和小人物的命运进行全景展示
尤其对官场政治、战争、帝王心术着墨最多并加入对当时政治经济制度、人伦道德的演义。
它以一种网络语言向读者娓娓道出三百多年关于明朝的历史故事、人物。
其中原本在历史中陌生、模糊的历史人物在书中一个个变得鲜活起来。
《明朝那些事儿》为读者解读历史中的另一面让历史变成一部活生生的生活故事。## 将格式指令和书籍概述填充到提示模板中生成最终的提示
final_promptprompt.invoke({parser_instructions:parser_instructions,book_introduction:book_introduction}
)# 调用模型并输出结果
responsemodel.invoke(final_prompt)
print(response.content)response2bookinfooutput_parser.invoke(response) #将模型的响应response解析为BookInfo对象response2bookinfo
print(response2bookinfo)
print(response2bookinfo.book_name)
print(response2bookinfo.author_name)
print(response2bookinfo.genres) 1、pydantic是一个功能强大的python库主要用于数据验证、数据解析和数据序列化。 数据验证 1类型检查对输入的数据进行严格的类型检查确保数据符合模型定义的类型。例如在定义一个用户模型时可以指定用户的年龄为整数类型如果传入的数据不是整数pydantic 会抛出验证错误。 2范围和约束检查为字段设置范围和约束条件如最大长度、最小长度、最大值、最小值等。 数据解析 自动类型转换 可以自动将输入的数据转换为模型定义的类型。例如输入的字符串形式的数字可以自动转换为整数或浮点数。 数据序列化 模型实例可以方便地转换为字典.dict或 JSON 字符串.json便于数据的存储和传输。 补充dict和json的区别 如果你只在 Python 内部处理数据字典可能更合适而如果涉及到数据的传输或存储尤其是跨系统的交互JSON 字符串通常是更好的选择。 2、BaseModel和Field来自pydantic库它们具有以下作用 BaseModel是一个基类用于创建数据模型类。通过继承BaseModel可以快速定义具有数据验证、序列化和反序列化等功能的数据模型。 比如BookInfo类继承自BaseModel这使得BookInfo类可以利用pydantic提供的自动验证功能确保数据符合定义的类型和约束条件。 Field是用于定义模型字段的函数。它为模型中的字段book_name、author_name和genres提供额外的元数据和配置选项如字段的描述descripton、示例example等。 这些信息在生成文档、进行数据验证以及帮助开发者、AI理解代码逻辑等方面都非常有帮助。 3、打印指令print(parser_instructions) 开头部分说明了输出应该被格式化为一个符合给定 JSON 模式的 JSON 实例并通过一个示例展示了什么样的输出是符合模式的什么样的输出是不符合模式的。 JSON Schemaschema模式用于规范实际存储的书籍信息的结构和规则“说明书” 输出json 4、输出的json本质上是字符串将其转为类实例更容易提取对应信息 result.book_name就可以直接得到书名了。 5、from typing import List 在 Python 3.9 之前需要引入 List 来实现更精确的类型提示而 Python 3.9 及以后可以直接使用内置的 list 完成类似功能。不过为了保持代码在不同 Python 版本之间的兼容性很多项目仍然会使用 typing 模块中的类型。