合同信息提取 Skill
本 skill 从合同原文中提取结构化信息。
系统默认字段始终可用;用户可在本轮对话中临时指定额外字段一并提取,但自定义字段仅在当前窗口有效,不做跨会话保存。
Step 1:判断提取模式
两种提取模式可单独或同时运行:
| 模式 | 适用场景 | 输出结构 |
|---|---|---|
| 基本信息抽取 | 静态字段:甲乙方、金额、日期、条款等 | 扁平 key-value JSON |
| 履约信息抽取 | 动态事件:付款、收款、验收、交付等 | 结构化事件数组 JSON |
判断逻辑:
- 用户明确说"履约""付款节点""验收节点""交付安排""质保节点" → 履约信息模式
- 用户说"合同要素""甲乙方""合同金额""解除条款"等静态字段 → 基本信息模式
- 用户提供的自定义字段同时包含静态字段和事件节点 → 同时运行两种模式
- 不确定时只问一句:
您这次要提取基本信息字段、履约事件节点,还是两者都要?
路由边界:
- 如果用户要的是合同摘要、合同审查、风险评估、合同起草或一般法律问答,不走本 skill
Step 2:确认字段来源
系统默认字段见 references/default-keywords.md。
字段使用规则:
- 用户未指定额外字段 → 直接使用系统默认字段,不追问
- 用户本轮提供了额外字段 → 默认使用"系统默认字段 + 本轮字段"一并提取
- 用户明确说"只提这些字段" → 仅使用用户本轮提供的字段,不带系统默认字段
自定义字段仅在当前窗口有效,不做跨会话保存。
Step 3:读取合同文本
根据文件类型获取可提取的合同原文:
标准 PDF / 扫描件 / Word:优先调用当前环境可用的读取能力,拿到可复制的正文文本
- 标准pdf文件自动使用自身能力读取。
- 扫描件可用"fadada-scanned-ocr"
- word文件读取先使用自身能力,如果获得的信息为明显的空白、残缺,再检索有无其他读取方式或能力。
若当前环境没有稳定的读取能力,要求用户直接提供合同正文或已识别文本
若合同引用了附件,但附件原文未提供,则不得展开附件内容,只能基于已提供文本抽取
读取完成后,将正文作为 fileContent 传入下一步。无法读取时告知用户并建议:
- 转为标准 PDF
- 提供 OCR 后文本
- 或直接粘贴需要抽取的合同片段
Step 4:执行提取
外层边界
以下边界由本 skill 控制,references/prompts.md 中的已验证提示词保持为核心执行内核:
- 基本信息模式:严格抽取,不做语义补全、事实推断或格式改写;除提示词中已明确允许的规则外,不新增推断行为
- 履约信息模式:允许有限归一化,用于结构化输出,例如金额转阿拉伯数字、日期标准化、履约事件标准名称归一、履约类型枚举映射
- 履约信息模式禁止补造事实:不得凭相邻条款、行业常识、未提供的附件、或上下文猜测补齐缺失事实
- 附件边界:只有当附件原文已在本次输入中提供时,才允许展开附件内容;否则保留主合同原句或按提示词规则返回空值
模式 A:基本信息抽取
调用见 references/prompts.md → [基本信息抽取 System Prompt],user prompt 格式:
合同信息要点:
{{extractKeyWords}}
合同内容如下:
{{fileContent}}
核心约束:
- 所有 value 必须逐字逐句与原文一致,含空格、换行、标点
- 禁止推断、金额大小写互转、文字补全
- 合同中
/或/表示空缺 → 输出"无" - 仅输出纯 JSON,key 原样保留,无法提取的字段输出
"无"
模式 B:履约信息抽取
调用见 references/prompts.md → [履约信息抽取 System Prompt],user prompt 格式:
履约抽取项如下:
{{extractKeyWords}}
合同原文如下:
{{fileContent}}
核心约束:
- 每个履约事件独立为对象,全部存入数组;单个事件也用数组
- 金额可按提示词规则转为阿拉伯数字
- 日期按提示词规则格式化;相对日期保持
null - 履约人只取合同中明确指定的自然人姓名
履约类型枚举:付款 / 收款 / 交付 / 质量保证 / 验收 / 其他对应的完整合同原文段落必须直接来自已提供原文,完整保留原文含换行,用数组存储
异常处理
| 情况 | 处理方式 |
|---|---|
| 合同文件无法读取 | 提示检查格式,建议转为标准 PDF、提供 OCR 文本,或直接粘贴正文 |
| 合同文本不完整 / 缺页 | 标注受影响字段为"文本缺失,无法提取",其余正常输出 |
| 要点格式不规范 | 尝试解析意图;若有歧义,只追问一次再提取 |
| 提取 JSON 无法解析 | 去除 ``` 标记后重新生成,最多重试一次 |
| 合同为非中文 | 告知主要适配中文合同;英文合同可尝试,但稳定性较低 |
输出交付
支持三种输出方式,可按用户需求选择:
| 方式 | 触发条件 | 格式说明 |
|---|---|---|
| 对话窗口展示 | 默认 / 用户未指定 | 以 Markdown 表格呈现,基本信息为两列表格(字段名 / 提取内容),履约信息每行为一个事件 |
| JSON | 用户说"输出 JSON""给我 JSON 格式" | 输出纯 JSON,key 为字段名,value 为提取内容 |
| Markdown 文件 | 用户说"保存为 md""导出 Markdown" | 与对话展示格式相同,保存为 .md 文件 |
| Word 文件 | 用户说"输出 Word""保存为 docx""下载文档" | 将结果转为 Word 表格格式,保存为 .docx 文件 |
格式转换规则:
- Markdown 表格(对话 / .md 文件):基本信息以两列表格输出(字段名 / 提取内容);履约信息以多列表格输出,每行为一个履约事件
- Word(.docx):结构与 Markdown 相同,使用标准表格样式;文件名默认为
合同提取结果_{{合同名称}}.docx,无法获取合同名称时命名为合同提取结果.docx
执行限制:
- 文件输出仅在当前环境明确支持写文件时执行
- 若环境不支持文件写入,先在对话中返回 JSON 结果,并告知用户当前无法导出文件