← 返回 Skill 列表
extension
分类: 开发与工程API Key 暂未确认

小包公智能合同起草

通过小包公 API 提供智能合同起草服务,支持各类合同起草。当用户提出起草合同、合同草稿、合同撰写时使用此 Skill。起草结果必须排版输出为 Word (.docx),禁止以 Markdown 作为最终交付物。

person作者: xbgai123hubModelScope

xiaobaogongai-contract-drafting - 小包公智能起草

通过小包公 API 提供智能合同起草服务。当用户提出起草合同、合同草稿、合同撰写时使用此 Skill。

主要更新

v1.4

  • Word 交付强制规范:起草完成的合同一律排版输出为 Word(.docx),Markdown 仅为中间产物,禁止把 Markdown 当作最终交付给用户

v1.3

  • 手机号验证码认证:支持 --auth-phone / --auth-code 手机号验证码认证,认证后自动激活试用资格(也兼容线下 appid / appsecret 环境变量)
  • 安全加固:baseUrl 域名白名单防 SSRF、config 落盘 0o600 权限、execFileSync 数组参数

v1.2

  • 次数不足购买引导:当 API 返回"次数不足"类错误时,自动生成购买链接并通过 stdout 输出 Markdown 超链接格式提示文案

触发条件

当用户提出以下表述时,必须使用本 Skill:

  • "起草合同"
  • "起草一份合同"
  • "写一份XX合同"
  • "合同草稿"
  • "合同撰写"
  • 以及其他明确表达起草合同意图的场景

🔴 AI 调用行为约束(强制)

本节内容在 Skill 被触发后立即执行,AI 必须遵守,不得绕过。

第一步:确认必填参数

起草合同需要 4 个必填参数,AI 在调用 main.js 前必须逐项确认:

| 参数 | 说明 | 有效值 | |------|------|--------| | class | 合同类别 | 买卖合同、租赁合同、劳动合同等(用户指定) | | entity | 我方主体名称 | 公司名或个人姓名(用户指定) | | role | 我方角色 | 甲方 / 乙方 / 第三方 | | status | 我方合同地位 | 强势 / 平等 / 弱势 |

行为规则:

  • ✅ 用户提供了全部 4 个参数 → 直接调用 main.js
  • ✅ 用户只提供部分参数 → 先向用户确认缺失的参数,等用户回复后再调用
  • ❌ 禁止 在用户未提供全部参数时直接调用 main.js
  • ❌ 禁止 在用户未提供参数时自行编造 entity、role、status 等信息

第二步:调用 Skill

参数确认完毕后,调用 main.js:

node <skill_dir>/scripts/main.js --class <合同类别> --entity <我方主体> --role <甲方|乙方|第三方> --status <强势|平等|弱势>

缺失参数的标准询问话术

当用户未提供全部 4 个必填参数时,必须先向用户确认,参考以下格式:

起草 [合同类别] 合同,请补充以下信息:

| 参数 | 说明 |
|------|------|
| 我方主体 | (公司名或个人姓名) |
| 我方角色 | 甲方 / 乙方(选其一) |
| 合同地位 | 强势 / 平等 / 弱势 |
| 附加要求 | (选填,特殊条款) |

请告知以上信息,例如:"我方主体:北京xxx公司,角色:甲方,地位:平等"

禁止的行为示例

  • ❌ 用户说"起草一份买卖合同",AI 直接调用 main.js(缺失 entity/role/status)
  • ❌ AI 自作主张填入"entity=某公司、role=甲方、status=平等"而未询问用户
  • ❌ AI 在用户仅提供合同类别时就开始调用 API

第三步:返回结果

将 main.js 的 stdout 解析 JSON,取 document.content 字段作为合同正文展示给用户。

返回规则:

  • ✅ 提取 document.content 字段作为合同正文(Markdown 中间产物)
  • ✅ 保留 document.content 中的所有换行、空格、格式符号(一字不差,转排版时不得丢字改字)
  • ❌ 禁止 将 stdout JSON 的其他字段(success、contract、task 等)展示给用户
  • ❌ 禁止 对 document.content 做任何总结、删减、自行改写内容
  • ⚠️ Markdown 不是最终交付物:须按下方「第四步」排版转 Word 后再交付

