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

可信网站认证有什么用外国网站代理

可信网站认证有什么用,外国网站代理,陕西省建设工程信息网官网,网站续费 多久【大语言模型LangChain】 ModelsIO OutputParsers详解 一、简介二、OutputParsers 的优势三、解析器类型四、实战示例1、String 解析器2、Json 解析器3、Pydantic 解析器4、结构化输出解析器5、OpenAI 函数输出解析器5.1、JsonOutputFunctionsParser5.2、JsonKeyOutputFunction…

在这里插入图片描述


【大语言模型LangChain】 ModelsIO OutputParsers详解

  • 一、简介
  • 二、OutputParsers 的优势
  • 三、解析器类型
  • 四、实战示例
    • 1、String 解析器
    • 2、Json 解析器
    • 3、Pydantic 解析器
    • 4、结构化输出解析器
    • 5、OpenAI 函数输出解析器
      • 5.1、JsonOutputFunctionsParser
      • 5.2、JsonKeyOutputFunctionsParser
      • 5.3、PydanticOutputFunctionsParser
      • 5.4、PydanticAttrOutputFunctionsParser

一、简介

基于前边的章节,LangChain 已经可以轻松实现帮用户拿到大语言模型的输出,然而不难发现,前文介绍的模型调用,显示返回的内容通常是一个类(class)的实例,其中包含了 content 以及其他一些额外的参数。

对于模型调用者来说,他们可能只关心 content 的内容,也就是模型对输入内容的回答,或者希望得到一个可操作的数据结构,比如 JSON 格式的数据。

二、OutputParsers 的优势

LangChain 设计的初衷之一,旨在让用户更便捷地使用大模型,所以为了解决输出内容格式化的问题。

通过使用 LangChain 提供的解析器,用户可以更轻松地获取模型的输出,并直接处理或操作所需的内容,而无需进行额外的转换或处理。

三、解析器类型

根据业务需求,开发者通常需要大模型返回一个结构化的数据,方便后续的逻辑可以根据这个数据进行进一步的处理。

然而不同的输入结果可能需要相对应的解析器来做处理,LangChain 同样提供了几种常见的解析器类型:

  • String 解析器
  • Json 解析器
  • Pydantic 解析器
  • 结构化输出解析器
  • OpenAI 函数输出解析器

四、实战示例

1、String 解析器

LangChain 提供了 StrOutputParser,这是一个专门用来处理模型输出内容的解析器。当模型输出的内容是字符串格式的时候,StrOutputParser 能够直接返回模型输出的 content 字符串内容。

这使得用户无需进行复杂的数据解析操作,可以直接获取模型输出的内容字符串,从而更方便地进行后续处理或使用,代码示例如下所示:

# 定义模型
import osfrom langchain_core.messages import SystemMessage
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate, HumanMessagePromptTemplate
from langchain_openai import ChatOpenAIos.environ["OPENAI_API_KEY"] = "xxxxxxxxxxxxxxxxx"  # 将个人token替换到这个位置
os.environ["OPENAI_API_BASE"] = "xxxxxxxxxxxxxxxxx"model = ChatOpenAI()
# 提示词模板
messages = ChatPromptTemplate.from_messages([SystemMessage(content="你是一个翻译各种语言的助手"),HumanMessagePromptTemplate.from_template("把 {poetry} 的原文诗翻译为英文")
])
# 输出解析器
parser = StrOutputParser()
# 调用链
chain_with_parser = messages | model | parser  # 使用输出解析器
res_with_parser = chain_with_parser.invoke({"poetry": "静夜思"})
print(res_with_parser)
print(type(res_with_parser))print('---------------------不使用parser---------------------------------')chain_with_parser = messages | model
res_with_parser = chain_with_parser.invoke({"poetry": "静夜思"})
print(res_with_parser)
print(type(res_with_parser))

结果对比:
在这里插入图片描述

2、Json 解析器

当模型输出的内容是一个 JSON 格式时,LangChain 也提供了相应的解析器 JsonOutputParser。该解析器能够根据 JSON 结构的内容,将其转换为 Python 对应的字典格式的数据,使得用户能够更方便地处理和操作模型输出的结果。代码示例如下所示:

