概述
- 创建一个基于提示的抽取活动。
- 配置 LLM 连接。
- 编写有效的抽取提示。
- 定义输出格式和结构。
- 应用严格性和验证规则。
- 测试并优化抽取效果。
- 从发票中抽取供应商信息
- 文档表头级数据采集
- 半结构化文档处理
- 版式多变的文档
先决条件
- 对 ABBYY Vantage Advanced Designer 的访问权限。
- 已配置的 LLM 连接。请参阅如何配置 LLM 连接。
- 一个已加载示例文档的文档技能(Document Skill)。
- 对 JSON 结构的基本了解。
- 您希望提取的数据的字段定义。
了解基于提示的抽取
什么是基于提示的提取?
- Role:LLM 应该扮演的角色(例如,“data extraction model”)。
- Instructions:如何提取和格式化数据。
- Output Structure:结果所需的精确 JSON 格式。
- Rules:处理不明确或缺失数据的规则。
优点
- 无需训练数据:只需进行提示工程即可使用。
- 灵活:可以轻松添加或修改字段。
- 处理差异:LLM 可以理解不同的文档格式。
- 快速设置:比训练传统机器学习模型更快。
- 自然语言:可以直接用英语编写指令。
限制
- 成本:每次提取都会发起 LLM API 调用。
- 速度:对于简单文档,比传统提取方式更慢。
- 一致性:多次运行之间的结果可能会略有差异。
- 上下文限制:非常长的文档可能需要特殊处理。
步骤 1:添加基于提示的活动
- 在 ABBYY Vantage Advanced Designer 中打开您的文档技能。
- 在左侧面板中找到 EXTRACT FROM TEXT (NLP)。
- 找到并单击 Prompt-based。

- 该活动会出现在您的工作流画布中。
- 将其连接在输入活动和输出活动之间。
步骤 2:配置 LLM 连接
- 在工作流中选择基于提示的活动。
- 在右侧的 Activity Properties 面板中,找到 LLM Connection。
- 单击下拉菜单。

- 从列表中选择你已配置好的 LLM 连接。
- 示例:
Nick-ChatGPT、Microsoft Foundry、Production GPT-4
- 示例:
- 确认已选中了正确的连接。
步骤 3:定义输出字段
- 在 Activity Properties 面板中,找到 Output 部分。
- 您将看到字段组和字段的分层列表。
- 在此示例中,我们将提取供应商信息:
- 供应商
- 名称
- 地址
- TaxID
- 账户号码
- Sort Code
- IBAN
- BIC_SWIFT
- 业务单元
- 名称
- 地址
- 发票日期
- 发票号码
- 合计
- 净金额
- 供应商

- 单击 Activity Editor 按钮开始配置提示词。
步骤 4:编写角色定义
- 在 Activity Editor 中,你会看到 Prompt Text 界面
- 从 ROLE 部分开始:

- 要具体:“data extraction model” 告诉 LLM 它的用途。
- 定义范围:“vendor-related fields” 限定要提取的内容(与供应商相关的字段)。
- 设定预期:“value text verbatim” 要求按原文保留文本值,防止重新格式化。
- 处理缺失数据:“Omit any field that is not clearly present”(省略任何不明显存在的字段)。
- 保持角色指令清晰简洁。
- 使用祈使句式(“Extract”, “Do not infer”)。
- 明确说明不应执行的操作。
- 定义如何处理边界情况。
步骤 5:定义输出格式
- 在 ROLE 部分下方添加 OUTPUT FORMAT 标题。
- 定义 JSON 结构:

- FieldName:必须与您的字段定义完全一致(例如:
Vendor.Name)。 - Text:以 string 类型提取的值。
- Line:该值在文档中出现的、从 0 开始计数的行索引。
- 使用 Output 配置中定义的精确字段名称。
- 包含所有字段,即使其中某些可能为空。
- 结构必须是有效的 JSON。
- 行号有助于进行验证和故障排查。
步骤 6:添加字段专用的提取规则

- 识别模式:为每个字段列出替代标签。
- 格式规范:描述要提取的精确格式。
- 位置提示:通常在什么位置可以找到该数据。
- 排除项:不应提取的内容。
- 为规则编号以提高清晰度。
- 提供多种标签写法。
- 指明数据归属(供应商方 vs. 客户方)。
- 在括号中包含格式示例。
- 明确说明相关字段(例如:“忽略 IBAN —— 它有自己的字段”)。
步骤 7:应用严格度规则

- 防止幻觉:LLM 可能生成看似合理但错误的数据。
- 确保一致性:清晰的规则可减少多次运行之间的差异。
- 处理缺失数据:明确定义在未找到字段时应如何处理。
- 维护数据完整性:逐字提取可保留原始格式。
- 绝不生成文档中不存在的数据。
- 对不确定的提取结果宁可省略也不要猜测。
- 如果未找到任何字段,则返回空结构。
- 与字段名称进行完全精确匹配。
- 保留原始文本格式。
步骤 8:选择文档格式
- 在 Activity Editor 中,找到 Prompt 下拉列表。
- 你会看到将文档提供给 LLM 的不同方式。