正确示范(用户看到的): ```

【劳动合同】

【甲方信息】

名称:
统一社会信用代码:
... ```

错误示范(禁止这样做): ``` { "success": true, "contract": { "id": "...", ... }, "document": { "content": "..." } } ```

stderr 中的进度日志(⏳ 登录中... / ✅ 任务提交成功 等)不展示给用户。

第四步:排版输出 Word(强制交付规范)

用户已声明:合同起草一律交付 Word(.docx)格式,不要 Markdown 格式。本条为强制规则,所有合同起草结果都必须遵守。

交付流程(每次起草成功都必须完整执行,不得省略):

  1. 从 stdout 解析出 document.content(Markdown 合同正文)→ 仅作为中间产物,禁止直接当作最终交付。
  2. 走 Word 生成链路排版并转换:先加载 tencent-docs-routing 判断文件类型,再按 tencent-docx 的 doc-formatter / doc-converter 流水线,把合同正文排版为 .docx(法律合同用 legal-contract 版式,正文逐字保留,占位符/待填项原样呈现)。
  3. 用文件展示能力(present_files)把 .docx 呈现给用户,作为唯一最终交付物。
  4. 文字回复只给简要说明(合同名称、字数、结构概览、待填占位符提醒等),禁止把整篇 Markdown 正文贴进聊天充当交付物。

规则优先级(重要): 本条(Word 交付)优先于本 Skill 及全局配置中「stdout 原样转发、不做任何加工」规则里涉及 document.content 展示的部分。「原样转发」仅保留适用于 API 错误/提示类消息 —— 如"次数不足"的 message 及购买链接等仍需原样展示给用户。

降级处理: 若 Word 转换链路不可用或转换失败,应告知用户失败原因;只有征得用户同意后,才允许以 Markdown 文本或 .md 文件作为临时交付,并明确说明并非正式 Word 版本。


认证方式

方式一:手机号验证码(推荐,认证后自动激活试用资格)

# 发送验证码
node <skill_dir>/scripts/main.js --auth-phone 你的手机号

# 完成认证(验码 → 换凭证 → 登录 → 激活试用资格)
node <skill_dir>/scripts/main.js --auth-phone 你的手机号 --auth-code 收到的验证码

方式二:环境变量凭证(线下发放)

如果已安装 xiaobaogongai-law Skill 并完成配置,本 Skill 可直接复用,无需重新认证。

首次使用前,请配置环境变量(凭证由线下方式发放):

export appid=你的appid
export appsecret=你的appsecret
# 可选
export baseUrl=https://www.xiaobaogong.com

也可写入 config.json 作为回退配置。两种方式任选其一即可。

必填参数

起草合同需要以下必填参数:

| 参数 | 说明 | 示例 | |------|------|------| | --class | 合同类别 | 买卖合同、租赁合同、劳动合同等 | | --entity | 我方主体名称 | 深圳市xxx公司 | | --role | 我方角色 | 甲方 / 乙方 / 第三方 | | --status | 我方在合同起草中的地位 | 强势 / 平等 / 弱势 |

选填参数:

| 参数 | 说明 | 示例 | |------|------|------| | --desc | 其他起草要求 | "需要包含违约金条款" | | --third | 当 role 为第三方时必填 | 第三方名称 |

使用方法

# 标准用法
node <skill_dir>/scripts/main.js --class 买卖合同 --entity 深圳xxx公司 --role 甲方 --status 平等

# 带附加要求
node <skill_dir>/scripts/main.js --class 租赁合同 --entity 北京xxx公司 --role 乙方 --status 弱势 --desc "租期5年"

# 第三方角色
node <skill_dir>/scripts/main.js --class 劳动合同 --entity xxx公司 --role 第三方 --third xxx人力资源公司 --status 平等

参数缺失提示

当用户未提供完整参数时,脚本会提示缺失内容:

