当前位置: 首页 > news >正文

金华高端网站建设wordpress后台二次开发

金华高端网站建设,wordpress后台二次开发,三合一网站模板,佛山网站推广建设07#xff5c;输出解析#xff1a;用OutputParser生成鲜花推荐列表 模型 I/O Pipeline 下面先来看看 LangChain 中的输出解析器究竟是什么#xff0c;有哪些种类。 LangChain 中的输出解析器 语言模型输出的是文本#xff0c;这是给人类阅读的。但很多时候#xff0c;你…07输出解析用OutputParser生成鲜花推荐列表 模型 I/O Pipeline 下面先来看看 LangChain 中的输出解析器究竟是什么有哪些种类。 LangChain 中的输出解析器 语言模型输出的是文本这是给人类阅读的。但很多时候你可能想要获得的是程序能够处理的结构化信息。这就是输出解析器发挥作用的地方。 输出解析器是一种专用于处理和构建语言模型响应的类。一个基本的输出解析器类通常需要实现两个核心方法。 get_format_instructions这个方法需要返回一个字符串用于指导如何格式化语言模型的输出告诉它应该如何组织并构建它的回答。parse这个方法接收一个字符串也就是语言模型的输出并将其解析为特定的数据结构或格式。这一步通常用于确保模型的输出符合我们的预期并且能够以我们需要的形式进行后续处理。 还有一个可选的方法。 parse_with_prompt这个方法接收一个字符串也就是语言模型的输出和一个提示用于生成这个输出的提示并将其解析为特定的数据结构。这样你可以根据原始提示来修正或重新解析模型的输出确保输出的信息更加准确和贴合要求。 下面是一个基于上述描述的简单伪代码示例 class OutputParser:def __init__(self):passdef get_format_instructions(self):# 返回一个字符串指导如何格式化模型的输出passdef parse(self, model_output):# 解析模型的输出转换为某种数据结构或格式passdef parse_with_prompt(self, model_output, prompt):# 基于原始提示解析模型的输出转换为某种数据结构或格式pass 在 LangChain 中通过实现 get_format_instructions、parse 和 parse_with_prompt 这些方法针对不同的使用场景和目标设计了各种输出解析器。让我们来逐一认识一下。 列表解析器List Parser这个解析器用于处理模型生成的输出当需要模型的输出是一个列表的时候使用。例如如果你询问模型“列出所有鲜花的库存”模型的回答应该是一个列表。日期时间解析器Datetime Parser这个解析器用于处理日期和时间相关的输出确保模型的输出是正确的日期或时间格式。枚举解析器Enum Parser这个解析器用于处理预定义的一组值当模型的输出应该是这组预定义值之一时使用。例如如果你定义了一个问题的答案只能是“是”或“否”那么枚举解析器可以确保模型的回答是这两个选项之一。结构化输出解析器Structured Output Parser这个解析器用于处理复杂的、结构化的输出。如果你的应用需要模型生成具有特定结构的复杂回答例如一份报告、一篇文章等那么可以使用结构化输出解析器来实现。PydanticJSON解析器这个解析器用于处理模型的输出当模型的输出应该是一个符合特定格式的 JSON 对象时使用。它使用 Pydantic 库这是一个数据验证库可以用于构建复杂的数据模型并确保模型的输出符合预期的数据模型。自动修复解析器Auto-Fixing Parser这个解析器可以自动修复某些常见的模型输出错误。例如如果模型的输出应该是一段文本但是模型返回了一段包含语法或拼写错误的文本自动修复解析器可以自动纠正这些错误。重试解析器RetryWithErrorOutputParser这个解析器用于在模型的初次输出不符合预期时尝试修复或重新生成新的输出。例如如果模型的输出应该是一个日期但是模型返回了一个字符串那么重试解析器可以重新提示模型生成正确的日期格式。 上面的各种解析器中前三种很容易理解而结构化输出解析器你已经用过了。所以接下来我们重点讲一讲 PydanticJSON解析器、自动修复解析器和重试解析器。 PydanticJSON解析器实战 Pydantic (JSON) 解析器应该是最常用也是最重要的解析器我带着你用它来重构鲜花文案生成程序。 Pydantic 是一个 Python 数据验证和设置管理库主要基于 Python 类型提示。尽管它不是专为 JSON 设计的但由于 JSON 是现代 Web 应用和 API 交互中的常见数据格式Pydantic 在处理和验证 JSON 数据时特别有用。 第一步创建模型实例 先通过环境变量设置 OpenAI API 密钥然后使用 LangChain 库创建了一个 OpenAI 的模型实例。这里我们仍然选择了 text-davinci-003 作为大语言模型。 # ------Part 1 # 设置OpenAI API密钥 import os os.environ[OPENAI_API_KEY] 你的OpenAI API Key# 创建模型实例 from langchain import OpenAI model OpenAI(model_nametext-davinci-003) 第二步定义输出数据的格式 先创建了一个空的 DataFrame用于存储从模型生成的描述。接下来通过一个名为 FlowerDescription 的 Pydantic BaseModel 类定义了期望的数据格式也就是数据的结构。 # ------Part 2 # 创建一个空的DataFrame用于存储结果 import pandas as pd df pd.DataFrame(columns[flower_type, price, description, reason])# 数据准备 flowers [玫瑰, 百合, 康乃馨] prices [50, 30, 20]# 定义我们想要接收的数据格式 from pydantic import BaseModel, Field class FlowerDescription(BaseModel):flower_type: str Field(description鲜花的种类)price: int Field(description鲜花的价格)description: str Field(description鲜花的描述文案)reason: str Field(description为什么要这样写这个文案) 在这里我们用到了负责数据格式验证的 Pydantic 库来创建带有类型注解的类 FlowerDescription它可以自动验证输入数据确保输入数据符合你指定的类型和其他验证条件。 Pydantic 有这样几个特点。 数据验证当你向 Pydantic 类赋值时它会自动进行数据验证。例如如果你创建了一个字段需要是整数但试图向它赋予一个字符串Pydantic 会引发异常。数据转换Pydantic 不仅进行数据验证还可以进行数据转换。例如如果你有一个需要整数的字段但你提供了一个可以转换为整数的字符串如 “42”Pydantic 会自动将这个字符串转换为整数 42。易于使用创建一个 Pydantic 类就像定义一个普通的 Python 类一样简单。只需要使用 Python 的类型注解功能即可在类定义中指定每个字段的类型。JSON 支持Pydantic 类可以很容易地从 JSON 数据创建并可以将类的数据转换为 JSON 格式。 下面我们基于这个 Pydantic 数据格式类来创建 LangChain 的输出解析器。 第三步创建输出解析器 在这一步中我们创建输出解析器并获取输出格式指示。先使用 LangChain 库中的 PydanticOutputParser 创建了输出解析器该解析器将用于解析模型的输出以确保其符合 FlowerDescription 的格式。然后使用解析器的 get_format_instructions 方法获取了输出格式的指示。 # ------Part 3 # 创建输出解析器 from langchain.output_parsers import PydanticOutputParser output_parser PydanticOutputParser(pydantic_objectFlowerDescription)# 获取输出格式指示 format_instructions output_parser.get_format_instructions() # 打印提示 print(输出格式,format_instructions) 程序输出如下 输出格式 The output should be formatted as a JSON instance that conforms to the JSON schema below.As an example, for the schema {properties: {foo: {title: Foo, description: a list of strings, type: array, items: {type: string}}}, required: [foo]}} the object {foo: [bar, baz]} is a well-formatted instance of the schema. The object {properties: {foo: [bar, baz]}} is not well-formatted.Here is the output schema:{properties: {flower_type: {title: Flower Type, description: \u9c9c\u82b1\u7684\u79cd\u7c7b, type: string}, price: {title: Price, description: \u9c9c\u82b1\u7684\u4ef7\u683c, type: integer}, description: {title: Description, description: \u9c9c\u82b1\u7684\u63cf\u8ff0\u6587\u6848, type: string}, reason: {title: Reason, description: \u4e3a\u4ec0\u4e48\u8981\u8fd9\u6837\u5199\u8fd9\u4e2a\u6587\u6848, type: string}}, required: [flower_type, price, description, reason]} 上面这个输出这部分是通过 output_parser.get_format_instructions() 方法生成的这是 Pydantic (JSON) 解析器的核心价值值得你好好研究研究。同时它也算得上是一个很清晰的提示模板能够为模型提供良好的指导描述了模型输出应该符合的格式。其中 description 中的中文被转成了 UTF-8 编码。 它指示模型输出 JSON Schema 的形式定义了一个有效的输出应该包含哪些字段以及这些字段的数据类型。例如它指定了 flower_type 字段应该是字符串类型price 字段应该是整数类型。这个指示中还提供了一个例子说明了什么是一个格式良好的输出。 下面我们会把这个内容也传输到模型的提示中让输入模型的提示和输出解析器的要求相互吻合前后就呼应得上。 第四步创建提示模板 我们定义了一个提示模板该模板将用于为模型生成输入提示。模板中包含了你需要模型填充的变量如价格和花的种类以及之前获取的输出格式指示。 # ------Part 4 # 创建提示模板 from langchain import PromptTemplate prompt_template 您是一位专业的鲜花店文案撰写员。 对于售价为 {price} 元的 {flower} 您能提供一个吸引人的简短中文描述吗 {format_instructions}# 根据模板创建提示同时在提示中加入输出解析器的说明 prompt PromptTemplate.from_template(prompt_template, partial_variables{format_instructions: format_instructions}) # 打印提示 print(提示, prompt) 输出 提示 input_variables[flower, price] output_parserNone partial_variables{format_instructions: The output should be formatted as a JSON instance that conforms to the JSON schema below.\n\n As an example, for the schema { properties: {foo: {title: Foo, description: a list of strings, type: array, items: {type: string}}}, required: [foo]}}\n the object {foo: [bar, baz]} is a well-formatted instance of the schema. The object {properties: {foo: [bar, baz]}} is not well-formatted.\n\n Here is the output schema:\n\n {properties: { flower_type: {title: Flower Type, description: \\u9c9c\\u82b1\\u7684\\u79cd\\u7c7b, type: string}, price: {title: Price, description: \\u9c9c\\u82b1\\u7684\\u4ef7\\u683c, type: integer}, description: {title: Description, description: \\u9c9c\\u82b1\\u7684\\u63cf\\u8ff0\\u6587\\u6848, type: string}, reason: {title: Reason, description: \\u4e3a\\u4ec0\\u4e48\\u8981\\u8fd9\\u6837\\u5199\\u8fd9\\u4e2a\\u6587\\u6848, type: string}}, required: [flower_type, price, description, reason]}\n} template您是一位专业的鲜花店文案撰写员。 \n对于售价为 {price} 元的 {flower} 您能提供一个吸引人的简短中文描述吗\n {format_instructions} template_formatf-string validate_templateTrue 这就是包含了 format_instructions 信息的提示模板。 input_variables[‘flower’, ‘price’]这是一个包含你想要在模板中使用的输入变量的列表。我们在模板中使用了 ‘flower’ 和 ‘price’ 两个变量后面我们会用具体的值如玫瑰、20 元来替换这两个变量。output_parserNone这是你可以选择在模板中使用的一个输出解析器。在此例中我们并没有选择在模板中使用输出解析器而是在模型外部进行输出解析所以这里是 None。partial_variables包含了你想要在模板中使用但在生成模板时无法立即提供的变量。在这里我们通过 ‘format_instructions’ 传入输出格式的详细说明。template这是模板字符串本身。它包含了你想要模型生成的文本的结构。在此例中模板字符串是你询问鲜花描述的问题以及关于输出格式的说明。template_format‘f-string’这是一个表示模板字符串格式的选项。此处是 f-string 格式。validate_templateTrue表示是否在创建模板时检查模板的有效性。这里选择了在创建模板时进行检查以确保模板是有效的。 总的来说这个提示模板是一个用于生成模型输入的工具。你可以在模板中定义需要的输入变量以及模板字符串的格式和结构然后使用这个模板来为每种鲜花生成一个描述。 后面我们还要把实际的信息循环传入提示模板生成一个个的具体提示。下面让我们继续。 第五步生成提示传入模型并解析输出 这部分是程序的主体我们循环来处理所有的花和它们的价格。对于每种花都根据提示模板创建了输入然后获取模型的输出。然后使用之前创建的解析器来解析这个输出并将解析后的输出添加到 DataFrame 中。最后你打印出了所有的结果并且可以选择将其保存到 CSV 文件中。 # ------Part 5 for flower, price in zip(flowers, prices):# 根据提示准备模型的输入input prompt.format(flowerflower, priceprice)# 打印提示print(提示, input)# 获取模型的输出output model(input)# 解析模型的输出parsed_output output_parser.parse(output)parsed_output_dict parsed_output.dict() # 将Pydantic格式转换为字典# 将解析后的输出添加到DataFrame中df.loc[len(df)] parsed_output.dict()# 打印字典 print(输出的数据, df.to_dict(orientrecords)) 这一步中你使用你的模型和输入提示由鲜花种类和价格组成生成了一个具体鲜花的文案需求同时带有格式描述然后传递给大模型也就是说提示模板中的 flower 和 price此时都被具体的花取代了而且模板中的 {format_instructions}也被替换成了 JSON Schema 中指明的格式信息。 具体来说输出的一个提示是这样的 提示 您是一位专业的鲜花店文案撰写员。 对于售价为 20 元的 康乃馨 您能提供一个吸引人的简短中文描述吗 The output should be formatted as a JSON instance that conforms to the JSON schema below. As an example, for the schema {“properties”: {“foo”: {“title”: “Foo”, “description”: “a list of strings”, “type”: “array”, “items”: {“type”: “string”}}}, “required”: [“foo”]}} the object {“foo”: [“bar”, “baz”]} is a well-formatted instance of the schema. The object {“properties”: {“foo”: [“bar”, “baz”]}} is not well-formatted. Here is the output schema: {properties: {flower_type: {title: Flower Type, description: \u9c9c\u82b1\u7684\u79cd\u7c7b, type: string}, price: {title: Price, description: \u9c9c\u82b1\u7684\u4ef7\u683c, type: integer}, description: {title: Description, description: \u9c9c\u82b1\u7684\u63cf\u8ff0\u6587\u6848, type: string}, reason: {title: Reason, description: \u4e3a\u4ec0\u4e48\u8981\u8fd9\u6837\u5199\u8fd9\u4e2a\u6587\u6848, type: string}}, required: [flower_type, price, description, reason]}下面程序解析模型的输出。在这一步中你使用你之前定义的输出解析器output_parser将模型的输出解析成了一个 FlowerDescription 的实例。FlowerDescription 是你之前定义的一个 Pydantic 类它包含了鲜花的类型、价格、描述以及描述的理由。 然后将解析后的输出添加到 DataFrame 中。在这一步中你将解析后的输出即 FlowerDescription 实例转换为一个字典并将这个字典添加到你的 DataFrame 中。这个 DataFrame 是你用来存储所有鲜花描述的。 模型的最后输出如下 输出的数据 [{flower_type: Rose, price: 50, description: 玫瑰是最浪漫的花它具有柔和的粉红色有着浓浓的爱意价格实惠50元就可以拥有一束玫瑰。, reason: 玫瑰代表着爱情是最浪漫的礼物以实惠的价格可以让您尽情体验爱的浪漫。}, {flower_type: 百合, price: 30, description: 这支百合柔美的花蕾在你的手中摇曳仿佛在与你深情的交谈, reason: 营造浪漫氛围}, {flower_type: Carnation, price: 20, description: 艳丽缤纷的康乃馨带给你温馨、浪漫的气氛是最佳的礼物选择, reason: 康乃馨是一种颜色鲜艳、芬芳淡雅、具有浪漫寓意的鲜花非常适合作为礼物而且20元的价格比较实惠。}] 因此Pydantic 的优点就是容易解析而解析之后的字典格式的列表在进行数据分析、处理和存储时非常方便。每个字典代表一条记录它的键 即 flower_type、price、description 和 reason是字段名称对应的值是这个字段的内容。这样一来每个字段都对应一列每个字典就是一行适合以 DataFrame 的形式来表示和处理。 自动修复解析器OutputFixingParser实战 下面咱们来看看如何使用自动修复解析器。 首先让我们来设计一个解析时出现的错误。 # 导入所需要的库和模块 from langchain.output_parsers import PydanticOutputParser from pydantic import BaseModel, Field from typing import List# 使用Pydantic创建一个数据格式表示花 class Flower(BaseModel):name: str Field(descriptionname of a flower)colors: List[str] Field(descriptionthe colors of this flower) # 定义一个用于获取某种花的颜色列表的查询 flower_query Generate the charaters for a random flower.# 定义一个格式不正确的输出 misformatted {name: 康乃馨, colors: [粉红色,白色,红色,紫色,黄色]}# 创建一个用于解析输出的Pydantic解析器此处希望解析为Flower格式 parser PydanticOutputParser(pydantic_objectFlower) # 使用Pydantic解析器解析不正确的输出 parser.parse(misformatted) 这段代码如果运行会出现错误。 langchain.schema.output_parser.OutputParserException: Failed to parse Flower from completion {name: 康乃馨, colors: [粉红色,白色]}. Got: Expecting property name enclosed in double quotes: line 1 column 2 (char 1) 这个错误消息来自 Python 的内建 JSON 解析器发现我们输入的 JSON 格式不正确。程序尝试用 PydanticOutputParser 来解析 JSON 字符串时Python 期望属性名称被双引号包围但在给定的 JSON 字符串中是单引号。 当这个错误被触发后程序进一步引发了一个自定义异常OutputParserException它提供了更多关于错误的上下文。这个自定义异常的消息表示在尝试解析 flower 对象时遇到了问题。 刚才说了问题在于 misformatted 字符串的内容 {name: 康乃馨, colors: [粉红色,白色,红色,紫色,黄色]}应该改为 {name: 康乃馨, colors: [粉红色,白色,红色,紫色,黄色]}这样你的 JSON 字符串就会使用正确的双引号格式应该可以被正确地解析。 不过这里我并不想这样解决问题而是尝试使用 OutputFixingParser 来帮助咱们自动解决类似的格式错误。 # 从langchain库导入所需的模块 from langchain.chat_models import ChatOpenAI from langchain.output_parsers import OutputFixingParser# 设置OpenAI API密钥 import os os.environ[OPENAI_API_KEY] 你的OpenAI API Key# 使用OutputFixingParser创建一个新的解析器该解析器能够纠正格式不正确的输出 new_parser OutputFixingParser.from_llm(parserparser, llmChatOpenAI())# 使用新的解析器解析不正确的输出 result new_parser.parse(misformatted) # 错误被自动修正 print(result) # 打印解析后的输出结果 用上面的新的 new_parser 来代替 Parser 进行解析你会发现JSON 格式的错误问题被解决了程序不再出错。 输出如下 nameRose colors[red, pink, white]这里的秘密在于在 OutputFixingParser 内部调用了原有的 PydanticOutputParser如果成功就返回如果失败它会将格式错误的输出以及格式化的指令传递给大模型并要求 LLM 进行相关的修复。 神奇吧大模型不仅给我们提供知识还随时帮助分析并解决程序出错的信息。 重试解析器RetryWithErrorOutputParser实战 OutputFixingParser 不错但它只能做简单的格式修复。如果出错的不只是格式比如输出根本不完整有缺失内容那么仅仅根据输出和格式本身是无法修复它的。 此时通过实现输出解析器中 parse_with_prompt 方法LangChain 提供的重试解析器可以帮助我们利用大模型的推理能力根据原始提示找回相关信息。 我们通过分析一个重试解析器的用例来理解上面的这段话。 首先还是设计一个解析过程中的错误。 # 定义一个模板字符串这个模板将用于生成提问 template Based on the user question, provide an Action and Action Input for what step should be taken. {format_instructions} Question: {query} Response:# 定义一个Pydantic数据格式它描述了一个行动类及其属性 from pydantic import BaseModel, Field class Action(BaseModel):action: str Field(descriptionaction to take)action_input: str Field(descriptioninput to the action)# 使用Pydantic格式Action来初始化一个输出解析器 from langchain.output_parsers import PydanticOutputParser parser PydanticOutputParser(pydantic_objectAction)# 定义一个提示模板它将用于向模型提问 from langchain.prompts import PromptTemplate prompt PromptTemplate(templateAnswer the user query.\n{format_instructions}\n{query}\n,input_variables[query],partial_variables{format_instructions: parser.get_format_instructions()}, ) prompt_value prompt.format_prompt(queryWhat are the colors of Orchid?)# 定义一个错误格式的字符串 bad_response {action: search} parser.parse(bad_response) # 如果直接解析它会引发一个错误 由于 bad_response 只提供了 action 字段而没有提供 action_input 字段这与 Action 数据格式的预期不符所以解析会失败。 我们首先尝试用 OutputFixingParser 来解决这个错误。 from langchain.output_parsers import OutputFixingParser from langchain.chat_models import ChatOpenAI fix_parser OutputFixingParser.from_llm(parserparser, llmChatOpenAI()) parse_result fix_parser.parse(bad_response) print(OutputFixingParser的parse结果:,parse_result) OutputFixingParser 的 parse 结果actionsearch action_inputquery 我们来看看这个尝试解决了什么问题没解决什么问题。 解决的问题有 不完整的数据原始的 bad_response 只提供了 action 字段而没有 action_input 字段。OutputFixingParser 已经填补了这个缺失为 action_input 字段提供了值 ‘query’。 没解决的问题有 具体性尽管 OutputFixingParser 为 action_input 字段提供了默认值 ‘query’但这并不具有描述性。真正的查询是 “Orchid兰花的颜色是什么”。所以这个修复只是提供了一个通用的值并没有真正地回答用户的问题。可能的误导‘query’ 可能被误解为一个指示要求进一步查询某些内容而不是作为实际的查询输入。 当然还有更鲁棒的选择我们最后尝试一下 RetryWithErrorOutputParser 这个解析器。 # 初始化RetryWithErrorOutputParser它会尝试再次提问来得到一个正确的输出 from langchain.output_parsers import RetryWithErrorOutputParser from langchain.llms import OpenAI retry_parser RetryWithErrorOutputParser.from_llm(parserparser, llmOpenAI(temperature0) ) parse_result retry_parser.parse_with_prompt(bad_response, prompt_value) print(RetryWithErrorOutputParser的parse结果:,parse_result) 这个解析器没有让我们失望成功地还原了格式甚至也根据传入的原始提示还原了 action_input 字段的内容。 RetryWithErrorOutputParser 的 parse 结果actionsearch action_inputcolors of Orchid
http://www.pierceye.com/news/697499/