- PDF:原始 PDF 文件
- 适用场景:版式至关重要的文档
- 注意事项:文件体积较大,且某些 LLM 对 PDF 的支持有限
- Plain Text:无格式的文本提取结果
- 适用场景:简单的纯文本文档
- 注意事项:会丢失所有格式和版面信息
- Annotated Text ⭐(推荐)
- 适用场景:大多数文档类型
- 注意事项:在保持文本形式的同时保留结构
- 优点:在结构保留与处理性能之间取得最佳平衡
- Formatted Text:保留基本格式的文本
- 适用场景:对部分格式有要求的文档
- 注意事项:介于 Plain Text 和 Annotated Text 之间的折中方案
- 选择 Annotated Text 以获得最佳效果
步骤 9:测试提取流程
运行 Activity
- 关闭 Activity Editor。
- 转到 All Documents 选项卡。
- 选择一个测试文档。
- 单击 Test Activity 或 Run 按钮。

- 等待 LLM 处理文档:
- 处理时间:通常为 5–30 秒,具体取决于文档复杂度。
- 在等待 API 响应时,您会看到加载指示器。
审核结果
- 界面会切换到 Predictive view。
- 查看显示提取字段的 Output 面板。
- 单击每个字段查看:
- 提取值
- 置信度(如果有)
- 文档图像中高亮显示的区域

