LLMOutputParser
630 字约 2 分钟
2026-01-20
📘 概述
LLMOutputParser 是一个结构化数据解析算子,专门用于解析大语言模型(LLM)生成的带有特定 XML 标签的响应文本。
该算子的核心功能是:
- 标签解析:识别并提取
<chapter>、<qa_pair>、<question>、<answer>、<solution>和<label>等标签中的内容。 - ID 还原:将 LLM 返回的数字 ID 映射回原始的文本内容或图片标签(基于
MinerU2LLMInputOperator生成的转换布局文件)。 - 资源同步:自动将关联的图片从中间目录复制到最终输出目录,并修正图片引用路径。
__init__ 函数
def __init__(self,
output_dir: str,
intermediate_dir: str = "intermediate"
)init 参数说明
| 参数名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| output_dir | str | 必需 | 结构化数据及图片的最终输出根目录。 |
| intermediate_dir | str | "intermediate" | 中间件目录,用于寻找 MinerU 处理后的原始图片资源。 |
XML 标签协议
算子预设 LLM 会按照以下结构返回数据:
<chapter>: 章节区块,内含标题和多个 QA 对。<title>: 章节标题对应的 ID。<qa_pair>: 单个问答对区块。<question>/<solution>: 对应内容的 ID 列表(如1, 2, 5)。<answer>: 从 solution 中提取出的答案,是具体内容,不是ID<label>: 题目类型或标签信息,是真实序号,不是ID。
run 函数
def run(self,
storage: DataFlowStorage,
input_response_path_key: str,
input_converted_layout_path_key: str,
input_name_key: str,
output_qalist_path_key: str
)执行解析逻辑:读取 LLM 响应,对照布局 JSON 文件还原内容,保存为 JSONL 格式。
参数说明
| 名称 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| storage | DataFlowStorage | 必需 | 数据流存储实例。 |
| input_response_path_key | str | 必需 | LLM 原始响应文件的存储路径列名。 |
| input_converted_layout_path_key | str | 必需 | 转换后布局文件(_converted.json)的路径列名。 |
| input_name_key | str | 必需 | 用于区分任务的名称列,决定了输出文件夹的命名。 |
| output_qalist_path_key | str | 必需 | 输出 JSONL 文件的路径列名。 |
🧠 示例逻辑
1. ID 还原过程
假设 LLM 返回:<question>1, 3</question> 算子会查找布局 JSON 中 id 为 1 和 3 的项:
- 如果
id: 1是文本 "什么是 AI?",id: 3是图片path/to/img.png。 - 还原后的内容为:
什么是 AI?\n。
2. 输出文件结构
执行后,cache_path 下的目录结构如下:
cache_path/
└── {name}/
├── extracted_questions.jsonl # 结构化数据
└── vqa_images/ # 自动同步过来的图片
├── img1.png
└── ...3. JSONL 输出示例
{
"question": "请看下图并分析:\n",
"answer": "这是解析后的答案文本",
"solution": "详细的解题步骤...",
"label": "1",
"chapter_title": "第一章 基础概论"
}