相关文章:

  • 江西省网站建设庆阳在线网
  • wordpress建站微信联系智慧政务网站怎么做
  • 邯郸购物网站建设电子商务是干什么的工作
  • 网站开发竞聘报告wordpress彩色标签云设置方法
  • 深圳高端网站建设收费宿州百度seo排名软件
  • 彩妆网站建设报告公司网页是什么
  • 站长之家综合查询工具广州网站网站建设
  • 网站开发如何实现数据库的链接同性性做视频网站
  • 网站建设uuiop网站建设盐城最便宜
  • iss怎么做网站一个旅游网站建设
  • 润州网站建设网址生成
  • 备案网站服务内容域名网站打开慢
  • 做网站域名备案需要多久企业年金查询官网
  • 制作企业网站的公司如何制作广告
  • 兰州网站优化excel做网站链接
  • 代做单片机毕业设计网站广州网站建设小程序开发
  • 深圳网站官网建设方案安阳做网站电话
  • 批量扫dedecms做的网站哪个网站可以兼职做效果图
  • 建网站与建网页的区别wordpress 七牛云 cdn
  • 专门做养老院的网站城市文化网站开发背景
  • html5写的网站有什么好处淄博网站制作制作
  • 服装设计素材网站大全做旅游的网站的要素
  • 企业网站建设报价清单深圳小程序建设公司
  • 给人做传销网站开发平台软件要多少钱
  • 腾讯建设网站视频视频视频手机网站报价表
  • 门户网站建设要求南京seo公司教程
  • 网站建设制作要学什么软件福建省城乡建设厅网站
  • 网站遇到攻击时应该怎么做网络广告推广平台
  • 老牌网站建深圳市建设工程服务交易中心
  • 网页界面设计布局青岛百度关键词优化