- ✅ 所有预期字段均已填充
- ✅ 值与文档完全匹配
- ✅ 不存在幻觉生成或推断的数据
- ✅ 多行字段得到正确处理
- ✅ 缺失字段被省略(不会使用错误数据填充)
常见结果模式
步骤 10:完善你的提示词
常见问题及解决方案
- 解决方案:添加更具体的位置提示。
- 示例:“仅限供应商一侧;排除客户/买方地址”
- 解决方案:强调原样提取。
- 示例:“按打印内容精确保留数字格式(例如,‘12-34-56’)”
- 解决方案:加强严格规则。
- 示例:“绝不要生成或推断数值。如不存在则省略。”
- 解决方案:指定转义序列。
- 示例:“对于多行值,使用
\n表示换行”
- 解决方案:验证字段名称完全匹配。
- 示例:使用
Vendor.Account Number而不是AccountNumber
迭代改进流程
- 在多个文档上进行测试:不要只针对单个示例进行优化。
- 记录模式:记录哪些规则有效、哪些需要改进。
- 添加具体示例:在括号中包含格式示例。
- 调整严格程度:根据过度提取/提取不足的模式进行调整。
- 测试边界情况:尝试使用缺少字段、布局异常的文档。
优化示例
理解提取过程
基于提示的提取工作原理
- 文档转换:将您的文档转换为所选格式(推荐使用 Annotated Text)。
- 提示构建:将您的角色、输出格式、字段规则和严格性规则组合在一起。
- API 调用:通过您的连接将提示和文档发送给 LLM。
- LLM 处理:LLM 阅读文档并根据您的指令提取数据。
- JSON 响应:LLM 按指定的 JSON 格式返回结构化数据。
- 字段映射:Vantage 将 JSON 响应映射到您定义的输出字段。
- 验证:行号和置信度分数(如果提供)有助于验证准确性。
Token 使用量和成本
- 文档长度:文档越长,使用的 token 越多。
- 提示复杂度:提示越详细,消耗的 token 越多。
- 格式选择:Annotated Text 通常比 PDF 更高效。
- 字段数量:字段越多,提示越长。
- 在提示中使用简洁但清晰的语言。
- 不要重复说明。
- 删除不必要的示例。
- 考虑对相关数据进行字段分组。
最佳实践
提示词编写
- ✅ 使用清晰的祈使句(如 “Extract”、“Recognize”、“Omit”)。
- ✅ 为每个字段提供多个标签名称变体。
- ✅ 在括号中给出格式示例。
- ✅ 明确指定不应提取的内容(排除项)。
- ✅ 为规则编号,便于引用。
- ✅ 全文使用一致的术语。
- ❌ 使用含糊不清的指令(如 “get the name”)。
- ❌ 假设 LLM 了解特定领域的约定。
- ❌ 编写过长、结构复杂的句子。
- ❌ 在不同部分出现自相矛盾的说明。
- ❌ 忽略严格性相关规则。
Field 定义
- 从识别模式(替代标签)开始。
- 明确需要保留的精确格式。
- 提供位置提示(常见位置)。
- 定义数据归属(供应商 vs. 客户)。
- 说明如何处理多行值。
- 引用相关 fields 以避免混淆。
测试策略
- 从简单文档开始:先测试基础提取效果。
- 扩展到不同变体:尝试不同的版式和格式。
- 测试边界情况:字段缺失、位置异常、多处匹配等。
- 记录失败案例:保留提取失败的示例。
- 系统化地迭代:每次只更改一个因素。
性能优化
- 保持提示词简洁。
- 使用 Annotated Text 格式。
- 将每个活动中的字段数量降到最少。
- 考虑拆分复杂文档。
- 提供全面的字段规则。
- 包含格式示例。
- 添加严格的约束规则。
- 使用多样化的文档样本进行测试。
- 优化提示词长度。
- 使用高效的文档格式。
- 在合适的情况下缓存结果。
- 通过 LLM 提供商的控制面板监控 token 使用量。
故障排除
提取问题
- 检查字段名称拼写是否完全一致。
- 验证数据是否存在于所选文档格式/类型中。
- 为识别模式添加更多标签文案变体。
- 暂时降低规则严格度,查看 LLM 是否能找到数据。
- 检查文档质量是否影响 OCR/文本提取效果。
- 强化供应商侧的规格/约束说明。
- 为客户/买方数据添加明确的排除规则。
- 提供位置信息提示(例如:“文档顶部”、“开票方区域”)。
- 包含正确与错误提取结果的示例。
- 明确指定换行转义序列格式(
\n)。 - 提供正确多行输出的示例。
- 验证文档格式是否保留换行。
- 添加指令:“使用
\n保留原始换行”。
- 强调“原样输出”(verbatim)和“与打印内容完全一致”(exactly as printed)。
- 添加严格规则:“不得规范化或推断”。
- 提供保留原始格式的具体示例。
- 包含反例:“不要改为 ‘12-34-56’,保持为 ‘12 34 56’”。
性能问题
- 如果使用 PDF,请切换到 Annotated Text 格式。
- 在不丢失关键信息的前提下简化提示词。
- 如果图像分辨率非常高,降低文档分辨率。
- 检查 LLM 提供商的服务状态和速率限制。
- 对于简单文档,考虑使用更快速的模型。
- 提高规则的严格程度。
- 将说明写得更具体、更明确。
- 添加更多格式示例。
- 降低提示词复杂度,减少主观理解空间。
- 使用更高的温度(temperature)设置进行测试(如果连接中可用)。
- 优化提示词长度。
- 使用 Annotated Text 替代 PDF。
- 在非高峰时段以批处理方式处理文档。
- 对于简单文档,考虑使用更小/更便宜的模型。
- 在 LLM 提供商的控制台中监控并设置预算警报。
高级技巧
条件提取
多语言支持
验证规则
字段关系
限制和注意事项
当前功能
- ✅ 页眉级字段提取
- ✅ 单行和多行值
- ✅ 每个文档可包含多个字段
- ✅ 条件提取逻辑
- ✅ 多语言文档
- ✅ 多变的文档布局
- ⚠️ 表格提取(取决于具体实现)
- ⚠️ 嵌套的复杂结构
- ⚠️ 超大文档(令牌/token 限制)
- ⚠️ 实时处理(API 延迟)
- ⚠️ 对结果完全确定性的保证
何时使用基于提示的提取
- 布局多变的文档
- 半结构化文档
- 快速原型设计和测试
- 小到中等规模的文档处理量
- 无法获得训练数据的场景
- 多语言文档处理
- 大规模生产环境(传统机器学习可能更快)
- 高度结构化的表单(基于模板的提取)
- 对成本敏感的应用(传统方法可能更便宜)
- 对延迟敏感的应用(LLM API 存在网络延迟)
- 需要离线处理的场景(传统方法不需要互联网)
与文档技能集成
使用提取的数据
- 验证活动:对提取的值应用业务规则。
- 脚本活动:处理或转换提取的数据。
- 导出活动:将数据发送到外部系统。
- 审核界面:对提取字段进行人工核查。
与其他活动配合使用
字段映射
"FieldName": "Vendor.Name"→ 映射到输出字段Vendor.Name。- 字段的层级结构会在输出结构中保留。
- 行号有助于进行验证和排查问题。
总结
- ✅ 创建了基于提示词的提取活动。
- ✅ 配置了 LLM 连接。
- ✅ 编写了包含角色、格式和规则的完整提取提示词。
- ✅ 选择了最优的文档格式(Annotated Text)。
- ✅ 应用了用于保证数据质量的严格规则。
- ✅ 测试了提取并审核了结果。
- ✅ 学习了提示词工程的最佳实践。
- 基于提示词的提取通过自然语言指令来工作。
- Annotated Text 格式能够提供最佳结果。
- 清晰、具体的提示词可以带来一致的提取效果。
- 严格规则可以防止幻觉并保持数据质量。
- 通过迭代测试和优化可以持续提升准确性。
后续步骤
- 使用多样化文档进行测试:在不同版式和变体上进行验证。
- 优化你的提示语:根据结果持续改进。
- 监控成本:在你的 LLM 提供商控制台中跟踪令牌使用量。
- 优化性能:针对速度和准确性微调提示语。
- 探索表格提取:尝试提取明细项(如果支持)。
- 集成到工作流中:与其他步骤组合以实现端到端处理。
其他资源
- ABBYY Vantage Advanced Designer 文档: https://docs.abbyy.com
- LLM 连接设置指南: 如何配置 LLM 连接。
- 提示工程最佳实践: 请参阅您所使用的 LLM 提供商的文档。
- 支持: 如需技术支持,请联系 ABBYY 支持。
