欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 手游 > LangChain——CSV_时间_枚举_Json_修复_重试解析器

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

2024/11/29 22:17:07 来源:https://blog.csdn.net/cancer_s/article/details/144032295  浏览:    关键词: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 EnumOutputParserfrom 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 ChatOpenAIpromptTemplate = 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 Listfrom 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 | parserchain.invoke({"query": query})

修复输出解析器

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

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

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

from langchain.output_parsers import OutputFixingParsernew_parser = OutputFixingParser.from_llm(parser=parser, llm=chat)

重试解析器

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

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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com