❌ 请补充以下必填参数:
   - 合同类别(--class)
   - 我方主体名称(--entity)
   - 我方角色(--role)
   - 合同地位(--status)

输出规范

脚本通过 stdout 输出 JSON 格式的起草结果,包含合同ID、任务ID、字数、附件ID等信息。

stderr 输出执行进度日志,不展示给用户。

交付格式:document.content 是 Markdown 中间产物,最终交付必须按「第四步」排版转成 Word(.docx)。

合同起草结果

{
  "success": true,
  "contract": {
    "id": "1f53afee38b748baa807b169c04fd668",
    "name": "买卖合同",
    "role": "甲方"
  },
  "task": {
    "id": "fafc5f54631445a298c4ee75752f54a9",
    "className": "买卖合同",
    "entityName": "小包公",
    "role": "甲方",
    "status": "平等",
    "desc": "",
    "startTime": 1766734685056,
    "endTime": 1766734695056,
    "wordCount": 2269,
    "fileIds": ["57db60ec45754b72b54d4688ae1014cb"]
  },
  "message": "合同《买卖合同》起草完成,共 2269 字,附件ID: 57db60ec45754b72b54d4688ae1014cb"
}

安全规则

  • 敏感信息保护:appid 和 appsecret 不会在 stdout 或 stderr 中明文输出
  • 优先从环境变量读取凭证,可回退 config.json
  • 所有接口地址跟随 baseUrl 配置,支持环境切换

🔴 全局配置建议(可选,须用户确认)

本 Skill 建议将以下规则写入全局配置文件以获得最佳效果。如检测到缺失,AI 必须先向用户展示将要写入的完整内容,并征得用户明确同意后方可写入;未经用户同意,禁止自动修改任何全局配置文件。

⚠️ 与 v1.4「Word 交付强制规范」的衔接:下列全局规则中「stdout 原样转发」约束的是不得加工 API 输出这一行为;合同正文最终须按本文档「第四步」转为 Word 交付。二者不冲突 —— Markdown 是中间产物,Word 才是最终交付。

AGENTS.md 需确保包含以下内容:

## 🔴 xiaobaogongai-contract-drafting Skill 专属规则:stdout 原封不动转发

> **适用范围:仅限 `xiaobaogongai-contract-drafting` Skill。**

当使用 `xiaobaogongai-contract-drafting` 的 `main.js` 时:

**Skill 的 stdout 输出 = 给用户的回复**

### 绝对禁止
- ❌ 对 Skill 输出做任何加工、总结、改写
- ❌ 添加前缀或后缀
- ❌ 重新排版、删减、补充内容
- ❌ 用自己的话重新组织 Skill 的输出

### 必须做到
- ✅ 收到 Skill 的 stdout 后,直接作为回复发送给用户
- ✅ 不做任何修改,一字不差地转发
- ✅ 不添加任何额外内容

### 次数不足处理规则(强制)

当 Skill 返回 `success: false` 且 `error: "次数不足"` 时:

**必须:**
- ✅ 解析 stdout JSON,提取 `message` 字段
- ✅ 将 `message` 字段内容原封不动展示给用户(包含购买链接)
- ✅ 告知用户需要购买次数才能继续使用

**用户购买后的处理(强制):**
- ✅ 当用户明确表示"已购买"、"购买完成"、"次数已充值"等时,**必须立即重新调用 Skill 接口**
- ✅ 不得重复显示之前的购买提示
- ✅ 不得缓存之前的"次数不足"状态
- ✅ 每次用户请求都必须重新调用接口,获取最新状态

**禁止:**
- ❌ 自行回答用户问题(绕过 Skill)
- ❌ 忽略购买链接,不展示给用户
- ❌ 对 `message` 内容做任何加工或改写
- ❌ 用户购买后仍重复提示购买,不重新调用接口

**示例:**

用户:我要起草一份劳动合同 AI:调用 main.js → 返回 { success: false, error: "次数不足", message: "您的使用次数已使用完毕..." } AI:将 message 字段内容直接展示给用户

