03-LangChain 核心模块学习 输出解析器 Output Parser

25 阅读2分钟

输出解析器 Output Parser

将大语言模型的输出 进行规范化的整理 结构化的内容 方便传给agent进行调用

语言模型的输出是文本 希望获得比纯文本 更结构化的信息 。这就是输出解析器的价值所在。

输出解析器是帮助结构化语言模型响应的类。它们必须实现两种主要方法:

  • "获取格式指令":返回一个包含有关如何格式化语言模型输出的字符串的方法。
  • "解析":接受一个字符串(假设为来自语言模型的响应),并将其解析成某种结构。

列表解析 List Parser

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

代码示例

import os
from langchain.output_parsers import CommaSeparatedListOutputParser
from langchain.prompts import PromptTemplate, ChatPromptTemplate, HumanMessagePromptTemplate
from langchain_openai import OpenAI

api_key = 'sk-xxx'
os.environ["OPENAI_API_KEY"] = api_key

serp_api = 'xxx'
os.environ["SERPAPI_API_KEY"] = serp_api

# 创建一个输出解析器,用于处理带逗号分隔的列表输出
output_parser = CommaSeparatedListOutputParser()

# 获取格式化指令,该指令告诉模型如何格式化其输出
format_instructions = output_parser.get_format_instructions()

# 创建一个提示模板,它会基于给定的模板和变量来生成提示
prompt = PromptTemplate(
    template="List five {subject}.\n{format_instructions}",  # 模板内容
    input_variables=["subject"],  # 输入变量
    partial_variables={"format_instructions": format_instructions}  # 预定义的变量,这里我们传入格式化指令
)

# 使用提示模板和给定的主题来格式化输入
_input = prompt.format(subject="ice cream flavors")

llm = OpenAI(temperature=0)

output = llm(_input)
result = output_parser.parse(output)
print(result)
# 输出
# ['1. Chocolate\n2. Vanilla\n3. Strawberry\n4. Mint chocolate chip\n5. Cookies and cream']

format_instructions 是 预定提示词 加入到模版的末尾, 最终也是作为prompt 去调用大模型

最佳实践 用这些预定的提示词(提示词 黑魔法 langchain认为是好用的提示词) 可以获取更好的效果

format_instructions 内容

Your response should be a list of comma separated values, eg: `foo, bar, baz`

日期解析 Datatime Parser

当您想要返回一个具体的日期时间,可以使用此日期解析器。

代码示例

import os
from langchain.prompts import PromptTemplate
from langchain.output_parsers import DatetimeOutputParser
import os
from langchain.output_parsers import CommaSeparatedListOutputParser
from langchain.prompts import PromptTemplate, ChatPromptTemplate, HumanMessagePromptTemplate
from langchain_openai import OpenAI
from langchain.chains import LLMChain

api_key = 'sk-xx'
os.environ["OPENAI_API_KEY"] = api_key

serp_api = 'xxx'
os.environ["SERPAPI_API_KEY"] = serp_api

output_parser = DatetimeOutputParser()

# 模版
template = """Answer the users question:

{question}

{format_instructions}"""

# 预定义提示词
format_instructions = output_parser.get_format_instructions()

# prompt提示词
prompt = PromptTemplate.from_template(
    template,
    partial_variables={"format_instructions": format_instructions},
)

chain = LLMChain(prompt=prompt, llm=OpenAI())
output = chain.run("around when was bitcoin founded?")
result = output_parser.parse(output)

print(result)
# 输出内容2009-01-03 18:15:05

format_instructions 内容

Write a datetime string that matches the following pattern: '%Y-%m-%dT%H:%M:%S.%fZ'.

Examples: 0650-08-12T15:53:21.102036Z, 1498-01-09T19:27:37.516319Z, 0920-11-12T18:11:33.585922Z

Return ONLY this string, no other words!