import osfrom langchain_core.output_parsers import JsonOutputParser
from langchain_core.prompts import PromptTemplate
from langchain_openai import ChatOpenAIos.environ["OPENAI_API_KEY"] = "xxxxxxxxxxxxxxx"  # 将个人token替换到这个位置
os.environ["OPENAI_API_BASE"] = "xxxxxxxxxxxxxxx"# 定义模型
model = ChatOpenAI()
# Json输出解析器
parser = JsonOutputParser()
# 模板提示,输出 json 格式的回答
prompt = PromptTemplate(template="根据用户的输入,给出一段中文宣传语 \n{format_instructions}\n{ads}\n",input_variables=["ads"],partial_variables={"format_instructions": parser.get_format_instructions()},
)
# 调用链 包含json输出解析器
chain_with_parser = prompt | model | parser
res_with_parser = chain_with_parser.invoke({"ads": "音乐节"})
print(res_with_parser)
print(type(res_with_parser))print('------------------------不加json解析器------------------------')# 调用链 包含json输出解析器
chain_with_parser = prompt | model
res_with_parser = chain_with_parser.invoke({"ads": "音乐节"})
print(res_with_parser)
print(type(res_with_parser))

在这里插入图片描述

3、Pydantic 解析器

除了支持解析 JSON 格式外,LangChain 还提供了对 Pydantic 模型的解析器 PydanticOutputParser

LangChain 的 Pydantic 解析器可以将模型输出的内容解析为 Pydantic 模型所定义的数据结构。这使得用户可以更加方便地使用 Pydantic 的功能,例如数据验证、序列化和反序列化等,代码示例如下:

from langchain_core.output_parsers import PydanticOutputParser
from langchain_core.prompts import PromptTemplate
from langchain_openai import ChatOpenAI
from pydantic import BaseModel, Field
import osos.environ["OPENAI_API_KEY"] = "xxxxxxxxxxxxx"  # 将个人token替换到这个位置
os.environ["OPENAI_API_BASE"] = "xxxxxxxxxxxxx"class Translation(BaseModel):origin_str: str = Field(description="原始输入的值")trans_str: str = Field(description="翻译后的值")# 定义一个模型
model = ChatOpenAI(temperature=0)
# 使用 pydantic 输出解析器解析 Translation 类
parser = PydanticOutputParser(pydantic_object=Translation)
# 提示模板
prompt = PromptTemplate(template="翻译用户输入的内容为英文\n{format_instructions}\n{query}\n",input_variables=["query"],partial_variables={"format_instructions": parser.get_format_instructions()},
)
# 包含解析器的调用链
chain_with_parser = prompt | model | parser
res_parser = chain_with_parser.invoke({"query": "赏花"})
# 输出返回的内容及类型
print(res_parser)
print(type(res_parser))

在这里插入图片描述

4、结构化输出解析器

LangChain 提供了一种自定义解析方案,即使用 schema 结构。用户可以根据需要定义自己的 schema,并使用 LangChain 的 StructuredOutputParser类来解析符合该 schema 的数据。

这种方式让用户能够更灵活地处理各种类型的模型输出数据,而无需依赖特定的数据验证库或框架。StructuredOutputParser 为用户提供了一种通用的解析方式,使他们能够简单地将模型输出的数据转换为符合自定义 schema 的数据对象。
代码示例如下:

from langchain.output_parsers import ResponseSchema, StructuredOutputParser
from langchain_core.prompts import PromptTemplate
from langchain_openai import ChatOpenAIimport osos.environ["OPENAI_API_KEY"] = "xxxxxxxxxxxxxxx"  # 将个人token替换到这个位置
os.environ["OPENAI_API_BASE"] = "xxxxxxxxxxxxxxx"response_schemas = [ResponseSchema(name="slogan", description="宣传语内容"),ResponseSchema(name="req", description="宣传语限制在10个字符内"),
]
output_parser = StructuredOutputParser.from_response_schemas(response_schemas)
prompt = PromptTemplate(template="根据用户输入的商品给出宣传语\n{format_instructions}\n{goods}",input_variables=["goods"],partial_variables={"format_instructions": output_parser.get_format_instructions()},
)model = ChatOpenAI(temperature=0)
chain_with_parser = prompt | model | output_parser
res_with_parser = chain_with_parser.invoke({"goods": "音乐节"})
print(res_with_parser)
print(type(res_with_parser))print('-----------------不加解析器-----------------------')model = ChatOpenAI(temperature=0)
chain_with_parser = prompt | model
res_with_parser = chain_with_parser.invoke({"goods": "音乐节"})
print(res_with_parser)
print(type(res_with_parser))

