本教程假设你已经熟悉以下概念:
不同提供商的 LLM(大型语言模型)通常根据其训练数据的不同而具有不同的优势。这也意味着某些模型在生成非 JSON 格式的输出时可能更“优秀”且更可靠。
本教程将介绍如何使用 YAML 格式来指定任意模式,并查询 LLM 以生成符合该模式的输出。
注意:请记住,大型语言模型是“有漏洞的抽象”!你需要使用具有足够能力的 LLM 来生成格式良好的 YAML。
首先,我们需要安装必要的库:
bash%pip install -qU langchain langchain-openai
接下来,设置 OpenAI 的 API 密钥:
pythonimport os
from getpass import getpass
if "OPENAI_API_KEY" not in os.environ:
os.environ["OPENAI_API_KEY"] = getpass()
我们使用 Pydantic 和 YamlOutputParser
来定义数据模型,并为模型提供更多上下文,以便它知道应该生成什么类型的 YAML。
pythonfrom langchain.output_parsers import YamlOutputParser
from langchain_core.prompts import PromptTemplate
from langchain_openai import ChatOpenAI
from pydantic import BaseModel, Field
# 定义你期望的数据结构
class Joke(BaseModel):
setup: str = Field(description="笑话的开头问题")
punchline: str = Field(description="笑话的结尾答案")
# 初始化模型
model = ChatOpenAI(temperature=0)
# 定义一个查询,用于提示语言模型填充数据结构
joke_query = "给我讲个笑话。"
# 设置解析器,并将指令注入到提示模板中
parser = YamlOutputParser(pydantic_object=Joke)
prompt = PromptTemplate(
template="回答用户查询。\n{format_instructions}\n{query}\n",
input_variables=["query"],
partial_variables={"format_instructions": parser.get_format_instructions()},
)
# 将提示、模型和解析器串联在一起
chain = prompt | model | parser
# 调用链并获取结果
result = chain.invoke({"query": joke_query})
print(result)
我们可以查看解析器的 format_instructions
,这些指令会被添加到提示中:
pythonprint(parser.get_format_instructions())
输出将包含如何格式化 YAML 的详细说明,确保输出符合指定的 JSON 模式。
假设模型返回了以下 YAML 格式的笑话:
yamlsetup: "为什么自行车找不到回家的路?"
punchline: "因为它失去了方向感!"
解析器会自动解析 YAML 输出并创建一个包含数据的 Pydantic 模型。
现在你已经学会了如何提示模型返回 YAML。接下来,你可以查看更广泛的指南,了解其他相关的结构化输出技术。
通过本教程,你学会了如何使用 YamlOutputParser
来解析 LLM 生成的 YAML 输出,并将其转换为 Pydantic 模型。这种方法在处理需要结构化输出的场景时非常有用,尤其是在 JSON 格式不适用的情况下。
希望这篇教程对你有所帮助!如果你有任何问题或需要进一步的帮助,请随时提问。
本文作者:yowayimono
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!