合同助手是一个基于 LLM Wiki 模式的合同处理 Skill,提供三大核心功能:
以及一个核心自维护功能:
本 Skill 的脚本位于 Skill 安装目录下的 scripts/ 子目录。由于当前工作目录(workspace)可能不是 Skill 所在目录,所有脚本调用必须使用绝对路径。
执行任何脚本前,先确定 Skill 安装路径:
~/.workbuddy/skills/contract-assistant/
/.workbuddy/skills/contract-assistant/
判断方法:检查 ~/.workbuddy/skills/contract-assistant/SKILL.md 是否存在,存在则使用该路径;否则使用 。
下文中的 {SKILL_DIR} 代表 Skill 安装根目录的绝对路径,所有 python {SKILL_DIR}/scripts/xxx.py 实际执行时应替换为 python {SKILL_DIR}/scripts/xxx.py,references/xxx.md 替换为 {SKILL_DIR}/references/xxx.md。
你(Agent)即是 LLM 本身。在执行功能 A/B/C 时,你直接按照提示词中的规则对合同文本进行推理,输出结构化结果——不需要调用外部 LLM API。在执行功能 D 时,你按照 {SKILL_DIR}/references/ 中的指令文档推理出每一步的结果。
在执行功能 A/B/C 时,由于处理时间较长,应在关键步骤推送进度通知,让用户了解处理进展,避免等待无响应。
在各功能步骤中标记 📱 的位置,调用通知脚本:
python {SKILL_DIR}/scripts/notify.py "合同助手" "<进度消息>"
通知脚本会尝试 Windows Toast 通知(右下角弹窗),如果不可用则静默回退。
> 待企微消息权限开通后,将切换为 wecom-cli msg send_message 直接推送进度到企微端。
| 阶段 | 消息模板 |
|------|----------|
| 开始处理 | ⏳ 正在{动作},请稍候... |
| 处理中 | ⏳ {动作}进行中... |
| 即将完成 | ✅ {动作}即将完成,正在生成文档... |
此 Skill 依赖一个 Prompt Wiki 目录存放提示词和知识库。默认路径为 ~/.contract-assistant-wiki/。
每次执行功能 A/B/C/D 前,必须先检查 Wiki 目录是否已初始化:
~/.contract-assistant-wiki/prompts/ 目录是否存在
```bash
python {SKILL_DIR}/scripts/wiki_manage.py init ~/.contract-assistant-wiki/
```
> 此步骤确保新用户开箱即用,无需任何配置即可使用全部功能(包括功能 D 的自维护)。
初始化后目录结构如下:
~/.contract-assistant-wiki/
├── prompts/ # 三大功能提示词(extract.md, review.md, generate.md)
├── knowledge/ # 知识库(rules.md, templates.md, *-template.md, feedback-insights.md, prompt-insights.md)
├── sources/
│ ├── feedback/ # 反馈原文归档
│ └── contract/
│ └── templates/ # 源 .docx 模板(5类合同模板文件)
├── archive/ # 提示词版本归档
├── index.md # 版本索引
├── schema.md # 目录结构说明
└── log.md # 变更日志
~/.contract-assistant-wiki/prompts/ 读取提示词(可随用户反馈自动演进的版本)
{SKILL_DIR}/references/ 文件
~/.contract-assistant-wiki/knowledge/ 读取
用户输入
├─ 合同文本/文件 + "提取/信息/关键字段" → 功能 A: 合同信息提取
├─ 合同文本/文件 + "审核/风险/检查/审查" → 功能 B: 合同风险审核
├─ "生成/模板/合同模板" + 类型(服务/会议/销售/采购/施工) → 功能 C: 合同模板生成
├─ "优化/改进/更新 wiki/提示词/规则/知识库" → 功能 D: LLM Wiki 自维护
└─ 对已有输出的"反馈/修改/不对/漏掉/应该加上" → 功能 D: LLM Wiki 自维护
python {SKILL_DIR}/scripts/notify.py "合同助手" "⏳ 正在解析合同文本,请稍候..."
```bash
python {SKILL_DIR}/scripts/parse_contract_file.py
```
```bash
python {SKILL_DIR}/scripts/wiki_manage.py read-prompt ~/.contract-assistant-wiki/ extract
```
{SKILL_DIR}/references/extract-prompt.md
📱 进度通知:python {SKILL_DIR}/scripts/notify.py "合同助手" "⏳ 合同信息提取进行中..."
📱 进度通知:python {SKILL_DIR}/scripts/notify.py "合同助手" "✅ 合同信息提取即将完成,正在生成文档..."
```bash
python {SKILL_DIR}/scripts/generate_docx.py --title "合同信息提取-{合同编号或日期}" --output "<工作目录>/合同信息提取-{合同编号或日期}.docx" --input
```
--output 必须使用绝对路径且在工作目录内(如 C:\Users\jerome\WorkBuddy\2026-05-08-task-4\合同信息提取-2026-05-12.docx),否则 deliver_attachments 无法发送文件到企微
为 Agent 将 Markdown 内容写入的临时文件
合同信息提取-{日期}.docx
deliver_attachments 将生成的 .docx 文件交付给用户,企业微信端可直接接收下载。
deliver_attachments 工具,传入步骤 5 生成的 .docx 文件绝对路径
python {SKILL_DIR}/scripts/notify.py "合同助手" "⏳ 正在解析合同文本,请稍候..."
```bash
python {SKILL_DIR}/scripts/wiki_manage.py read-prompt ~/.contract-assistant-wiki/ review
```
```bash
python {SKILL_DIR}/scripts/wiki_manage.py read-knowledge ~/.contract-assistant-wiki/ rules
```
{SKILL_DIR}/references/rules-knowledge.md
📱 进度通知:python {SKILL_DIR}/scripts/notify.py "合同助手" "⏳ 合同风险审核进行中..."
risk_summary: {A: 数量, B: 数量, C: 数量, total: 数量, passed: 数量}
checklist: 每条规则的逐项 pass/fail 结果
risks: 具体风险列表(id, level, category, description, clause_reference, suggestion)
overall_assessment: 总体评估
📱 进度通知:python {SKILL_DIR}/scripts/notify.py "合同助手" "✅ 合同风险审核即将完成,正在生成文档..."
```bash
python {SKILL_DIR}/scripts/generate_docx.py --title "合同审核报告-{日期}" --output "<工作目录>/合同审核报告-{日期}.docx" --input
```
--output 必须使用绝对路径且在工作目录内,否则 deliver_attachments 无法发送文件到企微
为 Agent 将 Markdown 内容写入的临时文件
deliver_attachments 将生成的 .docx 文件交付给用户,企业微信端可直接接收下载。
deliver_attachments 工具,传入步骤 5 生成的 .docx 文件绝对路径
python {SKILL_DIR}/scripts/notify.py "合同助手" "⏳ 正在准备合同模板,请稍候..."
service = 服务合同(用户提到"服务/维护/技术支持/驻场")
meeting = 会议平台合同(用户提到"会议/云服务/视云/会议平台")
sales = 销售合同(用户提到"销售/卖方/出售")
procurement = 设备采购合同(用户提到"采购/买方/购买/设备采购")
construction = 施工采购合同(用户提到"施工/工程/建设/装修/安装")
```bash
python {SKILL_DIR}/scripts/wiki_manage.py read-prompt ~/.contract-assistant-wiki/ generate
```
```bash
python {SKILL_DIR}/scripts/wiki_manage.py read-knowledge ~/.contract-assistant-wiki/ templates
```
{SKILL_DIR}/references/templates-knowledge.md
~/.contract-assistant-wiki/sources/contract/templates/ → {SKILL_DIR}/assets/templates/
service → service-template.docx
meeting → meeting-template.docx
sales → sales-template.docx
procurement → procurement-template.docx
construction → construction-template.docx
2.5 读取源模板(了解占位符) — 读取对应类型的 Markdown 模板 knowledge/{type}-template.md,查看其中标注了哪些【】占位字段,了解需要用户提供哪些核心数据。
然后根据模板中的占位符,逐项向用户询问核心数据。例如施工采购合同需要:
其他合同类型同理,根据其 Markdown 模板中的【】占位符向用户询问对应数据。
> 一次将所有问题列出,让用户一次性提供。如果用户只提供了部分数据,其余在模板中用【】占位。
数据格式示例:
```json
{"【甲方全称】": "东风木业有限公司", "【项目名称】": "A标段装修工程", "【合同金额】": "500,000"}
```
然后调用 fill_docx_template.py 脚本,将数据填入源 .docx 模板,生成后自动用 Word 打开文件:
```bash
python {SKILL_DIR}/scripts/fill_docx_template.py \\
--template "<源模板.docx路径>" \\
--output "<工作目录>/合同模板-{类型}-{日期}.docx" \\
--data-file
--open
```
其中 <源模板.docx路径> 按优先级查找:先 ~/.contract-assistant-wiki/sources/contract/templates/{type}-template.docx,若不存在则用 {SKILL_DIR}/assets/templates/{type}-template.docx
⚠️ --output 必须使用绝对路径且在工作目录内,否则 deliver_attachments 无法发送文件到企微
📱 进度通知:python {SKILL_DIR}/scripts/notify.py "合同助手" "⏳ 合同模板生成进行中..."
3.5 智能审查与后处理 — fill_docx_template.py 执行完毕后,进行以下智能审查:
a. 读取生成结果:通过 Python 读取生成的 .docx 全部文本内容
```bash
python -c "from docx import Document; doc = Document('
```
b. 对比用户输入:将用户提供的所有核心数据与文档中实际显示的文本进行逐一比对
c. 识别差异:找出用户提供了但文档中未出现的内容(如项目名称、联系方式等),以及文档中需要调整的文本
d. 生成并执行修改操作:
fill_docx_template.py 对生成的 .docx 再次执行替换
```bash
python {SKILL_DIR}/scripts/fill_docx_template.py --template "<已生成的.docx>" --output "<最终输出.docx>" --data '{"原文本":"新文本"}'
```
insert_into_docx.py 在合适位置插入
```bash
python {SKILL_DIR}/scripts/insert_into_docx.py --input "<已生成的.docx>" --output "<最终输出.docx>" --insertions-file
```
fill_docx_template.py 将目标文本替换为空字符串
e. 输出变更说明:告知用户智能审查后做了哪些增补或修改
> 示例:用户提供了"华润IT运维服务"但模板没有对应占位符
> → 检测到文档标题或正文未包含此文本
> → 判断标题是否需要更新 → 将标题修改为包含项目名称
工作目录\合同模板-服务合同-XXX.docx)
📱 进度通知:python {SKILL_DIR}/scripts/notify.py "合同助手" "✅ 合同模板生成完成"
deliver_attachments 将生成的 .docx 文件交付给用户,企业微信端可直接接收下载。
deliver_attachments 工具,传入步骤 5 生成的 .docx 文件绝对路径
当用户对合同助手的输出提出反馈时(如"漏掉了违约金检查"、"格式不对"、"应该加上知识产权"等),或用户主动要求优化/改进/更新 Wiki 提示词、规则库或知识库时,执行以下流水线。
> 如果反馈不够具体(如只是"结果不对"、"不好"),先按 {SKILL_DIR}/references/feedback-collect-prompt.md 引导用户给出更有价值的反馈,再进入流水线。
{SKILL_DIR}/references/feedback-parse-prompt.md 了解解析规则
```json
{
"target_prompt": "extract | review | generate",
"feedback_type": "missing_field | format_error | logic_error | scope_shift",
"severity": "critical | important | minor",
"suggestion": "具体修改建议",
"original_output": "原始输出中的问题部分",
"expected_output": "期望的输出"
}
```
{SKILL_DIR}/references/insight-extract-prompt.md 了解知识提取规则
```json
{
"knowledge_target": "rules | templates | feedback_insights | prompt_insights",
"insight_type": "missing_requirement | correction | format_rule | domain_rule | prompt_gap",
"summary": "一句话总结",
"evidence": "用户反馈中的证据",
"recommended_prompt_action": "none | monitor | optimize",
"target_prompt": "extract | review | generate",
"confidence": 0.0-1.0
}
```
knowledge_target 调用脚本:
```bash
python {SKILL_DIR}/scripts/wiki_manage.py append-knowledge ~/.contract-assistant-wiki/
```
```bash
python {SKILL_DIR}/scripts/wiki_manage.py update-knowledge ~/.contract-assistant-wiki/
```
rules、templates、feedback-insights、prompt-insights
```bash
python {SKILL_DIR}/scripts/wiki_manage.py save-feedback ~/.contract-assistant-wiki/ "
```
{SKILL_DIR}/references/prompt-decide-prompt.md 了解决策规则
```bash
python {SKILL_DIR}/scripts/wiki_manage.py read-prompt ~/.contract-assistant-wiki/
```
```bash
python {SKILL_DIR}/scripts/wiki_manage.py read-knowledge ~/.contract-assistant-wiki/
```
```json
{
"should_optimize_prompt": true/false,
"decision": "optimize | monitor | knowledge_only",
"reason": "决策原因",
"prompt_update_instruction": "给优化器的具体指令",
"confidence": 0.0-1.0
}
```
decision = "knowledge_only" → 流水线结束,告知用户"知识已沉淀,暂不优化提示词"
decision = "monitor" → 流水线结束,告知用户"已记录反馈,将持续观察"
decision = "optimize" → 继续 Step 4
{SKILL_DIR}/references/prompt-update-prompt.md 了解修正规则
```json
{
"updated_prompt": "修正后的完整提示词文本",
"change_description": "修正说明",
"change_type": "minor | major"
}
```
updated_prompt 是否满足:
v1.0)
updated_prompt 写入临时文件
```bash
python {SKILL_DIR}/scripts/wiki_manage.py archive ~/.contract-assistant-wiki/
```
输出变更摘要:
v1.3 → v1.4)
change_description)
python {SKILL_DIR}/scripts/wiki_manage.py list-archives ~/.contract-assistant-wiki/
python {SKILL_DIR}/scripts/wiki_manage.py rollback ~/.contract-assistant-wiki/ [target_version]
当用户认为提示词修正后效果不佳,可以回滚到之前的版本:
python {SKILL_DIR}/scripts/wiki_manage.py rollback ~/.contract-assistant-wiki/ <prompt_name> [target_version]
target_version 则回滚到上一个版本
解析 PDF/DOCX 合同文件为纯文本。
python {SKILL_DIR}/scripts/parse_contract_file.py <file_path>
显示 Windows 进度通知(右下角 Toast 弹窗)。
python {SKILL_DIR}/scripts/notify.py "标题" "消息内容"
{"status": "ok", "method": "notification"}
将 Markdown 内容生成格式化的 .docx 文档。仅用于功能 A 和功能 B。功能 C 使用 fill_docx_template.py。
python {SKILL_DIR}/scripts/generate_docx.py --title "文档标题" --output output.docx [--input content.md] [--open]
--title(必填):文档标题(显示在封面页)
--output(必填):输出 .docx 文件路径。纯文件名或相对路径会自动保存到 ~/Documents/合同助手/ 目录;绝对路径保持原样
--input(可选):输入 Markdown 文件路径(省略则从 stdin 读取)
--open(可选):生成后自动用系统默认程序(如 Word)打开文件(本地使用时可加,企微交付时不需要)
{"status": "ok", "output_path": "<绝对路径>", "opened": true/false}
将源 .docx 模板中的【】占位符替换为用户提供的数据,保留源文件的所有原始格式。
python {SKILL_DIR}/scripts/fill_docx_template.py --template template.docx --output output.docx --data-file data.json [--open]
--template(必填):源 .docx 模板路径
--output(必填):输出 .docx 文件路径
--data(可选):JSON 字符串 {"【甲方】":"甲公司"}
--data-file(可选):JSON 文件路径
--open(可选):生成后自动用系统默认程序(如 Word)打开文件
{"status": "ok", "output_path": "...", "replacements": N, "opened": true/false}
在现有 .docx 文件的指定位置插入新段落内容(Markdown 格式),支持智能审查后处理中补充遗漏信息。
python {SKILL_DIR}/scripts/insert_into_docx.py --input input.docx --output output.docx --insertions-file ops.json
--input(必填):输入的 .docx 文件路径
--output(必填):输出的 .docx 文件路径
--insertions(可选):JSON 字符串 [{"after_text":"原文本","content":"新内容"}]
--insertions-file(可选):JSON 文件路径,内容为插入操作数组
after_text:在包含此文本的段落之后插入
before_text:在包含此文本的段落之前插入
content:要插入的内容(Markdown 格式,支持 ## ### 标题和正文)
{"status": "ok", "output_path": "...", "insertions": N}
Wiki 目录文件管理工具,支持以下命令:
| 命令 | 说明 |
|------|------|
| init ~/.contract-assistant-wiki/ | 初始化 Wiki 目录(从 assets/wiki-scaffold 复制,含 .docx 模板) |
| read-prompt ~/.contract-assistant-wiki/ | 读取当前提示词内容 |
| read-knowledge ~/.contract-assistant-wiki/ | 读取知识文件内容 |
| archive ~/.contract-assistant-wiki/ | 归档旧版本+发布新版本 |
| rollback ~/.contract-assistant-wiki/ | 回滚到指定版本 |
| append-knowledge ~/.contract-assistant-wiki/ | 追加知识条目 |
| update-knowledge ~/.contract-assistant-wiki/ | 替换知识文件内容(先归档旧版) |
| save-feedback ~/.contract-assistant-wiki/ " | 保存反馈原文 |
| list-archives ~/.contract-assistant-wiki/ | 列出归档版本 |
| append-log ~/.contract-assistant-wiki/ " | 追加日志条目 |
prompt_name 可选值:extract、review、generate
knowledge_name 可选值:rules、templates、feedback-insights、prompt-insights
| 文件 | 用途 | 使用时机 |
|------|------|----------|
| extract-prompt.md | 合同信息提取提示词 | 功能 A |
| review-prompt.md | 合同风险审核提示词 | 功能 B |
| generate-prompt.md | 合同模板生成提示词 | 功能 C |
| rules-knowledge.md | 审核规则知识库(回退) | 功能 B,Wiki 中无 rules.md 时使用 |
| templates-knowledge.md | 模板知识库(回退) | 功能 C,Wiki 中无 templates.md 时使用 |
| feedback-parse-prompt.md | 反馈解析指令 | 功能 D Step 1 |
| insight-extract-prompt.md | 知识提取指令 | 功能 D Step 2 |
| prompt-decide-prompt.md | 优化决策指令 | 功能 D Step 3 |
| prompt-update-prompt.md | 提示词修正指令 | 功能 D Step 4 |
| feedback-collect-prompt.md | 轻量反馈收集指令 | 简单反馈场景 |
共 1 个版本