在这里插入图片描述

5、OpenAI 函数输出解析器

LangChain 支持解析 OpenAI 提供的函数调用,并提供了以下四种形式来处理输出结果:

  • JsonOutputFunctionsParser:生成 JSON 格式的结果。
  • JsonKeyOutputFunctionsParser:指定 JSON 中某个 key 对应的 value。
  • PydanticOutputFunctionsParser:解析 Pydantic 模型的结构。
  • PydanticAttrOutputFunctionsParser:直接输出模型中某个参数的值。

5.1、JsonOutputFunctionsParser

# 调用大模型
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI
from langchain_core.output_parsers.openai_functions import  JsonOutputFunctionsParserimport osos.environ["OPENAI_API_KEY"] = "xxxxxxxxxxxxx"  # 将个人token替换到这个位置
os.environ["OPENAI_API_BASE"] = "xxxxxxxxxxxxx"model = ChatOpenAI()
# 提示词模板
prompt = ChatPromptTemplate.from_template("出给一个关于 {goods} 的广告宣传语")
# 自定义函数
functions = [{"name": "advertisement","description": "一段广告词","parameters": {"type": "object","properties": {"goods": {"type": "string", "description": "要进行广告的产品"},"ads": {"type": "string", "description": "广告词"},},"required": ["goods", "ads"],},}
]# todo JsonOutputFunctionsParser# 创建调用链 包含输出解析器
chain_json_with_parser = prompt | model.bind(function_call={"name": "advertisement"},functions=functions) | JsonOutputFunctionsParser()
res_json_with_parser = chain_json_with_parser.invoke({"goods": "冰淇淋"})
print(res_json_with_parser)
print(type(res_json_with_parser))print("---------------------------不加JsonOutputFunctionsParser---------------------------")chain_json_with_parser = prompt | model.bind(function_call={"name": "advertisement"},functions=functions)
res_json_with_parser = chain_json_with_parser.invoke({"goods": "冰淇淋"})
print(res_json_with_parser)
print(type(res_json_with_parser))

在这里插入图片描述

5.2、JsonKeyOutputFunctionsParser

# 调用大模型
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI
from langchain_core.output_parsers.openai_functions import JsonKeyOutputFunctionsParser
import osos.environ["OPENAI_API_KEY"] = "xxxxxxxxxxxxx"  # 将个人token替换到这个位置
os.environ["OPENAI_API_BASE"] = "xxxxxxxxxxxxx"model = ChatOpenAI()
# 提示词模板
prompt = ChatPromptTemplate.from_template("出给一个关于 {goods} 的广告宣传语")
# 自定义函数
functions = [{"name": "advertisement","description": "一段广告词","parameters": {"type": "object","properties": {"goods": {"type": "string", "description": "要进行广告的产品"},"ads": {"type": "string", "description": "广告词"},},"required": ["goods", "ads"],},}
]# todo JsonOutputFunctionsParser# 创建调用链 包含输出解析器
chain_key_parser = prompt | model.bind(function_call={"name": "advertisement"},functions=functions) | JsonKeyOutputFunctionsParser(key_name='ads')
res_key_parser = chain_key_parser.invoke({"goods": "摩托车"})
print(res_key_parser)
print(type(res_key_parser))print("---------------------------不加JsonKeyOutputFunctionsParser---------------------------")chain_key_parser = prompt | model.bind(function_call={"name": "advertisement"},functions=functions)
res_key_parser = chain_key_parser.invoke({"goods": "摩托车"})
print(res_key_parser)
print(type(res_key_parser))

在这里插入图片描述

5.3、PydanticOutputFunctionsParser

# 调用大模型
from langchain_core.output_parsers.openai_functions import PydanticOutputFunctionsParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.utils.function_calling import convert_to_openai_function
from langchain_openai import ChatOpenAI
import osfrom pydantic import BaseModel,Fieldos.environ["OPENAI_API_KEY"] = "xxxxxxxxxxxxx"  # 将个人token替换到这个位置
os.environ["OPENAI_API_BASE"] = "xxxxxxxxxxxxx"class Advertisement(BaseModel):origin_str: str = Field(description="原始输入的值")trans_str: str = Field(description="翻译后的值")# 自定义函数
functions = [{"name": "advertisement","description": "一段广告词","parameters": {"type": "object","properties": {"goods": {"type": "string", "description": "要进行广告的产品"},"ads": {"type": "string", "description": "广告词"},},"required": ["goods", "ads"],},}
]model = ChatOpenAI()
# 提示词模板
prompt = ChatPromptTemplate.from_template("出给一个关于 {goods} 的广告宣传语")
# 定义解析器
parser = PydanticOutputFunctionsParser(pydantic_schema=Advertisement)
# 调用函数
openai_functions = [convert_to_openai_function(Advertisement)]
# 创建调用链
chain_pydantic_parser = prompt | model.bind(functions=openai_functions) | parser
# 输出大模型执行结果
res_pydantic_parser = chain_pydantic_parser.invoke({"goods": "饮料"})
print(res_pydantic_parser)
print(type(res_pydantic_parser))

