从XML到结构化数据:如何利用XMLOutputParser解析XML输出

132 阅读2分钟

从XML到结构化数据:如何利用XMLOutputParser解析XML输出

引言

在与大型语言模型(LLM)交互过程中,解析输出格式是一个关键步骤。虽然JSON是一种常见的结构化数据格式,但在某些情况下,XML可能更为适合。本文将介绍如何使用XMLOutputParser解析XML输出,并将其转化为可用的Python数据结构。我们将使用Anthropic的Claude-2模型作为例子进行演示,并结合实际代码示例帮助读者掌握这一过程。

主要内容

1. 安装必要的库

在开始之前,确保安装了所需的Python库:

%pip install -qU langchain langchain-anthropic

2. 设置API密钥

由于网络限制或API访问限制,建议使用API代理服务以提高访问稳定性。例如,可以使用以下代码设置API密钥:

import os
from getpass import getpass

os.environ["ANTHROPIC_API_KEY"] = getpass()

3. 利用模型生成XML输出

我们使用ChatAnthropicPromptTemplate来生成XML格式的电影列表。以下是一个简单的请求示例:

from langchain_anthropic import ChatAnthropic
from langchain_core.output_parsers import XMLOutputParser
from langchain_core.prompts import PromptTemplate

model = ChatAnthropic(model="claude-2.1", max_tokens_to_sample=512, temperature=0.1)

actor_query = "Generate the shortened filmography for Tom Hanks."

output = model.invoke(
    f"""{actor_query}
    Please enclose the movies in <movie></movie> tags"""
)

print(output.content)

4. 解析XML输出

使用XMLOutputParser将生成的XML转换为Python字典:

parser = XMLOutputParser()

# 使用默认格式指令
parser.get_format_instructions()

prompt = PromptTemplate(
    template="""{query}\n{format_instructions}""",
    input_variables=["query"],
    partial_variables={"format_instructions": parser.get_format_instructions()},
)

chain = prompt | model | parser

output = chain.invoke({"query": actor_query})
print(output)

代码示例

完全的代码示例如下:

from langchain_anthropic import ChatAnthropic
from langchain_core.output_parsers import XMLOutputParser
from langchain_core.prompts import PromptTemplate

# 初始化模型
model = ChatAnthropic(model="claude-2.1", max_tokens_to_sample=512, temperature=0.1)

# 设置查询
actor_query = "Generate the shortened filmography for Tom Hanks."

# 初始化输出解析器
parser = XMLOutputParser()

# 创建提示模板
prompt = PromptTemplate(
    template="""{query}\n{format_instructions}""",
    input_variables=["query"],
    partial_variables={"format_instructions": parser.get_format_instructions()},
)

# 链接提示模板、模型和解析器
chain = prompt | model | parser

# 调用链获取输出
output = chain.invoke({"query": actor_query})

# 打印输出
print(output)

常见问题和解决方案

  • XML格式不正确:确保在提示中明确指定标签结构,并在使用XMLOutputParser时初始化正确的标签。
  • 网络访问受限:考虑使用API代理服务来稳定API调用,特别是在国内环境中。

总结和进一步学习资源

通过这篇文章,我们了解到如何利用XMLOutputParser来解析大型语言模型的XML输出,并将其转换为更为易用的Python数据格式。进一步的学习可以参照Langchain的官方文档和相关的结构化输出技术指南。

参考资料

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

---END---