- 简介
- 入门指南
- 使用 BPMN 进行流程建模
- 使用 Case Management 进行流程建模
- 使用 Flow 进行流程建模
- 流程实施
- 流程运营
- 流程监控
- 流程优化
- 参考信息
使用 IXP 提取模型从文档中提取结构化字段。
“提取”节点使用 UiPath 智能提取平台 (IXP) 模型从文档(发票、收据、表单或合同)中提取结构化字段,并返回结果,以便下游节点进行操作。当流程中的某个步骤需要从非结构化文件中提取带类型的数据时,请使用此功能。
开始之前:部署 IXP 模型
提取节点没有自己的内置提取程序。它会显示您组织中部署的智能提取处理 (IXP) 模型,因此您必须至少部署一个 IXP 提取模型,然后任何选项才会显示在节点下。
- 在智能提取处理 (IXP) 中构建并部署模型。有关更多信息,请参阅“智能提取处理 (IXP)”文档。
- 必须将模型部署到您可以访问的文件夹中。模型按其完全限定名称
<Folder>/<ModelName>(例如Shared/Finance/invoice-extraction)列出。 - 如果未部署模型,则面板中会显示“提取”类别,但它为空。
您的租户还必须同时启用IXP和Document Understanding服务(“管理员”→“租户”→“服务”)。即使您只使用 IXP 模型,提取节点也需要配置两者。
工作方式
从组织中动态加载提取模型,这与从 Integration Service 加载连接器节点相同。在节点面板中,已部署的模型显示在“文档处理”→“提取”下,每个模型都作为自己的节点。向画布添加一项,会创建绑定到该特定模型的“提取”节点。
当节点运行时,Flow 会将文档发送到 IXP 模型,该模型将其数字化并提取,结构化结果在节点的output上返回。提取异步运行:节点会等待模型完成后再继续运行,因此请为大型文档留出时间。
配置
将提取节点添加到画布后,请在属性面板中对其进行配置。
| 字段 | 必填 | 默认 | 描述 |
|---|---|---|---|
| 模型 | 是 | 选定的模型 | 已部署的要运行的 IXP 模型。当您从面板中添加节点时,系统会设置此规则,并且模型的文件夹和版本会自动绑定。 |
| 文档 | 是 | 无 | 要从中提取内容的文件。将其绑定到流程早期中生成的文件,例如触发器中的附件或先前的节点输出。 |
| 页面范围 | 否 | 空白 | 从中提取的页面,例如1-3 。将其留空以处理整个文档。 |
输出
提取节点在$vars.<nodeName>.output处返回其结果。
| 变量 | 描述 |
|---|---|
output | 提取结果。包含单个ExtractionResult对象,该对象具有文档元数据、提取的字段和每个字段的置信度分数。阅读结果中详细介绍了该形状。 |
error | 节点出现故障时的错误详细信息。包含code 、 message 、 detail 、 category和status 。当节点的错误句柄已连接时可用。 |
读取结果
提取结果是嵌套结构。提取的字段位于ExtractionResult.ResultsDocument.Fields下,并且每个字段的值位于Values数组中,而不是直接在字段上:
$vars.<nodeName>.output = {
ExtractionResult: {
DocumentId: "<id>",
ResultsVersion: 0,
ResultsDocument: {
DocumentTypeField: { Value: "Invoice", Confidence: 1.0, OcrConfidence: -1.0 },
Fields: [
{
FieldId: "Test.Financial.Invoice.Total", // model-qualified id
FieldName: "Total", // leaf label, use this for lookups
FieldType: "Text",
IsMissing: false,
Values: [
{ Value: "12.57", Confidence: 0.604, OcrConfidence: 0.604, Components: [], Reference: {} }
]
}
// ...one entry per field in the model schema
]
}
}
}
$vars.<nodeName>.output = {
ExtractionResult: {
DocumentId: "<id>",
ResultsVersion: 0,
ResultsDocument: {
DocumentTypeField: { Value: "Invoice", Confidence: 1.0, OcrConfidence: -1.0 },
Fields: [
{
FieldId: "Test.Financial.Invoice.Total", // model-qualified id
FieldName: "Total", // leaf label, use this for lookups
FieldType: "Text",
IsMissing: false,
Values: [
{ Value: "12.57", Confidence: 0.604, OcrConfidence: 0.604, Components: [], Reference: {} }
]
}
// ...one entry per field in the model schema
]
}
}
}
要读取下游脚本节点中单个字段的值,请通过ExtractionResult.ResultsDocument.Fields找到字段,并读取FieldName并读取Values[0].Value :
const value =
$vars.extract1.output
?.ExtractionResult?.ResultsDocument?.Fields
?.find((f) => f.FieldName === "Total")
?.Values?.[0]?.Value;
const value =
$vars.extract1.output
?.ExtractionResult?.ResultsDocument?.Fields
?.find((f) => f.FieldName === "Total")
?.Values?.[0]?.Value;
由于字段名称包含模型架构中的空格和大小写( Invoice No. 、 Vendor Name ),因此规范化的查找更加可靠:
const fields = $vars.extract1.output?.ExtractionResult?.ResultsDocument?.Fields || [];
const norm = (s) => String(s || "").toLowerCase().replace(/\s+/g, "");
const get = (name) => {
const f = fields.find((x) => norm(x.FieldName) === norm(name));
return f && Array.isArray(f.Values) && f.Values[0] ? f.Values[0].Value : undefined;
};
const total = get("Total");
const vendor = get("Vendor Name");
const fields = $vars.extract1.output?.ExtractionResult?.ResultsDocument?.Fields || [];
const norm = (s) => String(s || "").toLowerCase().replace(/\s+/g, "");
const get = (name) => {
const f = fields.find((x) => norm(x.FieldName) === norm(name));
return f && Array.isArray(f.Values) && f.Values[0] ? f.Values[0].Value : undefined;
};
const total = get("Total");
const vendor = get("Vendor Name");
常见错误:读取Fields.find((f) => f.FieldName === "Total").Value将返回undefined 。这些字段位于ResultsDocument.Fields下(比ExtractionResult深一级),值存在Values数组中,而不直接位于字段上。从旧版 Document Understanding 工作流复制的示例使用较扁平的形状,在此处不起作用。
缺少字段
模型找不到的字段包含IsMissing: true以及空或 null Values数组。始终使用Values?.[0]进行保护(如上面的代码片段所示),因此缺少的字段读取为undefined ,而不是抛出异常。
置信度分数
每个提取的值都包含Confidence和OcrConfidence ,两者的浮动范围都在0到1之间,数值越高,确定性越高。它们位于Values[0].Confidence处的值对象上。值-1.0是表示“不适用”的标记(例如,在表格标头行上),因此在比较之前将其筛选掉。使用决策节点将低置信度提取内容路由到人工任务以供审核。
表格字段
FieldType为Table的字段在Values下保留其行,而不是上方的标量形状。每个表格值都带有一个Components数组( Header行和Body行),每个组件依次保存其Components下的单元格字段,每个字段都带有熟悉的Values[0].Value 。递归遍历Components以到达单个单元格。
错误处理
提取节点支持错误句柄。如果提取失败但错误句柄已连接,则执行路由到错误路径,错误对象位于$vars.<nodeName>.error 。有关更多信息,请参阅“错误处理” 。
注意
- “提取”类别下的模型列表反映了在设计时在组织中部署的模型。在智能提取处理 (IXP) 中部署或重新部署模型,然后重新打开面板以查看更改。
- 对于
Values[0].Value,字段值始终为字符串,即使对于日期和数字也是如此。模型也可能返回DerivedFields下的解析部分(例如,日期的Year、Month、Day,或地址的City和Country)。