用户:我已经购买了 AI:重新调用 main.js → 获取最新状态 AI:如果返回 success: true,正常展示 document.content AI:如果仍返回次数不足,再次展示购买提示(可能是延迟)


### 工作流程

用户提出起草合同需求 ↓ 判断必填参数是否完整(class, entity, role, status) ↓ 参数完整 → 调用 xiaobaogongai-contract-drafting/main.js 提交起草任务 ↓ 等待脚本执行完成,获取 stdout ↓ 直接将 stdout 发送给用户(不做任何修改) ↓ 结束


### 参数完整性判断

起草合同前,必须确认以下必填参数:
1. **合同类别(--class)**:如买卖合同、租赁合同、劳动合同等
2. **我方主体名称(--entity)**:公司名或个人姓名
3. **我方角色(--role)**:甲方 / 乙方 / 第三方
4. **合同地位(--status)**:强势 / 平等 / 弱势

若任一必填参数缺失,应提示用户补充,不得擅自编造。

### 错误处理

如果 `xiaobaogongai-contract-drafting` 调用失败(非零退出码):
- 简要告知用户调用失败
- 说明错误原因(从 stderr 获取)
- 不要编造合同内容

### Skill 调用方式

```bash
node <skill_dir>/scripts/main.js --class 买卖合同 --entity 深圳xxx公司 --role 甲方 --status 平等
  • 标准输出(stdout)→ 给用户的回复内容
  • 标准错误(stderr)→ 执行进度日志,不展示给用户

### SOUL.md 需确保包含以下内容:

```markdown
## 合同起草工作流程

1. **接收需求** → 用户提出起草合同需求
2. **判断参数** → 确认必填参数是否完整
3. **调用 Skill** → 使用 `xiaobaogongai-contract-drafting` 提交起草任务
4. **原样转发** → 将 stdout 输出**原封不动**地发送给用户
5. **不加工** → 不添加任何额外内容

## 合同起草参数要求

**必填参数(缺一不可):**
- 合同类别(class):如买卖合同、租赁合同、劳动合同等
- 我方主体名称(entity):公司名或个人姓名
- 我方角色(role):甲方 / 乙方 / 第三方
- 合同地位(status):强势 / 平等 / 弱势

**选填参数:**
- 其他起草要求(desc):用户补充的特殊条款
- 第三方名称(third):当 role 为第三方时必填

## 行为准则

**参数完整性。** 起草合同前必须确认所有必填参数,参数缺失时提示用户补充,不得擅自编造。

**专业严谨。** 合同内容涉及法律效力,必须确保信息准确,不得随意篡改 API 返回结果。

**实务导向。** 给出可操作的建议,如合同审查、下载途径等。

## 免责声明

涉及重大合同事项时,应提醒用户:「以上内容仅供参考,具体合同建议咨询专业律师。」

## 边界

- 不做司法裁判,只提供起草参考
- 不代替律师签署法律文件
- **xiaobaogongai-contract-drafting Skill 的输出禁止任何加工、总结、改写**

首次安装后检查清单(须用户确认)

AI 在首次加载本 Skill 时,可执行以下检查。未经用户明确同意,禁止对 AGENTS.md、SOUL.md 或任何全局配置文件进行写入、追加或修改。

  1. 检查 AGENTS.md 是否包含「xiaobaogongai-contract-drafting Skill 专属规则」章节

    • 如缺失,向用户展示将要追加的完整内容,征得用户明确同意后方可追加
  2. 检查 SOUL.md 是否包含「工作流程」和「xiaobaogongai-contract-drafting Skill 的输出禁止任何加工」相关规则

    • 如缺失,同样先展示内容并征得用户明确同意后方可追加
  3. 用户拒绝或未确认时,AI 直接遵循本 SKILL.md 中的规则运行,不修改任何全局配置文件

注意:本 Skill 的全部行为约束已完整包含在本 SKILL.md 中,AI 直接遵循本文件即可正常工作;任何对全局配置文件的修改都必须以用户明确确认为前提。