Back to skills
SKILL.md
Data Contract Skill
ASecurity多轮对话交互式填写国家数据局合同模板(支持4种合同类型),自动路由识别合同类型,生成清洁版 .docx 合同
- 9 stars
- 0 votes
- 0 copies
- 0 views
- Added September 25, 2026
Security analysis
92/100- Installs packages at runtime which could introduce malicious dependencies
npx -y skills add CSlawyer1985/legal-skillhub --skill data-contract-skill --agent claude-codeAre you the author of Data Contract Skill?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/cslawyer1985-data-contract-skill)---
name: data-contract-skill
version: 1.1.0
description: 多轮对话交互式填写国家数据局合同模板(支持4种合同类型),自动路由识别合同类型,生成清洁版 .docx 合同
---
# 国家数据局合同自动填写 Skill
## 概述
本 Skill 用于通过多轮自然语言对话,逐步收集用户提供的合同信息,填写国家数据局发布的4种示范合同模板,最终生成排版完整的 `.docx` 成品文件。
## 支持的合同类型
| 编号 | 合同名称 | 编码 | 占位符数量 | 分组数 |
|------|---------|------|-----------|-------|
| 1 | 数据提供合同 | GF-2025-2615 | 189 | 14 |
| 2 | 数据委托处理服务合同 | GF-2025-2616 | 137 | 13 |
| 3 | 数据融合开发合同 | GF-2025-2617 | 224 | 16 |
| 4 | 数据中介服务合同 | GF-2025-2618 | 156 | 12 |
## 核心流程
```
用户发起请求
│
▼
┌─────────────────────────────────────┐
│ 1. 合同类型识别(自动路由) │
│ 规则匹配(关键词 / 合同编号) │
│ 歧义或无匹配时: │
│ → 由你(Skill 模型)语义判别 │
│ → 仍不确定则追问用户 │
└─────────────────────────────────────┘
│
▼
┌─────────────────────────────────────┐
│ 2. 初始化:加载模板配置 │
│ python scripts/init_contract.py │
└─────────────────────────────────────┘
│
▼
┌─────────────────────────────────────┐
│ 3. 多轮对话收集信息 │
│ 按分组优先级逐轮提问 │
│ 智能推断、别名联动 │
│ python scripts/update_state.py │
└─────────────────────────────────────┘
│
▼
┌─────────────────────────────────────┐
│ 4. 生成最终合同 │
│ python scripts/fill_contract.py │
└─────────────────────────────────────┘
```
---
## 第一步:识别合同类型
当用户发起请求时,首先识别合同类型。
### 规则识别
`init_contract.py --intent` 会先用关键词 / 合同编号 / 合同全名做规则匹配。
| 合同类型 | 典型关键词示例 |
|---------|-------------|
| 数据提供合同 | "数据提供"、"卖数据"、"数据交易" |
| 数据委托处理服务合同 | "委托处理"、"数据加工"、"数据清洗"、"数据标注" |
| 数据融合开发合同 | "融合开发"、"多方合作"、"联合开发" |
| 数据中介服务合同 | "中介服务"、"撮合交易"、"交易平台" |
用户也可直接说合同编号(如 `GF-2025-2616`)或英文编码(`weituo`)。
### 语义路由(由你完成)
当规则匹配结果 **歧义** 或 **无匹配** 时,`init_contract.py` 会输出一段 `【给 Skill 模型的语义路由提示】`。你需要:
1. 阅读该提示中的候选类型和用户原始意图
2. 基于语义理解,选择最匹配的合同类型编码(`tigong` / `weituo` / `ronghe` / `zhongjie`)
3. 用 `--type` 参数重新调用 `init_contract.py`
4. 如果你也无法确定,追问用户具体场景后再决定
### 追问模板(无法识别时)
```
我无法确定您需要哪种合同类型。请告诉我您的具体场景:
📋 支持的合同类型:
1. 数据提供合同(GF-2025-2615)— 一方向另一方提供数据
2. 数据委托处理服务合同(GF-2025-2616)— 委托方交给受托方处理数据
3. 数据融合开发合同(GF-2025-2617)— 多方共同参与数据融合开发
4. 数据中介服务合同(GF-2025-2618)— 中介方提供数据交易撮合服务
请描述您的数据交易场景,或直接告诉我需要哪种合同。
```
---
## 第二步:初始化
```bash
# 根据用户意图自动识别类型
python <skill_dir>/scripts/init_contract.py --intent "帮我填数据提供合同" --state "./contract_state.json"
# 或明确指定类型
python <skill_dir>/scripts/init_contract.py --type tigong --state "./contract_state.json"
```
类型参数值:`tigong` / `weituo` / `ronghe` / `zhongjie`
初始化成功后会输出分组概览和占位符总数。**请记住这个总数,后续用于进度播报。**
---
## 第三步:多轮对话收集信息
### 核心规则(必须严格遵守)
1. **所有字段必填**
- 每个字段都必须填写,不能留空
- 只有当用户**明确说** "暂时不填"、"跳过"、"不需要" 时,才能跳过该字段
- 如果用户没有提供某字段的值,**必须追问**直到获得答案
- 一个分组内所有字段填完后才进入下一分组
2. **复选框字段**(以 `☐` 开头的占位符)
- **必须明确填写选中或不选**,不能留空
- 选中 → 值设为 `"☑"` 或 `"是"`
- 不选 → 值设为 `"☐"` 或 `"否"`
- 示例:`{"☐甲方_统一社会信用代码": "☑", "☐甲方_居民身份证": "☐"}`
- **禁止**写入布尔值 `true`/`false`,必须用字符串
3. **字段名必须精确匹配模板中的名称**
- 字段名含下划线的(如 `甲方_证件号码`)不能写成 `甲方证件号码`
- 如果不确定字段名,运行 `--show` 查看标准字段名
- `update_state.py` 有模糊匹配提示:写错时会给出建议
4. **别名联动**
- 填写 `甲方名称` 会自动联动填充 `封面_甲方名称`、`签署_甲方` 等
- 填写 `签订年` 会自动联动 `签署_甲方年`、`签署_乙方年`
5. **智能推断**
- 用户说 "合同总价50万" → 自动填金额 + 大写 "伍拾万元整"
- 用户给公司名 → 自动推断封面和签署栏
### 更新状态
```bash
# 单个字段
python <skill_dir>/scripts/update_state.py --state "./contract_state.json" --field "甲方名称" --value "北京数据科技有限公司"
# 批量更新(推荐,减少调用次数)
python <skill_dir>/scripts/update_state.py --state "./contract_state.json" --json '{"甲方名称": "北京数据科技有限公司", "乙方名称": "上海智能技术有限公司"}'
# 查看当前进度和未填字段
python <skill_dir>/scripts/update_state.py --state "./contract_state.json" --show
```
### 对话模板
**每轮开始**(当前分组有未填字段时):
```
📋 {合同名称} 填写进度:已填 {filled}/{total} 项({percentage}%)
接下来需要了解 **{当前分组名称}** 的信息:
{分组的ask提示}
请直接用自然语言描述,我会自动提取信息。
```
**每轮结束(分组完成)**:
```
✅ 已提取以下信息:
- 甲方名称:北京数据科技有限公司
- 甲方证件类型:统一社会信用代码 ☑
...
📋 当前分组已全部填写完成!还有 {remaining} 项未填写,继续下一部分。
```
**每轮结束(分组未完成,需追问)**:
```
✅ 已提取以下信息:
- 甲方名称:北京数据科技有限公司
...
⚠️ 当前分组还有以下字段未填写:
- 甲方_证件号码
- 甲方_注册地址
请继续提供以上信息。
```
---
## 第四步:生成最终合同
```bash
# 先检查是否全部填完
python <skill_dir>/scripts/fill_contract.py --state "./contract_state.json" --output "out.docx" --check
# 全部填完后生成
python <skill_dir>/scripts/fill_contract.py --state "./contract_state.json" --output "./数据提供合同_成品.docx"
# 用户明确要求强制生成(未填字段留空)
python <skill_dir>/scripts/fill_contract.py --state "./contract_state.json" --output "out.docx" --force
```
---
## 错误处理
| 场景 | 处理方式 |
|------|---------|
| `update_state` 报 "无法识别的字段名" | 根据提示的建议字段名修正后重试 |
| `init_contract` 报 "模板占位符与配置字段不一致" | 说明模板或配置损坏,提示用户重新安装 Skill |
| `fill_contract` 报 "仍有 N 个字段必须填写" | 继续多轮对话收集,不要用 `--force` 除非用户明确要求 |
| 用户给了布尔值 `true`/`false` 到文本字段 | 追问用户提供实际文本值 |
| 复选框字段为空 | 追问用户选择 "选中" 还是 "不选" |
---
## 文件结构
```
data-contract-skill/
├── SKILL.md # 本文件(AI Agent 使用说明)
├── README.md # 人类用户使用说明
├── contracts/ # 合同配置和模板
│ ├── __init__.py
│ ├── router.py # 合同类型路由器
│ ├── base_config.py # 共享工具(进度/校验/金额转换)
│ ├── tigong/ # 数据提供合同
│ │ ├── config.py # 占位符分组、别名配置
│ │ └── template.docx # DOCX 模板文件
│ ├── weituo/ # 数据委托处理服务合同
│ ├── ronghe/ # 数据融合开发合同
│ └── zhongjie/ # 数据中介服务合同
├── scripts/
│ ├── init_contract.py # 初始化合同状态
│ ├── update_state.py # 更新字段值
│ └── fill_contract.py # 生成最终合同
└── examples/
└── sample_state.json # 示例状态文件
```
## 依赖
- Python 3.10+
- `python-docx`:`pip install python-docx`
---
## 示例对话
**用户**:帮我填一个数据提供合同
**AI**:
```
🔍 识别到合同类型:数据提供合同(GF-2025-2615)
✅ 合同初始化完成!
📋 数据提供合同 填写进度:已填 0/189 项(0%)
接下来需要了解 **合同基本信息** :
请提供合同编号、签订日期(年月日)和签署地点(城市、区县)。
```
**用户**:合同编号是2025-DATA-001,2025年3月15日在北京市海淀区签
**AI**:
```
✅ 已提取以下信息:
- 合同编号:2025-DATA-001
- 签订日期:2025年3月15日
- 签署地点:北京市海淀区
📋 填写进度:已填 6/189 项(3.2%)
接下来需要了解 **甲方信息**:
请提供甲方(接收方)的信息:公司名称、证件类型及号码、注册地址、法定代表人、联系人等。
```
Attribution
Comments
Loading comments…