非结构化复杂文档用户指南
本节包含有关如何在项目级别(即整体提取)、字段组级别和单个字段级别编写良好提示指令的最佳实践。
这些最佳实践专为外部 LLM 设计,但仍可能会出现 OCR 问题。即使使用精心设计的提示词,遵循所有准则也不能保证提取性能符合您的期望。
针对分类的一般建议
- 清晰简洁- 使用清晰、直接和明确的语言。避免指令过于复杂化,以免混淆模型。使用简单易懂的语言,并保持句子简短。
- 一致性 - 保持字段、字段组和指令之间的术语一致,以避免混淆。
- 提供上下文- 为模型提供相关的上下文,以理解任务的一般范围。这可能包含行业信息、文档类型或整体数据格式,因为模型需要理解其处理的任务。如果您在提示中提供更多上下文,则会增加模型始终正确预测字段的可能性。
- 迭代- 由于优化提示词是一个迭代过程,因此维护草稿及其相应结果的记录可以为将来的调整和改进提供宝贵的见解。编写提示词,进行测试,然后进行编辑。重复此过程,直到获得所需的提取数据。
- 避免负面指令- 不要输入类似于以下内容的指令: 不要遗漏文档的任何部分。而要将其替换为:确保涵盖文档的所有关键部分,例如 x、y、z。
- 避免重复性语言 - 重复性语言可能导致模型指令的冗余、混乱和模糊。
- 注意冲突信息- 确保项目、字段组和字段级别说明在要提取的信息、提取格式以及可以找到信息的位置方面不会彼此冲突。这将会混淆模型,并导致结果不一致。
- 示例强化- 只要有可能,使用正确答案的示例来强化提示指令。这些实例可以指导模型获得预期结果。
图 1. 分类示例