5.4、PydanticAttrOutputFunctionsParser

# 调用大模型
from langchain_core.output_parsers.openai_functions import PydanticOutputFunctionsParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.utils.function_calling import convert_to_openai_function
from langchain_openai import ChatOpenAI
import osfrom pydantic import BaseModel,Fieldos.environ["OPENAI_API_KEY"] = "xxxxxxxxxxxxx"  # 将个人token替换到这个位置
os.environ["OPENAI_API_BASE"] = "xxxxxxxxxxxxx"class Advertisement(BaseModel):origin_str: str = Field(description="原始输入的值")trans_str: str = Field(description="翻译后的值")# 自定义函数
functions = [{"name": "advertisement","description": "一段广告词","parameters": {"type": "object","properties": {"goods": {"type": "string", "description": "要进行广告的产品"},"ads": {"type": "string", "description": "广告词"},},"required": ["goods", "ads"],},}
]model = ChatOpenAI()
# 提示词模板
prompt = ChatPromptTemplate.from_template("出给一个关于 {goods} 的广告宣传语")print('---------------------------------PydanticAttrOutputFunctionsParser--------------------------------')from langchain_core.output_parsers.openai_functions import PydanticAttrOutputFunctionsParser# 定义 pydantic 参数输出解析器,传入 Pydantic 模型和需要输出的属性名
parser = PydanticAttrOutputFunctionsParser(pydantic_schema=Advertisement, attr_name='trans_str')
# 调用函数
openai_functions = [convert_to_openai_function(Advertisement)]
# 创建调用链 包含输出解析器
chain_pydantic_parser = prompt | model.bind(functions=openai_functions) | parser
# 传入参数执行
res_pydantic_parser = chain_pydantic_parser.invoke({"goods": "饮料"})
print(res_pydantic_parser)
print(type(res_pydantic_parser))

在这里插入图片描述

http://www.bjxfkj.com.cn/article/110062.html

相关文章:

  • 网站怎样做的南京工商注册核名查询系统
  • 做么自己做一个网站网站开发需要哪些硬件
  • 用html做的美食网站深圳网站制作必选祥奔科技
  • 网站运营与管理实验报告化妆品 东莞网站建设
  • 网站开发自学网国外外贸网站有哪些
  • vs做asp网站云南互联网公司
  • 网站做编辑湖州网站建设培训
  • 大连企业公司网站建设天津模板做网站
  • 宝安网站建设公司968软件平台架构
  • 北京网站制作网站黄页污水
  • 网站建设招聘条件哈尔滨网页制作公司电话
  • 网站维护知识中英文微信网站建设
  • 私人设计网站推荐珠海高端网站建设
  • 做系统去哪个网站好个人网站首页设计
  • 做网站被捉东莞seo优化联系电话
  • 网站做宣传域名什么好社交网站开发教程
  • 做网站在什么地方发帖子呢企业信息查询表去哪里查
  • 网站后台图片传不上去怎么办苏州外贸营销网站建设
  • 建立个人网站要钱吗.net开发手机网站
  • 网站开发人员绩效如何计算网站手机端排名怎么做
  • 毕设做网站类型济南网站建设公司-远大云.
  • 宁夏水利厅建设管理处网站aws注册wordpress
  • 南京本地网站深圳推广平台有哪些
  • php做网站的好处东莞网站设计找谁
  • 淘宝店铺网站策划宜春做网站的公司哪家好
  • 网站做好了 怎么做解析安平县做百度网站电话
  • 宿州网站开发建设中国社区建设展示中心网站
  • 衡阳网站建设怎样收费中山建网站公司
  • 富阳建立网站的北京文化传媒有限公司网站建设
  • 云南网站优化排名织梦iis7搭建网站