首页 > 其他分享 >LangChain——CSV_时间_枚举_Json_修复_重试解析器

LangChain——CSV_时间_枚举_Json_修复_重试解析器

时间:2024-11-29 09:03:01浏览次数:11  
标签:解析器 format parser LangChain Json output import instructions

CSV解析器

当想返回以逗号分隔开的项目列表时,可以使用输出解析器。

from langchain.output_parsers import CommaSeparatedListOutputParser
from langchain.prompts import PromptTemplate
from langchain_openai import ChatOpenAI
# 分隔列表解析器(CSV解析器)
output_parser = CommaSeparatedListOutputParser()

format_instructions = "您的响应应该是csv格式的逗号分隔值的列表,例如:`内容1, 内容2, 内容3`"
prompt = PromptTemplate(
    template="{format_instructions}\n请列出五个 {subject}.",
    input_variables=["subject"],
    partial_variables={"format_instructions": format_instructions},
)
chain = prompt | chat | output_parser
chain.invoke({"subject": "冰淇淋口味"})

输出结果:
[‘香草’, ‘巧克力’, ‘草莓’, ‘抹茶’, ‘薄荷’]

日期时间解析器

此 OutputParser 可用于将 LLM 输出解析为日期时间格式。

from langchain.output_parsers import DatetimeOutputParser
# 时间解析器
output_parser = DatetimeOutputParser()
template = """回答用户的问题:

{question}

{format_instructions}"""

# 此时是英文的format_instructions 简介
format_instructions=output_parser.get_format_instructions()
# 重定义成中文
format_instructions='''响应的格式用日期时间字符串:“%Y-%m-%dT%H:%M:%S.%fZ”。

示例: 1898-05-31T06:59:40.248940Z, 1808- 10-20T01:56:09.167633Z、0226-10-17T06:18:24.192024Z

仅返回此字符串,没有其他单词!'''
prompt = PromptTemplate.from_template(
    template,
    partial_variables={"format_instructions":format_instructions },
)



chain = prompt | chat | output_parser
output = chain.invoke({"question": "比特币是什么时候创立的?"})
output

输出结果:
datetime.datetime(2009, 1, 3, 18, 15)

枚举解析器

from langchain.output_parsers.enum import EnumOutputParser

from enum import Enum
# 创建枚举对象
class Colors(Enum):
    RED = "红色"
    BROWN = "棕色"
    BLACK = "黑色"
    WHITE = "白色"
    YELLOW = "黄色"
 parser = EnumOutputParser(enum=Colors)

#%%
from langchain_core.prompts import PromptTemplate
from langchain_openai import ChatOpenAI

promptTemplate = PromptTemplate.from_template(
    """{person}的皮肤主要是什么颜色?

{instructions}"""
)

# 翻译成中文
instructions = "响应的结果请选择以下选项之一:红色、棕色、黑色、白色、黄色。不要有其他的内容"
prompt = promptTemplate.partial(instructions=instructions)
chain = prompt | chat | parser
print(chain.invoke({"person": "亚洲人"}))

输出结果:
<Colors.YELLOW: ‘黄色’>

Json解析器

from typing import List

from langchain.prompts import PromptTemplate
from langchain_core.output_parsers import JsonOutputParser
from langchain_core.pydantic_v1 import BaseModel, Field
from langchain_openai import ChatOpenAI
openai_api_key = "EMPTY"
openai_api_base = "http://127.0.0.1:1234/v1"
chat = ChatOpenAI(
    openai_api_key=openai_api_key,
    openai_api_base=openai_api_base,
    temperature=0.3,
)

# 定义您想要的数据结构。
class Book(BaseModel):
    title: str = Field(description="书名")
    author: str = Field(description="作者")
    description: str = Field(description="书的简介")


# 以及旨在提示语言模型填充数据结构的查询。
query = "请给我介绍学习中国历史的经典书籍"

# Set up a parser + inject instructions into the prompt template.
parser = JsonOutputParser(pydantic_object=Book)

# 此时是英文内容
format_instructions = parser.get_format_instructions()
# 自定义中文格式
format_instructions = '''输出应格式化为符合以下 JSON 结构的 JSON 实例。
JSON结构

{
‘title’: ‘书的标题’,
‘author’: ‘作者’,
‘description’: ‘书的简介’
}

'''
prompt = PromptTemplate(
    template="{format_instructions}\n{query}\n",
    input_variables=["query"],
    partial_variables={"format_instructions": format_instructions },
)

chain = prompt | chat | parser

chain.invoke({"query": query})

修复输出解析器

