Day 21|智能体如何处理非结构化数据:让 Agent 在“混乱世界”中保持稳定执行

119 阅读5分钟

真正的智能体工程不是“生成文本”, 而是让 Agent 在混乱、不完整、噪声巨大的真实环境中正确行动。

在现实业务里,智能体面临的数据往往是:

  • 长文档
  • 格式乱的 PDF
  • 网页文本
  • 用户的碎片化自然语言
  • 层级复杂的对话历史
  • 带噪声的 OCR
  • 含截图、代码块、表格的混合内容

这些数据 无法直接喂给模型处理。 否则模型会:

  • 跑偏
  • 忘记上下文
  • 忽略重点
  • 无法结构化
  • 抽取错误
  • 工作流直接中断

所以,任何生产级智能体必须具备: 非结构化数据处理(Unstructured Data Handling)能力。

今天把这套体系讲透,并给你一套可直接落地的“数据预处理 → 独立技能化”的全流程方法。

  1. 为什么智能体必须处理非结构化数据?

只要智能体接触真实业务,就一定要处理“脏数据”:

法律PDF 合同、扫描件
企业周报、日报、会议纪要
媒体抓取的网页、公众号文章
运维日志(log)、监控输出
运营评论、用户反馈
产品碎片化需求

这些内容的特点:

  • 内容冗长
  • 噪声巨大
  • 结构不清晰
  • 不适合直接推理
  • 需要先清洗、抽取、分段

智能体如果没有预处理,会直接“死”在数据处理环节。

2. 非结构化数据分四类:每类处理方式不同

① 文本(Text)

特点:

  • 长度不固定
  • 内容无结构
  • 部分格式混乱
  • 可以直接 chunk 化处理

处理方法:

  • 分段(chunking)
  • 文本清洗
  • 标题抽取
  • 内容摘要
  • 语义向量化
② PDF / Word / 图片 OCR

特点:

  • 富文本格式
  • 表格、图片、脚注、页眉
  • 结构混乱
  • OCR 可能有识别错误

处理方法:

  • 解析 PDF → 纯文本
  • 清洗格式
  • 识别大标题、小标题
  • 修复 OCR 错误
  • 表格抽取(tabular extraction)
③ 对话(Conversation)

特点:

  • 多轮对话
  • 上下文强依赖
  • 嘈杂、零散
  • 隐含意图强

处理方法:

  • 角色分离
  • 意图抽取
  • 上下文压缩
  • 保留关键 facts
  • 会话归一化(Normalize)
④ 网页(HTML)

特点:

  • 大量 HTML 噪声
  • 广告、导航、脚本
  • 图片/视频混杂
  • 逻辑结构抽取困难

处理方法:

  • 提取正文(正文抽取)
  • 清洗 HTML 标签
  • 抽取段落、标题、列表
  • 元数据识别

3. 非结构化数据处理的三层架构(核心)

智能体的完整处理链路是:

[1] 输入层(Input Layer)
      ↓
[2] 清洗层(Cleaning Layer)
      ↓
[3] 结构化层(Structuring Layer)
      ↓
[4] 推理层(LLM Reasoning Layer)

下面每层给你具体可实现的工程方法。

4. 输入层(Input Layer):让数据“可读取”

这一层的目标:

  • 不管什么格式,统一为可处理的中间格式:Text + Metadata。

例如 PDF:

input.pdf → extract_text + extract_title + extract_toc

网页:

html → clean_html → extract_main_content

对话:

chat_logs → timestamp + role + message

最终,所有内容都需要变成统一格式:

{
  "type": "document",
  "content": "...纯文本或段落结构...",
  "meta": {
    "source": "pdf",
    "length": 32000,
    "title": "..."
  }
}

5. 清洗层(Cleaning Layer):清除噪声 / 修复格式

数据清洗的目标:

  • 去噪
  • 修复断句
  • 去除无关信息
  • 统一字符格式

你应该为智能体设计一个 清洗技能(CleanSkill)

CleanSkill 输入:
{
  "text": "原始内容"
}
CleanSkill 输出:
{
  "clean_text": "清洗后的文本"
}
建议清洗内容包括:
  • 去掉脚本、广告、模板文本
  • 去掉图片替代字符([image.gif])
  • 修复 PDF 换行问题
  • 去掉多余空行
  • 标准化标点

清洗后,模型输出质量会提升 50%+

6. 结构化层(Structuring Layer):将文本转为“可用格式”

结构化是整个流程的核心。

常见结构化方式:

① 抽取段落(Paragraph Extraction)

将长内容拆成:

[  {"title": "背景", "content": "..."},  {"title": "分析", "content": "..."},  ...]
② 抽取关键信息(Information Extraction)

比如合同类文档:

{
  "party_a": "...",
  "party_b": "...",
  "effective_date": "...",
  "price": "..."
}
③ 生成层级结构
 (Tree Structure)
比如一本在线文章:
1. 背景
   1.1 问题
   1.2 目标
2. 方法
3. 结论

让 Agent 能按结构理解。

④ 小结归纳(Summarization)

对每段生成:

{
  "summary": "...",
  "keywords": ["a","b","c"]
}

便于后续 LLM 推理。

⑤ chunking(分段)

解决:

  • 超长文本 → token 超限
  • 长度超过模型能力

建议:

  • 每段 500–1000 token
  • 重叠 50–100 token(避免断裂)

7. 推理层(Reasoning Layer):将结构化内容用于任务执行

当结构化流程完成,LLM 才能:

  • 判断内容要点
  • 对信息做推理
  • 自动生成内容
  • 分段执行任务
  • 多步工作流正常运转

例如在一份 PDF 合同上执行任务:

[输入] PDF → 
[清洗] CleanSkill → 
[结构] ExtractSkill → 
[推理] AnalyzeSkill → 
[总结] SummarySkill → 
[生成] ReportSkill

这就是一个完整的 Agent 工作流。

8. 生产级智能体的必备非结构化技能(6 个)

这 6 个技能强烈建议你加入你的智能体系统:

技能功能
CleanSkill文本清洗
ChunkSkill分段
SummarySkill小结
InfoExtractSkill信息抽取
StructureSkill结构化(树状文档)
ValidatorSkill校验提取结果

这 6 個技能可以通用于任何 AI 项目。

9. 非结构化数据的错误处理

Agent 常见错误:

  • 提取错字段
  • 丢掉段落
  • 忽略表格
  • 中途跑偏
  • 结构化结果不符合 schema

解决方法:

① 每一步都加校验

使用 ValidatorSkill:

{
  "valid": true/false,
  "error": "...",
  "fix_suggestion": "..."
}
② 出错就回退到上一步(rollback)

借助状态机实现回滚逻辑。

③ 长内容分段处理,避免乱码、丢内容

10. 重点总结

  • ✔ 所有真实内容都是非结构化的
  • ✔ 智能体必须具备 非结构化处理 → 结构化 → 推理 的完整能力
  • ✔ 统一中间格式,是整个系统成功的基础
  • ✔ 清洗、分段、结构化是最重要的 3 个步骤
  • ✔ 生产级智能体必须拥有六大数据处理技能
  • ✔ 多步任务必须 □ 清洗 → □ 分段 → □ 结构化 → □ 推理