deerflow-code/offline-backend-20260512/backend/skill-packages/add-audience/docs/受众JSON生成规范.md
2026-09-07 18:24:55 +08:00

92 lines
5.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 受众群体 JSON 生成规范(add-audience 载荷)
本规范规定大模型生成「受众群体入库载荷」时的 JSON 格式。生成后写入文件,交由 `scripts/add_audiences.py --json <文件>` 执行入库。
## 一、整体结构
```json
{
"taskId": 101,
"actionId": 201,
"audienceList": [
{
"targetAudience": "18-30岁智能穿戴尝鲜用户",
"recReason": "对新形态设备接受度高<2>,预热期讨论参与意愿强,是首发销量的核心贡献人群",
"userList": [
{
"id": "mock_fa_0001",
"name": "极客评测室GeekBench",
"platformType": 1,
"platform": "facebook",
"followers_count": 285200,
"interactions": 12713,
"issue": "真无线耳机;手机周边;数码开箱;",
"dataSource": "target",
"score": 0.9276,
"page_content": "数码科技领域创作者「极客评测室GeekBench」……",
"metadata": {
"screen_name": "极客评测室GeekBench",
"user_id": "mock_fa_0001",
"平台": "facebook",
"发文": [],
"用户画像": { "粉丝数": 285200, "内容垂类": "数码科技" }
}
}
]
}
]
}
```
## 二、字段定义
### 顶层
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `taskId` | integer | ✅ | 当前任务 ID。**必须取自用户上下文/前端传入,禁止编造**;未知时先向用户询问 |
| `actionId` | integer | ✅ | 当前行动 ID。同上 |
| `audienceList` | array | ✅ | 受众组数组,**至少 1 项**;按推荐优先级排序(S 级在前) |
### audienceList 每项
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `targetAudience` | string | ✅ | 受众群体名称。去掉首尾空格后非空;**同一载荷内不得重名**;简洁(建议 ≤ 20 字),如「中高端降噪耳机通勤党」。不要写 `groupName`,统一用本字段 |
| `recReason` | string | 推荐 | 入选理由,一两句话。文本中的 `<数字>` 引用标记、顿号、「引用」、空括号会被脚本自动清洗,无需预处理;但也不要故意堆这些符号 |
| `userList` | array | ✅ | 该群体关联的账号数组,**必须为数组**(允许空数组 `[]`,表示只建群体不挂账号) |
### userList 每项(账号对象)
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `id` | string\|number | ✅ | 账号唯一标识 → 写入接口字段 `accountId` |
| `name` | string | ✅ | 账号名 → 写入 `accountName` |
| `platformType` | integer | 建议 | 平台编码 → 写入 `accountPlat`(facebook=1、x=2、instagram=3、threads=5、youtube=6、tiktok=7) |
| `platform` | string | 建议 | 平台名(供人读) |
| `followers_count` | integer | 建议 | 粉丝数 |
| `interactions` | integer | 可选 | 近 30 天均篇互动 |
| `issue` | string | 可选 | 关注话题串,如 `"真无线耳机;数码评测;"` |
| `dataSource` | string | 建议 | 数据来源(`target` / `social` / `AI_LLM`)→ 优先写入 `accountSource` |
| `score` | number 0-1 | 可选 | 相关度分数;**仅当无 `dataSource` 时**作为 `accountSource` 的回退值 |
| `page_content` | string | 建议 | 账号描述正文 |
| `metadata` | object | 强烈建议 | 完整画像对象(`用户画像`、`发文` 等)。**整个 user 对象会原样 JSON 序列化存入 `frofileInfo`**,字段越全,后续页面回显与二次分析越完整 |
## 三、生成规则(生成侧模型必须遵守)
1. **账号必须来自真实数据源**:`userList` 的账号对象必须从账号池(如 `product-account-matching` 技能的 `accounts.json`,用 `query_accounts.py --full` 取完整档案)或对话引用中**原样复制**,禁止虚构 id/name/粉丝数等任何字段。
2. **ID 不编造**:`taskId` / `actionId` 只能取自当前对话上下文;用户没给就先问,不要猜。
3. **同名覆盖语义要告知**:目标系统里已存在同名 `targetAudience` 时,执行脚本会**先删除旧受众(连带其传播节点关系表与脆弱点关联)再新建**。生成前如已知会覆盖,需在回复中向用户说明。
4. **群体划分有依据**:`targetAudience` 的划分角度(垂类/场景/人群)与 `recReason` 的理由需与账号池数据(内容垂类、关注话题、发文、受众画像)对得上,理由中可引用具体账号名。
5. **输出为纯 JSON**:写入 `.json` 文件时最外层就是对象,不要包裹 markdown 代码块、注释或多余文本。
6. **数量适中**:单次建议 2-6 个受众组,每组 3-15 个账号;超出时按 `score` 与推荐优先级裁剪。
## 四、校验失败常见原因
脚本会前置校验载荷,以下错误会直接退出(不做任何写入):
- `taskId` / `actionId` 不是整数(如传了 `"101"` 字符串)
- `audienceList` 为空或缺失
- 某组 `targetAudience`(或 `groupName`)为空/纯空格
- 某组 `userList` 不是数组(如传了对象或字符串)