此输出解析器包装另一个输出解析器,如果第一个输出解析器失败,它会调用另一个 LLM 来修复任何错误。

但除了抛出错误之外,我们还可以做其他事情。具体来说,我们可以将格式错误的输出以及格式化的指令传递给模型并要求其修复。

对于这个例子,我们将使用上面的 Pydantic 输出解析器。如果我们传递一个不符合模式的结果,会发生以下情况:

from langchain.output_parsers import OutputFixingParser

new_parser = OutputFixingParser.from_llm(parser=parser, llm=chat)

重试解析器

虽然在某些情况下,可以仅通过查看输出来修复任何解析错误,但在其他情况下则不然。例如,输出不仅格式不正确,而且部分完整。考虑下面的例子。

from langchain.output_parsers import RetryOutputParser
retry_parser = RetryOutputParser.from_llm(parser=parser, llm=chat)

标签:解析器,format,parser,LangChain,Json,output,import,instructions
From: https://blog.csdn.net/cancer_s/article/details/144032295

相关文章

  • 知识库助手的构建之路:ChatGLM3-6B和LangChain的深度应用
    ChatGLM3-6B和LangChain构建知识库助手安装依赖库使用pip命令安装以下库:pipinstallmodelscopelangchain==0.1.7chromadb==0.5.0sentence-transformers==2.7.0unstructured==0.13.7markdown==3.0.0docx2txt==0.8pypdf==4.2.0依赖库简介:ModelScope:一个用于机......
  • 构建与计算:使用递归实现表达式的二叉树解析器
    ✅作者简介:2022年博客新星第八。热爱国学的Java后端开发者,修心和技术同步精进。......
  • MySQL for JSON
    SQLforJSONMySQL提供了强大的JSON支持,使开发者能够高效地存储和查询结构化数据。下面,我们通过实例来介绍MySQL的JSON基本用法,包括如何存储、查询、更新和操作JSON数据。1.创建一个带有JSON列的表我们可以将JSON数据类型用于表中的字段,例如:CREATETABLEusers......
  • 小白新手村冒险之“烤”json串
    JSON是什么?JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。它基于JavaScript的一个子集,但是JSON是独立于语言的文本格式,许多编程语言都可以使用JSON。JSON的用途数据交换:JSON是网络应用中最常用的数据交换格式,常用......
  • 什么是JSON,有什么特点
    什么是JSON?JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。它基于JavaScript的子集,但独立于语言,被广泛用于服务器与Web应用之间的数据传输。JSON格式最初由DouglasCrockford在2001年提出,并迅速成为互联网上......
  • Jenkin window bat批处理脚本如何请求api,获取json对象返回值数据
    需求:在jenkins的windowsbat批处理脚本中,请求一个api返回json数据,然后获取返回值的某个指定key的value直接上脚本:cdC:\workspace\jenkinxx\workspace\job-ta-webgitcheckoutmastergitpulldir::使用curl请求APIcurl-shttp://xx.xx.xx.xx:8088/testapi/getData......
  • Jenkin window bat批处理脚本如何 获取json对象返回值数据
    前两天有这么个小需求:在cmd中运行某测试工具后/请求某个api后,会返回一个json结果,其中有一个参数的值每次都变且经常要用,正常情况复制粘贴就好了,但这个值非常长,配上cmd的标记+粘贴的行为,就很酸爽了。然后就想快速提取这个值,顺着cmd的这个思路,就走上了批处理的道路。借这个机会,简......
  • fastjson
    fastjsonfastjson解析流程fastjson是用来实现json字符串和类之间的转换,也就是它可以把类转换为一个json字符串来表示,也可以把代表类的json字符串解析为类当fastjson对相应的json字符串进行解析时会调用类属性的set和get方法一个例子:packageorg.example;importcom.alibaba......
  • Jackson:Java对象和JSON字符串的转换处理库使用指南
    Jackson介绍Jackson是一个非常流行的JavaJSON处理库,它能够将Java对象与JSON字符串相互转换。Jackson工具主要用于将请求的参数(例如前端发送的JSON数据)和响应的数据(例如后端返回给前端的数据)转换成Java对象,或者将Java对象转换为JSON格式的字符串。使用示......
  • FastJson漏洞复现
    FastJson漏洞复现环境:vulhub/fastjson Fastjson是阿里巴巴公司开源的一个高性能的Java库,专门用于处理JSON数据格式。 它不仅能够将Java对象序列化为JSON格式的字符串,还能将JSON字符串反序列化为Java对象。漏洞发现出现json格式的地方,就可能使用FastJsson1.通过报错页面可......