deerflow-code/offline-backend-20260512/backend/skill-packages/add-audience/docs/调用与安装说明.md
2026-09-07 18:24:55 +08:00

4.7 KiB
Raw Blame History

add-audience 技能 · 安装与调用说明

把「添加受众目标」的完整接口链路封装给大模型调用:模型写好受众 JSON → 脚本登录任务系统 → 自动执行查重、删除同名(含关系表)、创建受众与账号关联 → 把每个接口的入参与调用结果如实回报给用户。

一、安装

方式 A(推荐):在技能管理界面上传 add-audience.skill(本质是 zip,内含 add-audience/ 目录:SKILL.md + config + scripts)。

方式 B(手工):把 add-audience/ 目录解压到 DeerFlow 后端的 skills/custom/ 下,然后调用一次 POST /skills/reconcile-custom 收编注册。

安装后技能名:add-audience。若安装到 public,文档中的 /mnt/skills/custom/... 路径对应换成 /mnt/skills/public/...。

二、配置(config/audience_api.json)

配置项 默认值 说明
base_url http://127.0.0.1:4913 任务系统地址(到端口,不带 /api);按实际环境修改,如 http://192.168.1.11:3912
username / password admin / ch@user 登录账号,取自前端登录页写死的默认值,可自行修改
auth.* /api/auth/login + Authorization: Bearer {token} 登录路径、token 字段与请求头拼装规则,一般不用动
endpoints.* /api/task/task-action-design 等 完整链路涉及的全部接口路径
request.verify_ssl false 已关闭 HTTPS 证书校验,适配自签证书内网;公网环境建议改 true
request.timeout_seconds 30 单请求超时

环境变量覆盖:AUDIENCE_API_BASE_URL、AUDIENCE_API_USERNAME、AUDIENCE_API_PASSWORD、AUDIENCE_API_VERIFY_SSL。

三、鉴权与请求头

  1. 脚本先 POST {base_url}/api/auth/login,请求体 {"username": "...", "password": "..."};
  2. 从响应取 access_token;
  3. 后续所有业务请求附加请求头 Authorization: Bearer {access_token}(即 auth.header_name + auth.header_template)。

证书校验通过 Python ssl 上下文关闭(verify_ssl=false 时),HTTPS 自签名证书可直接访问。

四、完整调用链

对载荷中的每个受众组依次执行:

步骤 接口 说明
1 POST /api/auth/login 登录换 token
2 GET /api/task/task-action-design?filter=taskId&filter=actionId 查当前行动下已有受众(查重)
3a GET /api/task/task-action-design-pathway-relation?filter=actionId 查关系表,找同名受众的 pathwayId
3b DELETE /api/task/task-action-pathway-account/{pathwayId} 逐条删除关系表记录(同名时)
3c DELETE /api/task/task-action-design/deleteDesignVulns?designId={id} 删除受众关联脆弱点(同名时)
3d DELETE /api/task/task-action-design/{id} 删除同名旧受众本身
4 POST /api/task/task-action-design 创建受众目标,parentTargetAudience 固定 大模型生成,recReason 自动清洗 <n> 引用标记
5 POST /api/task/task-action-design-account(每账号一次) 字段映射:accountId←user.id、accountName←user.name、accountPlat←user.platformType、accountSource←user.dataSource(缺失回退 user.score)、frofileInfo←整个user对象JSON、designId←步骤4返回id

五、载荷格式

{
  "taskId": 101,
  "actionId": 201,
  "audienceList": [
    {
      "targetAudience": "18-30岁智能穿戴尝鲜用户",
      "recReason": "对新形态设备接受度高……",
      "userList": [ { "id": "...", "name": "...", "platformType": 1, "dataSource": "target", "...": "完整user对象" } ]
    }
  ]
}

targetAudience 也可写作 groupName(对齐前端对话链路字段名)。

六、输出与验证

脚本 stdout 输出单段 JSON:

  • 入参摘要:taskId/actionId 与各受众组(名称、清洗后理由、账号数)
  • calls:每个接口的 method/url/请求体(密码、token 脱敏)/HTTP 状态/响应
  • groups:每组结果(designId、新增账号数、删除的旧受众及关系表记录数)
  • summary / 人读摘要:统计与人读结论

验证是否真正入库:GET {base_url}/api/task/task-action-design?filter=taskId||$eq||{taskId} 与 .../task-action-design-account?... 应能看到新建记录。

七、注意事项

  • 密码明文存于 config,部署环境请控制文件访问权限,或改用环境变量注入。
  • 同名受众默认「先删后建」(与前端对话链路一致);需要跳过语义时应先改造脚本再加策略参数。
  • 业务失败(如创建受众返回非 201)时脚本继续处理其余受众组,整体 success=false,退出码 2;登录失败立即退出,退出码 1。