项目(整体提取)级别
| 最佳实践 | 详细信息 | 重要性 | 正确的示例 | 示例不正确 |
|---|---|---|---|---|
| 定义行业和文档类型 | 简要描述行业和从中提取信息的文档类型。然后,指定文档类型的关键特征和预期结构,以指导提取。 | 这为数据提取流程提供了重要的上下文。 | 说明:从经纪人对账单中提取信息,这在金融服务业中很常见。经纪人费用报表通常由几个部分组成:帐户概述、帐户摘要、帐户持有和帐户交易活动。 |
指令:从文档中提取以下字段。 Explanation :此项目说明示例对模型没有好处。它没有提供任何有助于指导模型的重要上下文或关键特征。 |
| 请指定您是否希望在一个文件中出现多次文档。 | 指令文档是否包含相同数据的多个实例,并为每个提取实例提供指导。在单个文件中可能包含多个文档的用例中,请识别唯一标识符,并将其作为字段包含在每个字段组中。 | 这将有助于后处理,实现更高效的自动化。 | 说明:单个文档文件中可能有多个代理帐户。经纪人帐户可以通过每个字段组中存在的唯一账号字段来识别。提取每个帐户的帐户信息、帐户持有和帐户活动字段组。 |
指令:从每个账户文档中提取数据的所有实例。 解释:此指令示例欠佳,因为它没有指定如何确定一种文档类型是否在文件中多次出现。 |
字段组级
| 最佳实践 | 详细信息 | 重要性 | 正确的示例 | 示例不正确 |
|---|---|---|---|---|
| 将您想要提取的相似数据点分组到字段组中。 | 将相关字段组织到逻辑组中。 | 这有助于简化提取并最大限度地减少错误。 | 账户所有者的姓名、地址和婚姻状态可以全部归入“账户所有者信息”字段组下。 |
字段组:账户信息 字段:账户持仓、交易日期、账户所有者 解释:此分组可能适用于用户只想提取这三个字段的情况。但是,如果还有其他字段,例如持有股票代码和成本基础,则此组的设计或结构将不是最有效的。 |
| 字段组上下文 | 解释每个字段组如何对文档的总体含义和用途做出贡献。 | 这有助于模型了解提取的上下文。 | 说明:本部分概述了持有经纪人报表帐户的关键详细信息,包括股票名称、购买日期、购买数量、成本基础和支付的总价。这些详细信息有助于确定经纪人报表中的当前持有量。 |
指令:从文档中提取以下字段。 Explanation :提示词说明缺少模型的上下文和详细说明。它既不解释需要提取的信息类型,也不突出其重要性。 |
| 在字段组提示词中充分利用文档内信息的位置与结构特征。 |
指定各字段数据的可能位置(如表格、页眉、正文等),为提取提供指导。 注意:如果您正在处理的信息集中出现在文档的同一部分中,请在提示词中指出该部分。 | 这有助于模型为每个字段专注于文档的正确部分。 | 指令:此部分的字段级数据最有可能在文档标题下第一页的报告标头中找到。 |
指令:从文档的开头提取信息。 解释:提示词模糊,无法为模型提供足够详细的信息,无法查看文档中的具体位置。 |
| 使用带字段的字段组的模型表 | 将字段组视为表格,每个列都作为该组中的唯一字段。这种方法是有效数据建模的关键,因为它可以确保清晰的差异化,最大限度地减少数据重复并提高数据一致性。 | 这种方法可以对数据进行逻辑结构化、系统化排列,从而提高数据查询和分析的效率。 |
字段组:客户 字段:名称、地址、电话号码 |
字段组:客户名称、客户地址、客户电话号码 字段:名称、地址、电话号码 解释:此示例不必要地将每项客户详细信息分到自己的字段组中,使数据管理变得复杂,并容易出现不一致。 |
| 创建父和子字段组 |
关系以大于 > 的符号表示。 父字段组可以拥有多个子字段组。
| 利用字段组显示文档中数据之间的关系是维护分层数据组织的最佳方式。 |
字段组:经纪对账单 字段:帐户所有者、帐户类型 字段组名称:经纪对账单 > 资产分配 字段:资产类型,例如股票、债券、现金、总资产百分比 字段组名称:经纪对账单 > 投资 字段:投资名称、拥有数量、每股价格、投资总值 |
字段组:帐户所有者 字段:名称、投资名称、帐户类型、股份数量、股票、债券 字段组:账户所有者 > 地址 字段:街道、城市、州、邮政编码 字段组:帐户所有者 > 联系信息 字段:电话号码、电子邮箱 说明:这是一个结构不当的层次结构,因为它在同一父级字段下合并了不相关的字段,并且子字段组(地址和联系信息)在逻辑上与父字段组的字段(投资名称、股票数量、股票、债券)。这可能会混淆 AI 模型,因为它不会反映文档中数据的自然组织。 |
| 对于包含多个文档的文件,请使用键字段 | 选择文档中的唯一标识符,以便您对数据进行区分。在每个字段组中包含此字段。您无需将此字段的指令从一个字段组更改为另一个字段组。 | 包含此键字段可用于在文档中分离信息,并可在处理提取数据时消除混乱。 | 字段:账户号码、社会安全号、保单编号 |
字段:日期、姓名 解释:列出的字段名称并非唯一的有效关键字段。日期和名称都可以重复。 |
字段级
| 最佳实践 | 详细信息 | 重要性 | 正确的示例 | 示例不正确 |
|---|---|---|---|---|
| 请仔细选择字段名称 | 为符合用户预期的字段选择清晰、可识别的名称。如果存在在所有文档变体中使用的通用名称,请务必将其包含在内。 | 精确的字段名称确保提取准确并减少歧义。 | 字段:事故日期 |
字段:日期 说明:“日期”是一个通用术语,不提供有关日期所指内容的任何上下文。这可能会导致数据提取不准确,因为 AI 模型可能会选取文档中出现的任何日期。 |
| 指令应明确详细 | 通过明确指令您希望模型提取的内容,来启动模型。指定要提取数据的确切格式和结构。 | 清晰详细的提示会引导模型以您预期的格式提取您所需的内容。 | 指令:从文档中提取所有顾问的列表,采用逗号分隔列表的格式,并按字母顺序排列。 |
指令:获取所有顾问 说明:提示含糊其辞,没有为模型提供有关所需结果及其格式的明确说明。这可能会导致提取的信息不一致,从而更加难以处理结果。 |
| 在指令中提供示例 | 提供示例输入和相应的预期输出,以阐明预期结果。 | 这有助于模型准确了解您正在寻找的内容。 |
说明:从文档中提取事务日期。日期应采用MM/DD/YYYY格式。例如,如果文档声明事务于 2021 年 1 月 1 日完成,则提取的日期应为 01/01/2021。如果事务日期以MM/YYYY格式声明,则提取该月的第一天。例如,如果日期显示为 05/2021,则将其提取为 05/01/2021。
|
指令:从文档中获取交易日期。 解释:上面的提示不是那么有效,因为它没有提供有关如何处理文档中找到的不同日期格式的明确说明。这种不清晰度可能会导致提取的日期不一致,从而使解释和分析数据的任务更加复杂。 |
| 每个字段说明突出一个主要概念 | 为提高准确性,请避免尝试在单个字段中提取大量连续数据,以防止提示词过载。每个字段级应专注于提取一项数据。 | 这也有助于降低后处理的难度。 |
字段 1:提取账户号码。 字段 2:提取交易日期。 字段 3:提取帐户余额。 |
指令:一起提取账号、交易日期和账户余额。 解释:提示词中包含多条指令超载,这些指令指示模型同时提取不同类型的数据。此方法可能会产生杂乱的提取结果,并使后处理变得困难。 |
字段类型级别
| 最佳实践 | 详细信息 | 重要性 | 正确的示例 | 示例不正确 |
|---|---|---|---|---|
| 选择符合目的的数据类型 |
考虑您希望提取的数据格式,并确保其与下游用例一致,以优化提取以实现自动化。
| 选择适当的数据类型可以实现准确的格式设置并简化下游处理。 |
字段名称:交易量 数据类型:数字 |
字段名称:电话号码 数据类型:数字 Explanation :对电话号码使用“数字”数据类型没有好处。尽管电话号码由数字组成,但它不是数值,这意味着您不会对其执行算术运算;最好将其描述为数字字符串。因此,使用“精确文本”数据类型将是正确的选择。 |
| 在字段类型中仅包含字段类型的特定指令。 |
在提供数据提取指令时,必须针对每个字段类型提供指令。如果有适用于特定类型所有字段的常规指令,用户可以在字段类型级别提供这些指令,以避免重复。例如,如果所有货币数量字段都需要使用美元,请在字段类型级别指定。 但是,某些数据集可能需要现有字段类型(日期、文本、货币数量等)无法覆盖的唯一字段。在这些情况下,您可以创建新的自定义字段类型。为这些新字段编写指令时,请指定数据格式,以确保提取的数据符合预期目的。这些做法提高了提取数据的准确性和一致性。 |
字段类型:日期 说明:从文档中提取与事务关联的所有日期。日期应标准化为 |
字段类型:货币数量 指令:从发票行项目表格下的“价格”列中提取项目价格。 指令:该指令专门用于从特定字段(“价格”列)提取货币数量,与任何其他基于货币数量的字段无关。 |
字段和字段类型示例
签名
当您的文档包含签名时,请确保应用以下最佳实践:
-
对“由 X 签名”使用布尔值数据类型吗?字段,即由此人签名?以及一个用于存储人名的文本字段(通常是打印出来的)。
-
如果您通常可以表格或类似表格的格式找到签名,请使用“表格”模型预处理选项。
-
失败在具有多个签名人(包括文档中的指定个人及其证人)的文档中最常见。
-
请注意以下事项的清晰描述性:
- 签名的含义是什么?
- 哪些内容不构成签名?
- 谁需要在文档上签名?
- 如何检测需要签名文档的人员?
-
考虑文档中潜在的失败用例并将其包含在说明中,如以下示例中所述:
“签名人签名”字段的说明示例
确定是否由签名者(而非证人)在文档上签名。
仅当文档由该签名人签名时,才返回 true。如果签名未经用户签名,则返回 False。
签名可能与打印的名称不同,因此只需在特定签名人姓名旁边的签名空间中查找文档中的签名或类似手写签名的内容即可。
如果通过手写添加内容修改了名称,则不应将其视为签名,只能将其视为显式签名。
签名通常会包含“签名人”一词或其变体,例如“作为契据签名”、“在……在场”等。
虚线不构成签名。
如果它是通用的“签名”字段组,且包含““签名”” 字段与签名人的姓名或职位,或两者兼而有之,则您可以在说明中添加:确保已将签名归于正确的个人。
以下是更广泛的“签名”字段组的说明示例:
签名字段组的说明示例
有关签名人员和文档状态的信息。如果文档中存在多个签名块和多个人员,则提取所有签名块和人员。
可能没有明确的签名块,协议和信函可能已由发送者签名,其中包含接受者的签名块。在这种情况下,请提取两组签名。
备注:如果在您不断努力通过指令调整来改善性能后,性能仍然不理想,请联系您的客户经理。他们可以检查您所在区域是否有任何有用的预览处理功能。
区域差异
货币数量和逗号分隔符
可能需要提示来更正默认的 LLM 行为的区域差异的一个示例是在某些国家/地区使用逗号作为小数分隔符,例如德国和印度。
以下德国收据用例的示例显示了如何解释是否存在意外格式的值:
说明示例
您正在从德国收据中提取数据。货币金额均以欧元为单位,而可能会缺少欧元符号。“,” 是所有数字的典型小数分隔符,而 “.”用于格式化较大的值。
要确定是否使用此格式,请检查值中是否存在逗号作为最终分隔符。如果不是,该数字可能是使用“,”进行格式化并使用“.”的替代格式进行格式化的设置小数位
金额通常包含两位小数(例如8,58 为 8.58 欧元,9.115,00 为 9115.00 欧元)。杂货收据中的单个行项目预计低于 100 欧元。
测试和迭代
- 为您想要提取的所有信息创建一个字段,但请勿包含任何指令。
- 选择 2 到 3 个文档的示例,并对每个文档进行预测。这些文档应反映您构建模型的文档中存在的变化。
- 将模型的提取与您的预期进行比较。对于表现较差的字段,请使用之前列出的最佳实践起草提示词,因为这将作为您的基准提示词。
- 使用先前测试过的 2-3 份样本文档重新运行预测模型,并验证数据提取性能是否得到优化。
- 如果预测不正确或不完整,请改进提示,以添加必要的详细信息,以提高模型的提取性能。如果预测与您的预期一致,请扩大文档的样本大小。逐步增加这些数字至关重要。从 2 到 3 到 10,然后移动到 20、30 等。继续操作,直到您相信模型的预测是正确的。
- 如果指令已更改,请重新评估之前查看的文档,以确保预测依然准确。
- 对模型性能感到满意后,请重新访问第一个文档并开始标注。至少标注 10 个文档,以便通过 “度量” 选项卡获取有重要的字段性能指标。此功能使您能够评估整个项目和字段级别的提取性能。
- 监控性能指标,以了解大规模提示词的调整情况。提示迭代流程应主要在字段级别进行,在这里的调整将对性能较差的特定字段产生更有针对性和更直接的影响。如果字段组的得分表现不佳,那么调整项目和字段组指令可能会更有效,因这类指令会影响多个字段。