用户提问与分类管理
查询品牌下的用户提问
- 请求方法:POST
- 请求路径:
/geo/api/prompt/get
说明:
prompt_ids、title_ids、tag_ids、models不传或传空数组时,表示不按对应条件筛选。tag_ids用于按标签筛选,models用于按模型名称筛选。- 返回结果中的
tags为用户提问绑定的标签,models为绑定的模型名称。
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
| brand_id | string | 品牌ID | 是 |
| prompt_ids | string 数组 | 用户提问ID列表 | 否 |
| page | int | 页码,从 1 开始;不传或小于 1 时默认 1 | 否 |
| page_size | int | 每页数量;不传或传 0 时默认 20,最大 100 | 否 |
| query_str | string | 用户提问关键字 | 否 |
| title_ids | string 数组 | 用户提问分类ID列表 | 否 |
| status | int | 用户提问状态:1-启用,2-禁用 | 否 |
| tag_ids | string 数组 | 标签ID列表 | 否 |
| models | string 数组 | 模型名称列表 | 否 |
响应参数:
| 返回值 | 类型 | 含义 |
|---|---|---|
| prompts | object 数组 | 用户提问列表 |
| prompts.prompt_id | string | 用户提问ID |
| prompts.brand_id | string | 品牌ID |
| prompts.title_id | string | 用户提问分类ID |
| prompts.title_name | string | 用户提问分类名称 |
| prompts.query_str | string | 用户提问内容 |
| prompts.status | int | 用户提问状态:1-启用,2-禁用 |
| prompts.tags | object 数组 | 用户提问绑定的标签 |
| prompts.tags.prompt_tag_id | string | 标签ID |
| prompts.tags.team_id | string | 团队ID |
| prompts.tags.tag_name | string | 标签名称 |
| prompts.tags.created_by | string | 创建人名称 |
| prompts.tags.created_time | int64 | 创建时间,Unix 毫秒时间戳 |
| prompts.models | string 数组 | 用户提问绑定的模型名称 |
| prompts.created_time | string | 用户提问创建时间 |
| total | int | 符合条件的用户提问总数 |
响应示例:
{
"code": 0,
"msg": "success",
"data": {
"prompts": [
{
"prompt_id": "prompt_test_001",
"brand_id": "brand_test_001",
"title_id": "title_test_001",
"title_name": "测试分类A",
"query_str": "测试品牌A适合哪些业务场景?",
"status": 1,
"tags": [
{
"prompt_tag_id": "tag_test_001",
"team_id": "team_test_001",
"tag_name": "产品体验",
"created_by": "test_user",
"created_time": "1735689600000"
}
],
"models": [
"model-a"
],
"created_time": "2026-01-01 10:00:00"
}
],
"total": 1
}
}标签使用说明:
- 用户提问标签由团队统一管理,可供团队内的品牌使用。
- 标签关系接口以
brand_id指定品牌;传入的用户提问须属于该品牌。 - 添加或移除标签关系时,
tag_ids须为该品牌所属团队下可用的标签。 - 本节中的标签均指用户提问标签;用户提问绑定的模型通过
models字段单独返回。
运行监控提问
- 请求方法:POST
- 请求路径:
/geo/api/prompt/run
说明:为已有且已启用的用户提问创建一批额外执行任务,不改变每日定时监控配置。调用所用的 API Key 须具有目标品牌的写权限。
run_count为每个提问在每个平台、每种启用模式上的执行次数,须为正整数。- 传入非空
platforms时,本次只按所选平台执行,覆盖提问模型标签对平台的选择;平台须已启用且在当前套餐支持范围内。不传或传空数组时,按当前监控配置与提问模型标签确定平台。 - 禁用提问和共享副本提问不支持通过此接口运行。创建禁用提问时触发本次运行,请使用创建接口的
run_immediately参数。 - 返回成功表示任务已创建,回答稍后生成,可通过回答查询接口获取。实际任务数和积分消耗按当前终端、思考模式等监控配置计算。
- 重复提交会额外创建任务并产生相应消耗,请勿将请求重试视为重复任务去重。
任务数与积分计算:
- 每个监控任务消耗 10 积分,对应评分消耗 10 积分,合计 20 积分/任务。
- 快速响应和深度思考是独立的执行模式。同时开启时,每次分别创建一个任务,
run_count对每种启用模式分别生效。 - 不区分 PC、手机的平台,只按启用模式计数。支持并已配置 PC、手机分别执行的平台,按各端启用的模式分别计数后相加。
- 监控任务数 =
run_count× 各提问实际执行的平台、模式组合数之和;对应评分按相同任务数计算。 - 预计消耗积分 = 监控任务数 × 10 + 评分任务数 × 10。各提问执行配置相同时,可简化为:提问数 ×
run_count× 各平台每次生成的任务数之和 × 20。
以下均以 1 条提问、1 个平台、run_count=1 为例:
| 执行配置 | 监控任务数 | 监控积分 | 评分积分 | 合计积分 |
|---|---|---|---|---|
| 不区分执行端,仅启用一种模式 | 1 | 10 | 10 | 20 |
| 不区分执行端,快速响应和深度思考均启用 | 2 | 20 | 20 | 40 |
| PC、手机均开启,各启用一种模式 | 2 | 20 | 20 | 40 |
| PC、手机均开启,一端启用两种模式,另一端启用一种模式 | 3 | 30 | 30 | 60 |
| PC、手机均开启,且各自启用快速响应和深度思考 | 4 | 40 | 40 | 80 |
提问数、实际执行平台数或 run_count 增加时,按实际任务数累加。例如上表最后一项的 run_count=2 时,创建 8 个监控任务及对应评分,预计消耗 160 积分。实际消耗以最终执行及评分结果为准。
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
| brand_id | string | 品牌ID,须在 API Key 授权范围内 | 是 |
| prompt_ids | string 数组 | 待执行的用户提问ID列表,须属于目标品牌且已启用 | 是 |
| run_count | int | 每个提问在每个平台、每种启用模式的执行次数,须为正整数 | 是 |
| platforms | string 数组 | 本次执行平台,如 yuanbao、doubao;非空时覆盖本次提问模型标签,不传或为空时沿用监控配置及提问模型标签 | 否 |
请求示例:
{
"brand_id": "10001",
"prompt_ids": ["30001", "30002"],
"run_count": 2,
"platforms": ["yuanbao"]
}响应参数:
| 返回值 | 类型 | 含义 |
|---|---|---|
| code | int | 0 表示成功 |
| msg | string | 结果说明 |
| data | object | 成功时为空对象,不包含回答内容 |
响应示例:
{
"code": 0,
"msg": "success",
"data": {}
}curl 示例(将地址、Key 和 ID 替换为实际值):
curl -X POST 'https://answerbit.qq.com/geo/api/prompt/run' \
-H 'X-API-Key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data-raw '{"brand_id":"10001","prompt_ids":["30001","30002"],"run_count":2,"platforms":["yuanbao"]}'新建用户提问标签
- 请求方法:POST
- 请求路径:
/geo/api/prompt/tag/create
说明:一次可新建多个标签。标签名称最长 64 个字符。
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
| team_id | string | 团队ID | 是 |
| tag_names | string 数组 | 标签名称列表 | 是 |
响应参数:
| 返回值 | 类型 | 含义 |
|---|---|---|
| tags | object 数组 | 新建的标签列表 |
| tags.prompt_tag_id | string | 标签ID |
| tags.team_id | string | 团队ID |
| tags.tag_name | string | 标签名称 |
| tags.created_by | string | 创建人名称 |
| tags.created_time | int64 | 创建时间,Unix 毫秒时间戳 |
响应示例:
{
"code": 0,
"msg": "success",
"data": {
"tags": [
{
"prompt_tag_id": "tag_test_001",
"team_id": "team_test_001",
"tag_name": "产品体验",
"created_by": "test_user",
"created_time": "1735689600000"
}
]
}
}更新用户提问标签
- 请求方法:POST
- 请求路径:
/geo/api/prompt/tag/update
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
| team_id | string | 团队ID | 是 |
| tag_id | string | 标签ID | 是 |
| tag_name | string | 新的标签名称,最长 64 个字符 | 是 |
响应参数:
接口调用成功时,返回空对象。
响应示例:
{
"code": 0,
"msg": "success",
"data": {}
}获取团队下的用户提问标签
- 请求方法:POST
- 请求路径:
/geo/api/prompt/tag/get
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
| team_id | string | 团队ID | 是 |
响应参数:
| 返回值 | 类型 | 含义 |
|---|---|---|
| tags | object 数组 | 团队下的标签列表 |
| tags.prompt_tag_id | string | 标签ID |
| tags.team_id | string | 团队ID |
| tags.tag_name | string | 标签名称 |
| tags.created_by | string | 创建人名称 |
| tags.created_time | int64 | 创建时间,Unix 毫秒时间戳 |
响应示例:
{
"code": 0,
"msg": "success",
"data": {
"tags": [
{
"prompt_tag_id": "tag_test_001",
"team_id": "team_test_001",
"tag_name": "产品体验",
"created_by": "test_user",
"created_time": "1735689600000"
}
]
}
}删除用户提问标签
- 请求方法:POST
- 请求路径:
/geo/api/prompt/tag/delete
说明:支持批量删除;仍被用户提问使用的标签不能删除。
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
| team_id | string | 团队ID | 是 |
| tag_ids | string 数组 | 标签ID列表 | 是 |
响应参数:
接口调用成功时,返回空对象。
响应示例:
{
"code": 0,
"msg": "success",
"data": {}
}获取品牌下单个用户提问绑定的标签
- 请求方法:POST
- 请求路径:
/geo/api/prompt/tag/relation/get
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
| brand_id | string | 品牌ID | 是 |
| prompt_id | string | 用户提问ID | 是 |
响应参数:
| 返回值 | 类型 | 含义 |
|---|---|---|
| tags | object 数组 | 用户提问绑定的标签列表 |
| tags.prompt_tag_id | string | 标签ID |
| tags.team_id | string | 团队ID |
| tags.tag_name | string | 标签名称 |
| tags.created_by | string | 创建人名称 |
| tags.created_time | int64 | 创建时间,Unix 毫秒时间戳 |
响应示例:
{
"code": 0,
"msg": "success",
"data": {
"tags": [
{
"prompt_tag_id": "tag_test_001",
"team_id": "team_test_001",
"tag_name": "产品体验",
"created_by": "test_user",
"created_time": "1735689600000"
}
]
}
}批量获取品牌下用户提问绑定的标签
- 请求方法:POST
- 请求路径:
/geo/api/prompt/tag/relation/batch
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
| brand_id | string | 品牌ID | 是 |
| prompt_ids | string 数组 | 用户提问ID列表 | 是 |
响应参数:
| 返回值 | 类型 | 含义 |
|---|---|---|
| relations | object 数组 | 用户提问与标签的绑定关系 |
| relations.prompt_id | string | 用户提问ID |
| relations.tags | object 数组 | 用户提问绑定的标签列表 |
| relations.tags.prompt_tag_id | string | 标签ID |
| relations.tags.team_id | string | 团队ID |
| relations.tags.tag_name | string | 标签名称 |
| relations.tags.created_by | string | 创建人名称 |
| relations.tags.created_time | int64 | 创建时间,Unix 毫秒时间戳 |
响应示例:
{
"code": 0,
"msg": "success",
"data": {
"relations": [
{
"prompt_id": "prompt_test_001",
"tags": [
{
"prompt_tag_id": "tag_test_001",
"team_id": "team_test_001",
"tag_name": "产品体验",
"created_by": "test_user",
"created_time": "1735689600000"
}
]
}
]
}
}为品牌下用户提问添加标签
- 请求方法:POST
- 请求路径:
/geo/api/prompt/tag/relation/add
说明:已有的绑定关系不会重复创建。
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
| brand_id | string | 品牌ID | 是 |
| prompt_id | string | 用户提问ID | 是 |
| tag_ids | string 数组 | 要添加的标签ID列表 | 是 |
响应参数:
接口调用成功时,返回空对象。
响应示例:
{
"code": 0,
"msg": "success",
"data": {}
}移除品牌下用户提问标签
- 请求方法:POST
- 请求路径:
/geo/api/prompt/tag/relation/remove
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
| brand_id | string | 品牌ID | 是 |
| prompt_id | string | 用户提问ID | 是 |
| tag_ids | string 数组 | 要移除的标签ID列表 | 是 |
响应参数:
接口调用成功时,返回空对象。
响应示例:
{
"code": 0,
"msg": "success",
"data": {}
}批量为品牌下用户提问添加标签
- 请求方法:POST
- 请求路径:
/geo/api/prompt/tag/relation/add/batch
说明:将 tag_ids 中的标签添加到 prompt_ids 中的每个用户提问,已有的绑定关系不会重复创建。
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
| brand_id | string | 品牌ID | 是 |
| prompt_ids | string 数组 | 用户提问ID列表 | 是 |
| tag_ids | string 数组 | 要添加的标签ID列表 | 是 |
响应参数:
接口调用成功时,返回空对象。
响应示例:
{
"code": 0,
"msg": "success",
"data": {}
}批量移除品牌下用户提问标签
- 请求方法:POST
- 请求路径:
/geo/api/prompt/tag/relation/remove/batch
说明:从 prompt_ids 中的每个用户提问移除 tag_ids 中的标签。
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
| brand_id | string | 品牌ID | 是 |
| prompt_ids | string 数组 | 用户提问ID列表 | 是 |
| tag_ids | string 数组 | 要移除的标签ID列表 | 是 |
响应参数:
接口调用成功时,返回空对象。
响应示例:
{
"code": 0,
"msg": "success",
"data": {}
}新建用户提问
- 请求方法:POST
- 请求路径:
/geo/prompt/create
说明:status 控制是否参与后续定时监控,run_immediately 独立控制创建后是否立即运行。即使 status=2,也可以通过 run_immediately=true 运行本次任务,提问仍保持禁用。不传 run_immediately 时默认不立即运行,无论提问是否启用。立即运行表示提交待执行任务,回答稍后生成,并按实际执行消耗积分。
创建后立即运行按当前监控频次及各执行端的思考模式创建任务。快速响应和深度思考同时开启时,两种模式分别生成任务并分别计费。按每个监控任务 10 积分、对应评分 10 积分计算,1 条提问在 1 个平台、1 个执行端,每种模式各执行 1 次时,预计共消耗 40 积分。
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
| brand_id | string | 品牌ID | 是 |
| title_id | string | 用户提问分类ID | 是 |
| query_str | string | 用户提问内容 | 是 |
| recommend_id | string | 关联推荐记录ID | 否 |
| status | int | 创建时的状态:1-启用,2-禁用;不传或传 0 默认启用,其他值不支持 | 否 |
| run_immediately | boolean | true-创建后立即运行;false-本次不运行。不传时默认 false,不影响后续定时监控 | 否 |
请求示例(立即运行本次任务,后续不定时监控):
{
"brand_id": "2062493060792594432",
"title_id": "2108503508733943808",
"query_str": "有哪些适合日常使用的产品推荐?",
"status": 2,
"run_immediately": true
}响应参数:
| 返回值 | 类型 | 含义 |
|---|---|---|
| id | string | 新建的 query ID |
响应示例:
{
"code": 0,
"msg": "success",
"data": {
"id": "prompt_test_001"
}
}更新用户提问
- 请求方法:POST
- 请求路径:
/geo/prompt/update
说明:该接口为局部更新(patch)语义。id、brand_id 必传;query_str 与 status 按传入内容更新,未传则不更新。注意:query_str 不能更新为空字符串,status=0 不表示更新。
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
| id | string | query ID | 是 |
| brand_id | string | 品牌ID | 是 |
| query_str | string | 用户提问内容;传入时更新 | 否 |
| status | int | 用户提问状态;传入时更新,支持:1-启用,2-禁用。0 不表示有效状态,仅表示不更新 | 否 |
响应参数:
接口调用成功时,返回空对象。
响应示例:
{
"code": 0,
"msg": "success",
"data": {}
}批量新建用户提问
- 请求方法:POST
- 请求路径:
/geo/prompt/create/batch
说明:status 与 run_immediately 统一应用于本批次全部提问。status 控制后续定时监控,run_immediately 控制本次是否立即运行,二者独立。禁用提问也可以立即运行本次任务。不传 run_immediately 时默认不立即运行,无论提问是否启用。立即运行表示提交待执行任务,回答稍后生成,并按实际执行消耗积分。
创建后立即运行按当前监控频次及各执行端的思考模式创建任务。快速响应和深度思考同时开启时,两种模式分别生成任务并分别计费。按每个监控任务 10 积分、对应评分 10 积分计算,1 条提问在 1 个平台、1 个执行端,每种模式各执行 1 次时,预计共消耗 40 积分。
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
| brand_id | string | 品牌ID | 是 |
| title_id | string | 用户提问分类ID | 是 |
| prompts | string 数组 | 用户提问内容列表 | 是 |
| recommend_ids | string 数组 | 关联推荐记录ID列表,与 prompts 一一对应;无关联时可填 -1 | 否 |
| status | int | 本批次全部新提问的状态:1-启用,2-禁用;不传或传 0 默认启用,其他值不支持 | 否 |
| run_immediately | boolean | 本批次是否创建后立即运行:true-立即运行;false-本次不运行。不传时默认 false | 否 |
请求示例(启用整批提问,本次不立即运行):
{
"brand_id": "2062493060792594432",
"title_id": "2108503508733943808",
"prompts": [
"有哪些适合日常使用的产品推荐?",
"选购同类产品时需要关注哪些因素?"
],
"status": 1,
"run_immediately": false
}响应参数:
| 返回值 | 类型 | 含义 |
|---|---|---|
| prompt_ids | string 数组 | 新建的用户提问ID 列表 |
响应示例:
{
"code": 0,
"msg": "success",
"data": {
"prompt_ids": [
"prompt_test_001",
"prompt_test_002"
]
}
}获取品牌下的用户提问列表(分组)
- 请求方法:POST
- 请求路径:
/geo/prompt/get/group
说明:
- 该接口用于获取品牌下的用户提问列表,按用户提问分类分组。
- 不传
begin_date和end_date时,默认查询最近 7 天;只传其中一个会返回参数错误。
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
| brand_id | string | 品牌ID | 是 |
| group_type | int | 分组类型:1-按用户提问分类 | 是 |
| begin_date | string | 开始日期,格式:YYYY-MM-DD | 否 |
| end_date | string | 结束日期,格式:YYYY-MM-DD | 否 |
| page | int | 页码 | 否 |
| page_size | int | 每页数量 | 否 |
| title_ids | string 数组 | 用户提问分类ID列表 | 否 |
| tag_ids | string 数组 | 标签ID列表 | 否 |
| query_str | string | 用户提问关键字 | 否 |
响应参数:
| 返回值 | 类型 | 含义 |
|---|---|---|
| titles | object 数组 | 按分类分组的结果 |
| titles.title_id | string | 分类ID |
| titles.title_name | string | 分类名称 |
| titles.title_desc | string | 分类描述 |
| titles.prompt_count | int | 分类下的用户提问数量 |
| titles.exposure | float | 曝光率 |
| titles.fluctuation | float | 曝光率变化值 |
| titles.avg_rank | float | 平均排名 |
| titles.daily_avg_score | object 数组 | 每日平均分 |
| titles.prompts | object 数组 | 分类下的用户提问列表 |
| prompts.id | string | 用户提问ID |
| prompts.query_str | string | 用户提问内容 |
| prompts.status | int | 用户提问状态:1-启用,2-禁用 |
| prompts.exposure | float | 曝光率 |
| prompts.avg_rank | float | 平均排名 |
| prompts.daily_avg_score | object 数组 | 每日平均分 |
| prompts.title_id | string | 分类ID |
| prompts.title_name | string | 分类名称 |
| prompts.creator_name | string | 创建人名称 |
| prompts.created_time | int64 | 创建时间 |
| prompts.fluctuation | float | 曝光率变化值 |
| prompts.trace_article_cnt | int | 关联追踪文章数量 |
| prompts.tags | object 数组 | 用户提问关联标签 |
| total | int | 分组总数 |
| total_prompts | int | 用户提问总数 |
响应示例:
{
"code": 0,
"msg": "success",
"data": {
"titles": [
{
"title_id": "title_test_001",
"title_name": "测试分类A",
"title_desc": "用于演示的用户提问分类",
"prompt_count": 1,
"exposure": 0.8,
"fluctuation": 0.1,
"avg_rank": 2.5,
"daily_avg_score": [
{
"date": "2026-01-15",
"score": 86
}
],
"prompts": [
{
"id": "prompt_test_001",
"query_str": "测试品牌A适合哪些业务场景?",
"status": 1,
"exposure": 0.8,
"avg_rank": 2.5,
"title_id": "title_test_001",
"title_name": "测试分类A",
"creator_name": "test_user",
"created_time": "1735689600000",
"trace_article_cnt": 3
}
]
}
],
"total": 1,
"total_prompts": 1
}
}获取用户提问分类列表
- 请求方法:POST
- 请求路径:
/geo/title/get
说明:这里的“分类”对应系统中的 title。
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
| brand_id | string | 品牌ID | 是 |
| id | string | 分类ID | 否 |
| title_name | string | 分类名称,支持按名称过滤 | 否 |
响应参数:
| 返回值 | 类型 | 含义 |
|---|---|---|
| id | string | 分类ID |
| brand_id | string | 品牌ID |
| title_name | string | 分类名称 |
| title_desc | string | 分类描述 |
| count | int | 该分类下的用户提问数量 |
| created_time | string | 创建时间 |
| updated_time | string | 更新时间 |
响应示例:
{
"code": 0,
"msg": "success",
"data": [
{
"id": "title_test_001",
"brand_id": "brand_test_001",
"title_name": "测试分类A",
"title_desc": "用于演示的用户提问分类",
"count": 12,
"created_time": "2026-01-01",
"updated_time": "2026-01-15"
}
]
}新建用户提问 分类
- 请求方法:POST
- 请求路径:
/geo/title/create
说明:这里的“分类”对应系统中的 title。
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
| brand_id | string | 品牌ID | 是 |
| title_name | string | 分类名称 | 是 |
| title_desc | string | 分类描述 | 否 |
响应参数:
| 返回值 | 类型 | 含义 |
|---|---|---|
| id | string | 新建的分类ID |
响应示例:
{
"code": 0,
"msg": "success",
"data": {
"id": "title_test_001"
}
}更新用户提问 分类
- 请求方法:POST
- 请求路径:
/geo/title/update
说明:这里的“分类”对应系统中的 title。该接口为部分更新语义:id、brand_id、title_name 必传;title_desc 传入时才更新,未传则不更新。
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
| id | string | 分类ID | 是 |
| brand_id | string | 品牌ID | 是 |
| title_name | string | 分类名称 | 是 |
| title_desc | string | 分类描述;传入时更新 | 否 |
响应参数:
接口调用成功时,返回空对象。
响应示例:
{
"code": 0,
"msg": "success",
"data": {}
}更新用户提问 所属分类
- 请求方法:POST
- 请求路径:
/geo/prompt/relation/update
说明:该接口不是局部更新,而是替换关联语义,用于将指定用户提问重新归类到新的分类下。
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
| brand_id | string | 品牌ID | 是 |
| title_id | string | 目标分类ID | 是 |
| prompt_id | string | 用户提问ID | 是 |
响应参数:
接口调用成功时,返回空对象。
响应示例:
{
"code": 0,
"msg": "success",
"data": {}
}删除用户提问
- 请求方法:POST
- 请求路径:
/geo/prompt/delete
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
| id | string | query ID | 是 |
| brand_id | string | 品牌ID | 是 |
响应参数:
接口调用成功时,返回空对象。
响应示例:
{
"code": 0,
"msg": "success",
"data": {}
}批量删除用户提问
- 请求方法:POST
- 请求路径:
/geo/prompt/delete/batch
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
| prompt_ids | string 数组 | 用户提问ID 列表 | 是 |
| brand_id | string | 品牌ID | 是 |
响应参数:
接口调用成功时,返回空对象。
响应示例:
{
"code": 0,
"msg": "success",
"data": {}
}删除用户提问分类
- 请求方法:POST
- 请求路径:
/geo/title/delete
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
| id | string | 分类ID | 是 |
响应参数:
接口调用成功时,返回空对象。
响应示例:
{
"code": 0,
"msg": "success",
"data": {}
}触发推荐提问生成
- 请求方法:POST
- 请求路径:
/geo/question-recommendation/trigger
说明:该接口异步生成推荐提问,触发后通过查询推荐提问列表读取结果。
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
brand_id | string | 品牌 ID | 是 |
target_date | string | 目标日期 YYYY-MM-DD;可省略 | 否 |
请求示例:
{
"brand_id": "1001",
"target_date": "2026-10-14"
}响应参数:
| 返回值 | 类型 | 含义 |
|---|---|---|
code | int | 0 表示成功 |
message | string | 返回消息 |
data.brand_id | string | 品牌 ID |
data.status | string | 已触发时为 processing |
响应示例:
{
"code": 0,
"message": "推荐任务已触发",
"data": {
"brand_id": "1001",
"status": "processing"
}
}查询推荐提问列表
- 请求方法:POST
- 请求路径:
/geo/question-recommendation/list
说明:question_type 为 1 时查询基建型提问,为 2 时查询触发型提问;不传或传 0 时查询全部类型。
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
brand_id | string | 品牌 ID | 是 |
question_type | int | 0/省略=全部;1=基建型;2=触发型 | 否 |
intent_type | int | 0/省略=不筛选;1–8 为现有意图类型 | 否 |
status | string | PENDING、CONFIRMED 或 EDITED | 否 |
sort_by | string | heat_score、created_time、latest_crawl_date | 否 |
sort_order | string | asc 或 desc | 否 |
min_heat_score | number | 最低热度分数 | 否 |
date_from / date_to | string | 创建日期范围 YYYY-MM-DD | 否 |
page | int | 默认 1 | 否 |
page_size | int | 建议显式传 1–100;未指定 question_type 时省略或传 0 默认按 10 处理;指定类型时省略或传 0、或传大于 100 的值,回落为 20;负数直接返回参数错误 | 否 |
请求示例:
{
"brand_id": "1001",
"question_type": 1,
"status": "PENDING",
"page": 1,
"page_size": 20
}响应参数:
| 返回值 | 类型 | 含义 |
|---|---|---|
code | int | 0 表示成功 |
message | string | 返回消息 |
data.total | int | 符合条件的推荐总数 |
data.list | object 数组 | 推荐记录列表 |
data.list[].id / brand_id | string | 推荐记录 ID / 品牌 ID |
data.list[].question_text / original_question_text | string | 当前 / 原始提问内容 |
data.list[].question_type | int | 1=基建型;2=触发型 |
data.list[].knowledge_dimension | string | 知识维度,适用时返回 |
data.list[].heat_score | number | 当前结果集相对热度,最大值归一化为 100 |
data.list[].avg_rank | number | 平均排名 |
data.list[].source_platforms | string | 来源平台,逗号分隔 |
data.list[].source_count | int | 来源次数 |
data.list[].first_crawl_date / latest_crawl_date | string | 采集起止日期 YYYY-MM-DD |
data.list[].status | string | PENDING、CONFIRMED 或 EDITED |
data.list[].is_edited | bool | 是否编辑过 |
data.list[].confirmed_time | string | 确认时间,未确认时无有效值 |
data.list[].monitor_query_id | string | 确认后关联的用户提问 ID |
data.list[].created_time / updated_time | string | RFC 3339 时间 |
data.list[].cluster_info | object | 关联意图簇,存在时返回 |
响应示例:
{
"code": 0,
"message": "success",
"data": {
"total": 1,
"list": [
{
"id": "5001",
"brand_id": "1001",
"question_text": "如何评估测试品牌A的产品服务?",
"original_question_text": "如何评估测试品牌A的产品服务?",
"question_type": 1,
"knowledge_dimension": "事实型提问",
"heat_score": 100,
"source_platforms": "doubao",
"source_count": 1,
"avg_rank": 2.0,
"first_crawl_date": "2026-10-14",
"latest_crawl_date": "2026-10-14",
"status": "PENDING",
"is_edited": false,
"created_time": "2026-10-14T09:00:00+08:00",
"updated_time": "2026-10-14T09:00:00+08:00"
}
]
}
}确认推荐并创建监控提问
- 请求方法:POST
- 请求路径:
/geo/question-recommendation/confirm
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
recommendation_id | string | 推荐记录 ID | 是 |
请求示例:
{
"recommendation_id": "5001"
}响应参数:
| 返回值 | 类型 | 含义 |
|---|---|---|
code | int | 0 表示成功 |
message | string | 返回消息 |
data.recommendation_id / monitor_query_id | string | 推荐记录 ID / 新建用户提问 ID |
data.status | string | 确认后为 CONFIRMED |
data.confirmed_time | string | RFC 3339 确认时间 |
响应示例:
{
"code": 0,
"message": "推荐已确认,已添加到监控提问",
"data": {
"recommendation_id": "5001",
"monitor_query_id": "3001",
"status": "CONFIRMED",
"confirmed_time": "2026-10-14T09:10:00+08:00"
}
}查询团队模型标签
- 请求方法:POST
- 请求路径:
/geo/prompt/tag/get
说明:模型绑定使用本接口返回的模型标签 ID;/geo/api/prompt/tag/get 返回用户标签。
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
team_id | string | 团队 ID | 是 |
tag_type | int 数组 | 标签类型筛选;查询模型传 [3] | 否 |
请求示例:
{
"team_id": "2001",
"tag_type": [
3
]
}响应参数:
| 返回值 | 类型 | 含义 |
|---|---|---|
code | int | 0 表示成功 |
msg | string | 返回消息 |
data | object 数组 | 标签列表;以下字段属于每个 data[] 元素 |
data[].prompt_tag_id / team_id | string | 标签 ID / 团队 ID |
data[].tag_name | string | 标签名称;模型标签对应模型名称 |
data[].created_by | string | 创建人名称 |
data[].created_time | string (int64) | Unix 毫秒时间戳 |
data[].prompt_count | int | 关联提问数量 |
data[].tag_type | int | 1=用户;2=系统;3=模型 |
响应示例:
{
"code": 0,
"msg": "success",
"data": [
{
"prompt_tag_id": "6001",
"team_id": "2001",
"tag_name": "deepseek",
"created_by": "测试管理员A",
"created_time": "1791939600000",
"prompt_count": 2,
"tag_type": 3
}
]
}保存用户提问的模型绑定
- 请求方法:POST
- 请求路径:
/geo/prompt/tag/relation/model/replace
说明:tag_ids 全量替换指定 prompt_ids 的模型标签,其他类型标签保持不变。为分组中的提问配置模型时,可先通过查询品牌下的用户提问按 title_ids 分页获取提问 ID,再提交绑定;之后新增的提问不会自动继承此次配置。
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
team_id | string | 团队 ID | 是 |
prompt_ids | string 数组 | 当前要更新的提问 ID,不能为空 | 是 |
tag_ids | string 数组 | 目标模型标签 ID 全量集合;[] 清空模型绑定 | 是 |
请求示例:
{
"team_id": "2001",
"prompt_ids": [
"3001"
],
"tag_ids": [
"6001"
]
}响应参数:
| 返回值 | 类型 | 含义 |
|---|---|---|
code | int | 0 表示成功 |
msg | string | 返回消息 |
data | object | 成功时为空对象 |
响应示例:
{
"code": 0,
"msg": "success",
"data": {}
}读回用户提问的模型绑定
- 请求方法:POST
- 请求路径:
/geo/prompt/tag/relation/batch
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
team_id | string | 团队 ID | 是 |
prompt_ids | string 数组 | 提问 ID 列表,不能为空 | 是 |
tag_type | int 数组 | 读取模型标签传 [3] | 否 |
请求示例:
{
"team_id": "2001",
"prompt_ids": [
"3001"
],
"tag_type": [
3
]
}响应参数:
| 返回值 | 类型 | 含义 |
|---|---|---|
code | int | 0 表示成功 |
msg | string | 返回消息 |
data | object 数组 | 提问与标签关联列表 |
data[].prompt_id | string | 提问 ID |
data[].tags | object 数组 | 标签列表,结构见“查询团队模型标签” |
响应示例:
{
"code": 0,
"msg": "success",
"data": [
{
"prompt_id": "3001",
"tags": [
{
"prompt_tag_id": "6001",
"team_id": "2001",
"tag_name": "deepseek",
"created_by": "测试管理员A",
"created_time": "1791939600000",
"prompt_count": 2,
"tag_type": 3
}
]
}
]
}