大语言模型输出的一般是文本格式,但是很多时候,我们可能需要大模型按照我们要求的格式进行格式化输出,比如输出XML、JSON、逗号分隔符的列表等,OutputParser可以帮助我们获取结构化的信息。
逗号分隔符的列表输出解析器(CommaSeparatedListOutputParser)
from langchain.output_parsers import CommaSeparatedListOutputParser
from langchain_core.prompts import PromptTemplate
from langchain_community.llms import Tongyi
output_parser = CommaSeparatedListOutputParser()
format_instructions = output_parser.get_format_instructions()
prompt = PromptTemplate(
template = "请列除5个{subject}.\n{format_instructions}",
input_variables = ["subject"],
partial_variables={"format_instructions": format_instructions},
)
llm = Tongyi()
input = prompt.format(subject="世界名曲")
output = llm.invoke(input)
output_p = output_parser.parse(output)
print(output_p)
日期时间输出解析器
from langchain.output_parsers import DatetimeOutputParser
from langchain.chains import LLMChain
from langchain_core.prompts import PromptTemplate
from langchain_community.llms import Tongyi
# 创建一个日期时间输出解析器
output_parser = DatetimeOutputParser()
template = """
Answer the users question:
{question}
{format_instructions}
"""
prompt = PromptTemplate.from_template(template,partial_variables={"format_instructions":output_parser.get_format_instructions()})
# 初始化大模型
llm = Tongyi()
# 创建一个LLMChain链
chain = LLMChain(prompt=prompt,llm =llm)
res = chain.invoke("辛亥革命是哪一年?")
# 最后还要调用parse方法对日期进行格式化输出
res_parser = output_parser.parse(res["text"])
print(res_parser)
结构化输出解析器
from langchain.output_parsers import StructuredOutputParser, ResponseSchema
from langchain_community.llms import Tongyi
from langchain_core.prompts import PromptTemplate
from langchain.chains import LLMChain
response_schemas = [
ResponseSchema(name="name", description="学生的姓名"),
ResponseSchema(name="age", description="学生的年龄")
]
output_parser = StructuredOutputParser.from_response_schemas(response_schemas)
format_instructions = output_parser.get_format_instructions()
prompt = PromptTemplate(
template="回答下面问题,注意,请不要在回复中附带其他内容,只需要返回结构化的信息。\n{format_instructions}\n{question}",
input_variables=["question"],
partial_variables={"format_instructions": format_instructions},
)
# 创建大模型
llm = Tongyi()
chain = LLMChain(prompt=prompt,llm =llm)
output = chain.invoke({"question":"请给我一个非常大众的中国女孩的名字?"})
print(output_parser.parse(output["text"]))