feat: 专员 JSON 配置体系 + 配图提示词规则重构

- 新增配图提示词 JSON 规则(image_prompt.json):封面图 + 每 500 字按字数分布
- 新增 Go 配置加载器(weixin_public_account_image_prompt_config.go):从嵌入的 spec 目录读取 JSON 配置
- 新增 weixin_public_account 完整 spec 目录:skill.md, workflow.json, domains.json, policy.json, validators/
- 新增 pj0012 参考文件(pj0012-wechat-image-spec.md):配图规则 + 专员 JSON 定义体系
- 产物 Tab 添加下载按钮 + 整体导出区
- 修复前端 Markdown 渲染 bug + 步骤消息分段问题

所有专员定义向 JSON 配置迁移,以 weixin_public_account 为样板。
This commit is contained in:
eaiadmin
2026-09-24 23:01:06 +08:00
parent 89ae31c998
commit 011f722999
23 changed files with 1642 additions and 18 deletions
@@ -0,0 +1,224 @@
# pj0012 配图提示词规则参考
> 来源:/home/eaiadmin/eaifiles/codebase/pj0012-aiw-mbai-u/
> 用于指导 pj0235 的配图提示词规则设计。
## 一、整体架构
pj0012 将配图规则完全外置为 **JSON 配置文件 + Markdown 提示词模板**,代码层不做硬编码。
```
config/wechat/
├── skills/wechat_article_skill_ITandAI/
│ ├── prompts/image_prompt_generate.prompt.md # 提示词模板
│ ├── validators/image.validator.json # 验证规则
│ └── retries/retry-policy.json # 重试策略
├── wechat_default_image_requirements.json # 默认配图要求
├── wechat_working_image_requirements.json # 运行时配图要求
└── accounts/<account_id>/wechat_working_image_requirements.json # 账号级覆盖
```
## 二、配图提示词生成规则
### 2.1 分布规则
- **标题下方主图**(`TITLE_PIC`):第 1 段对应,1 张,16:9 横图
- **段落配图**(`IMAGE_PROMPT_01`, `IMAGE_PROMPT_02`...):按正文段落 1:1 生成
- **正文分割方式**:按 `#` 标题或双空行分割为段落
### 2.2 括号标记格式
配图提示词以括号标记形式嵌入正文,格式为:
```
[槽位名: 提示词内容, size: 宽x高]
```
示例:
```markdown
[ TITLE_PIC: 封面配图提示词, size: 1024x576 ]
[ IMAGE_PROMPT_01: 第1段配图提示词, size: 1024x576 ]
[ IMAGE_PROMPT_02: 第2段配图提示词, size: 1024x576 ]
```
每个标记插入在对应段落下方,后续图片生成步骤从中解析出 key、prompt、size。
### 2.3 提示词模板
```
真实人物纪实摄影,公众号文章配图,第{N}段核心画面,{段落内容摘要120字},构图清晰,主体突出,电影感光影,细节丰富,高清
```
**模板要素**:
- 风格前缀:`真实人物纪实摄影,公众号文章配图`
- 序号:`第{N}段核心画面`
- 内容摘要:段落内容截断至 120 字
- 视觉要求:`构图清晰,主体突出,电影感光影,细节丰富,高清`
- 长度约束:**40-70 个中文字**
### 2.4 全局规则(image.validator.json)
| 规则 | 说明 |
|------|------|
| 必须包含主体 | 每个提示词必须描述画面主体 |
| 必须包含场景 | 每个提示词必须描述画面场景 |
| 必须包含光线 | 每个提示词必须描述光线效果 |
| 禁止文字覆盖 | 不允许提示词中包含文字说明 |
| 禁止拼贴风格 | 不允许拼贴/ collage 风格 |
| 段落映射完整 | 段落数必须与提示词数一致 |
### 2.5 重试策略
- 默认最大重试次数:2 次
- 每次重试将失败的检查项反馈给 LLM
- 重试耗尽后降级为模板拼接(兜底)
### 2.6 图片规格
| 属性 | 值 |
|------|------|
| 尺寸比例 | 16:9 横版 |
| 分辨率 | 1792x1024 |
| 提示词标签 | 1024x576 |
### 2.7 账号级风格覆盖
每个账号可独立配置图片风格,存储在 `wechat_working_image_requirements.json`:
| 账号 | 风格 | 数量策略 |
|------|------|---------|
| default | 真实人物纪实摄影 | 按正文段落数量生成 |
| account | 美食摄影风格 | 根据菜品种类灵活配图 |
| account-01a312 | 通信科技行业视觉 | 关键概念一图一景 |
| account-73971d | 未来科技自然动感 | 按技术模块分层展示 |
## 三、专员 JSON 定义体系
### 3.1 技能包(Skill Package)结构
```
config/{workspace}/skills/{skill_name}/
├── SKILL.md # 技能描述 + 执行策略
├── prompts/
│ ├── {step_id}.prompt.md # 步骤提示词模板(YAML 变量注入)
│ └── ...
├── validators/
│ ├── {step_id}.validator.json # 验证规则
│ └── ...
├── styles/
│ ├── style-01-*.json # 文体变体
│ └── ...
├── retries/
│ └── retry-policy.json # 重试策略
└── fallbacks/
├── fallback-policy.json # 降级策略
└── {step_id}.fallback.json # 步骤级降级资产
```
### 3.2 配置文件分类
| 类型 | 文件 | 内容 | 读取时机 |
|------|------|------|---------|
| 技能描述 | SKILL.md | 名称、描述、适用场景、执行流程 | 路由选择 |
| 提示词模板 | prompts/*.prompt.md | LLM 提示词({{变量}} 注入) | 步骤执行 |
| 验证规则 | validators/*.json | 检查清单、质量规则、重试反馈 | 输出验证 |
| 文体变体 | styles/*.json | 风格偏好、关注点、验证器强调 | 步骤执行 |
| 重试策略 | retries/*.json | 每步骤最大重试次数、策略 | 循环控制 |
| 降级资产 | fallbacks/*.json | 降级提示词、默认值 | 重试耗尽 |
| 业务数据 | *_working_*.json | 当前活跃配置(无缓存) | 运行时 |
### 3.3 提示词模板格式
```markdown
# prompts/outline_generate.prompt.md
# Role
You are the `outline_generate` draft executor for `wechat_article_skill_ITandAI`.
# Goal
Generate the first draft of...
# Runtime Context
{{runtime_inputs}} # 运行时注入
# Contract Excerpt
{{contract_excerpt}}
# Validator Excerpt
{{validator_excerpt}}
```
变量解析:`prompt.replace("{{var_name}}", value)`
### 3.4 验证器 JSON 结构
```json
{
"step_id": "outline_generate",
"checks": ["markdown_structure", "required_sections", ...],
"word_budget_rules": { ... },
"repair_strategy": {
"mode": "draft_then_repair",
"repair_prompt_asset": "prompts/outline_repair.prompt.md",
"reuse_last_draft_on_next_round": true
},
"quality_rules": {
"min_bullet_chars": 18,
"ban_generic_patterns": ["^先用.+切入", ...],
"placeholder_phrases": ["相关信号", ...]
},
"retry_feedback_template": "The outline draft failed validation. Fix: {failed_checks}"
}
```
### 3.5 重试策略 JSON 结构
```json
{
"default_max_retries": 2,
"step_overrides": {
"hot_topic_extract": 1,
"topic_refine": 1,
"outline_generate": 2,
"content_generate": 2,
"image_prompt_generate": 2,
"pagemd_prepare": 0
},
"policy": {
"regenerate_fully": true,
"include_failed_checks_in_feedback": true,
"allow_partial_patch": false
}
}
```
### 3.6 多账号覆盖机制
```
config/wechat/ # 全局默认
├── wechat_working_image_requirements.json
├── wechat_working_outline_templates.json
└── accounts/
├── default/ # 默认账号覆盖
├── account/ # 账号 "account" 覆盖
└── account-01a312/ # 账号 "account-01a312" 覆盖
├── wechat_working_image_requirements.json
└── wechat_working_outline_templates.json
```
加载优先级:`accounts/{account_id}/` → 全局默认 → 硬编码兜底
### 3.7 热更新机制
- 每次请求重新读取 JSON 文件,**不缓存**
- 修改配置文件后下次请求即生效,**无需重启**
- 文件不存在时返回空字典(安全降级)
- 解析异常时返回空字典(安全降级)
## 四、核心设计原则
1. **三层分离**:Contract(契约层,人可读)→ Truth(数据层,机器可读)→ Skill(执行层,代码适配)
2. **代码是运行时适配器**:按路径读取 JSON/文本 → 注入运行时参数 → 执行验证 → 控制重试 → 调用 LLM
3. **不硬编码业务内容**:业务规则变更全部通过修改 JSON/Markdown 实现
4. **优先级链**:运行时配置 > 全局默认 > 账号覆盖 > 硬编码兜底