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

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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值