92 lines
5.0 KiB
Markdown
92 lines
5.0 KiB
Markdown
# 受众群体 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` 不是数组(如传了对象或字符串)
|