模式库接口
让 AI 读取已脱敏的项目资料,起草模式库条目并提交为草稿。
以下接口的完整地址都以 https://api.yqpj.com/app-api/project/open-api 开头,请求头带 X-Api-Key: <你的密钥>。
命令行把两个接口串成一步:yqpj-agent model-draft <项目名 | 业务编号 | 编号> [--dry-run] 先拉项目资料,交给本机 AI 按起草规约生成条目,校验结构后提交草稿;yqpj-agent model-draft --all 对你已上线、维护中的项目逐个起草,已有草稿的跳过。
GET /models/project-context 起草用的项目资料
返回 AI 起草模式条目需要的项目资料:需求正文、费用结构、状态与周期、仓库、可选的模式分类,以及这个项目对应草稿的链接标识与是否已有草稿。
所需权限:查看我的项目(PROJECT_READ),且你是项目创建者或已接受的开发者。
请求参数(查询串)
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
project | 文本 | 是 | 项目编号、业务编号或名称;纯数字(少于 19 位)按项目编号找 |
请求示例
GET /app-api/project/open-api/models/project-context?project=34返回示例
{
"code": 0,
"data": {
"projectId": 34,
"maskedName": "钱**务",
"status": "MAINTAINING",
"statusLabel": "维护中",
"requirement": "(已脱敏的需求正文)",
"remark": null,
"devCycleMin": 30,
"devCycleMax": 45,
"cycleUnit": "DAY",
"dealTime": 1788192000000,
"testTime": 1791561600000,
"onlineTime": 1792425600000,
"maintainTime": 1792512000000,
"endTime": null,
"actualDevDays": 49,
"participantCount": 2,
"fees": [
{ "category": "开发费", "categoryCode": "dev", "amount": 5500, "currency": "USDT",
"chargeType": "ONCE", "period": null, "remark": null }
],
"repos": [ { "repo": "github.com/***/wallet", "branch": "master", "repoRemote": "github.com/acme/wallet", "localBranch": "master" } ],
"modelCategories": [ { "id": 3, "code": "distribution", "name": "分销返佣" } ],
"draftSlug": "ai-case-34",
"draftModelId": null,
"draftStatus": null
},
"msg": ""
}说明
- 脱敏:项目名只给脱敏名称;需求、备注、费用备注、分支里出现的项目名和参与方名称都会被替换;仓库只留平台与仓库名。另附
repoRemote(规范化的 host/owner/repo,不含账号口令)与localBranch(原始分支名),只供本机命令行找本地代码目录,不交给 AI。 - 提交草稿时
devDaysMin/Max、priceMin/Max不知道就传 null;传 0 或负数会被当成 null。 actualDevDays为成交到上线的实际天数,任一日期缺失时为空。modelCategories是当前启用的模式分类,起草时从中选一个填categoryId。- 一个项目一条草稿:
draftSlug固定为ai-case-<项目编号>,用它提交草稿,重复起草会更新同一条。已有时draftModelId、draftStatus有值。
POST /models/draft 提交 AI 起草的条目
把起草好的模式条目存为草稿,来源记为 AI 起草,之后由人工在后台审阅发布。
所需权限:新建项目(PROJECT_WRITE)。
请求参数
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
slug | 文本 | 是 | 链接标识:小写字母、数字、中划线,以字母或数字开头,2~80 位(大写会转小写) |
title | 文本 | 是 | 标题,最长 100 字 |
categoryId | 数字 | 是 | 分类编号,须是已存在的分类 |
summary | 文本 | 是 | 一句话摘要,最长 300 字 |
tags | 文本数组 | 否 | 标签 |
scenarios | 文本 | 否 | 适用场景(Markdown) |
roles | 数组 | 否 | 角色与权益,每项:role 角色、gives 付出、gets 获得 |
fundFlow | 对象 | 否 | 资金流向:nodes(id、label)与 edges(from、to、label) |
rules | 数组 | 否 | 规则参数表,每项:name、value、unit、note |
economics | 文本 | 否 | 经济模型推演(Markdown) |
sustainability | 文本 | 否 | 可持续性分析(Markdown) |
riskLevel | 枚举 | 否 | 风险等级:LOW / MEDIUM / HIGH / EXTREME |
riskPoints | 文本数组 | 否 | 风险要点 |
complianceNote | 文本 | 否 | 合规提示 |
devModules | 数组 | 否 | 开发要点,每项:module、note |
devDaysMin / devDaysMax | 整数 | 否 | 开发天数下限 / 上限 |
priceMin / priceMax | 金额 | 否 | 参考报价下限 / 上限 |
priceCurrency | 枚举 | 否 | CNY / USD / USDT |
caseProjectIds | 数字数组 | 否 | 关联的平台项目编号(展示时只给脱敏名称与状态) |
difficulty | 枚举 | 否 | 难度:EASY / MEDIUM / HARD |
simTemplate | 枚举 | 否 | 测算器模板:FUND_POOL;不填表示不提供测算器 |
simDefaults | 对象 | 否 | 测算参数默认值(覆盖模板默认),如 {"ticket": 1000} |
simVisibleParams | 文本数组 | 否 | H5 显示的测算参数编码,空为全部 |
请求示例
{
"slug": "ai-case-34",
"title": "三级分销会员",
"categoryId": 3,
"summary": "会员购买后按三级关系返佣的推广模式",
"tags": ["分销", "会员"],
"roles": [
{ "role": "推广员", "gives": "购买会员 199 元", "gets": "下级消费 10% 返佣" }
],
"rules": [
{ "name": "一级返佣", "value": "10", "unit": "%", "note": "按实付金额" }
],
"riskLevel": "MEDIUM",
"riskPoints": ["层级过多可能触及合规红线"],
"devDaysMin": 30,
"devDaysMax": 45,
"priceMin": 5000,
"priceMax": 8000,
"priceCurrency": "USDT",
"caseProjectIds": [34],
"difficulty": "MEDIUM"
}返回示例
{
"code": 0,
"data": { "id": 17, "slug": "ai-case-34", "status": "DRAFT" },
"msg": ""
}规则说明
- 同 slug 更新:该链接标识还没有条目时新建草稿;已有草稿时用本次内容更新它。
- 不覆盖已发布内容:同 slug 已有条目且不是草稿时拒绝提交。
- 标题、分类、一句话摘要缺失,或分类不存在时报错。