主动任务接入最佳实践
一、功能介绍
智能生命体的核心能力之一:主动任务属于智能生命体(认知型智能体)的三大核心能力之一——拟人记忆、主动任务、千人千面。 智能生命体是继「指令型 AI 设备」「对话型智能体」之后的第三代认知型智能体,本质突破是从"被动工具"到"主动伙伴";主动任务正是其中的"主动感知"能力,让 AI 从"问什么答什么"进化到"想你所想"——主动感知场景、理解关系,并在合适时机自主行动。
1、一句话描述
用户以自然语言描述监控目标,系统持续从多模态输入(视频、音频)中检测并理解事件,触发后实时反馈给用户。

2、主动任务的工作原理
主动任务的本质是:用户下发任务 → 智能体自动将任务分解为"任务检测流水线" → 通过流水线持续判断事件是否触发 → 触发后结合对事件的理解与发生趋势,决定是否执行后续行为(开口提醒、触发对应行为)。

1、用户可通过语音、文本或控制台配置并下发监控任务
2、系统自动对任务描述进行扩写,并拆分为事件集与检测流水线
3、基于视频、图片、音频等多模态输入,实时感知并判断事件是否触发,触发后自动执行后处理操作
4、后处理操作包括:TTS 语音播报、消息回调
3、与传统监控的本质区别
主动任务不是传统意义上的"监控",而是从"监控设备"升级为"行为理解 + 主动干预"的智能体系统:
| 对比维度 | 传统监控 | 主动任务系统 |
|---|---|---|
| 关注问题 | "有没有变化 / 有没有物体入侵" | "这个人在做什么、状态如何" |
| 判定方式 | 像素级规则 | AI 对画面和语音的语义理解 |
| 处理模式 | 检测到 → 立即报警 | 参照主动任务工作原理 |
| 提醒方式 | 固定话术(如"检测到异常") | 动态生成贴合场景的人性化语音提醒 |
| 配套机制 | 无 | 全套去重、追溯、个性化反馈机制 |
二、快速接入
步骤总览
接入主动任务,共 4 步:
| 步骤 | 做什么 | 关键点 |
|---|---|---|
| ① 配置任务 | 告诉系统「要监控什么」 | 预置任务需配置;临时任务语音/文本下发,可跳过此步 |
| ② 创建智能体 | 让智能体支持主动任务 | 在 config 的 human.sense 中开启视觉/声音感知 |
| ③ 控制任务 | 按需开启 / 关闭任务 任务查询等 |
语音/文本指令(命中内置 start_task/stop_task)或事件指令(ENABLE_TASKS/DISABLE_TASKS) |
| ④ 处理触发结果 | 任务命中后拿到反馈 | TTS 语音播报 / 消息回调(TASK_TRIGGER) |
start_task/stop_task已由平台内置,接入方无需单独配置 Function Call。
1. 配置任务
主动任务分预置任务和临时任务两种,区别如下:
| 对比维度 | 预置任务(控制台/API 配置) | 临时任务(语音/文本直接下发) |
|---|---|---|
| 适用场景 | 需多因素组合推理的抽象任务 | 规则明确的单一事件 |
| 开启状态 | 任务配置后默认关闭,需开启(参照 3.1 开关任务);创建智能体时设 auto_open=true 可默认开启(见 2.2) |
下发即生效,无需激活 |
| 生效方式 | 永久保存,每次会话生效 | 仅本次会话临时生效 |
| 配置成本 | 需配置(本章内容) | 无需配置,一句话完成 |
本章讲预置任务的配置。如果你只用临时任务,可跳过本章,直接进入第 2 章「创建智能体」。
预置任务有两种配置方式(二选一):
| 方式 | 状态 | 说明 |
|---|---|---|
| 控制台可视化配置 | 待放开 | 通过控制台界面配置任务 |
| API 方式配置 | 已可用 | 通过接口配置(详见 1.2) |
预置任务流程:① 描述任务(用自然语言描述,如「小孩做作业不专心提醒我」)→ ② 系统自动扩写(生成事件集与判断规则)→ ③ 保存待激活(默认关闭)→ ④ 关联 appid(两种方式都需要,见 1.3)。
预置任务默认关闭,需语音/文本指令激活后生效(激活方式见第 3 章「控制与查询任务」,说「打开任务/监控」即可)。如需创建智能体后默认开启(免语音激活),可在 config 中设 human.sense.auto_open=true(见 2.2)。
1.1 配置方式一:控制台可视化配置(待放开)
该方式暂未开放,目前请使用 1.2 的 API 方式配置。
1.2 配置方式二:通过 API 配置
1.3 关联 appid
两种配置方式创建任务后,都需要将任务与目标 appid 关联,供智能体创建时按 appid 拉取任务列表。(待补充:关联 appid 的具体操作/接口)
2. 创建智能体
创建智能体(即大模型互动实例)时,在 config 中配置 human.sense,即可支持主动任务能力。
2.1 接口
POST /api/v1/aiagent/generateAIAgentCall,完整说明见 https://cloud.baidu.com/doc/RTC/s/hm8zjic1q
2.2 config 中 human.sense 关键参数
| 字段 | 类型 | 说明 |
|---|---|---|
human.sense.auto_register |
Boolean | 是否自动注册感知任务,默认 false |
human.sense.visual.enable |
Boolean | 是否开启视觉感知,默认 false |
human.sense.audio.enable |
Boolean | 是否开启声音感知,默认 false |
human.sense.auto_open |
Boolean | 预置任务是否默认开启,默认 false |
说明:
auto_register为 false 时,语音/文本下发任务会被拦截并提示「请您打开下发任务功能」。
2.3 请求示例
请求体中 config 是一个 JSON 字符串,其对应结构如下(human.sense 为主动任务感知配置):
1{
2 "app_id": "yourAppId",
3 "config": "<将下方 human 对象序列化后的 JSON 字符串>"
4}
1{
2 "human": {
3 "sense": {
4 "auto_register": true,
5 "auto_open": false,
6 "visual": { "enable": true },
7 "audio": { "enable": true }
8 }
9 }
10}
auto_open:是否默认开启预置任务,默认false。仅在已配置预置任务、且希望智能体创建后立即生效(免语音激活)时才设为true;临时任务下发即生效,不受此字段影响。
3. 控制与查询任务
本章介绍任务的开关与查询。开关任务支持两种方式:语音/文本指令(说固定话术,命中内置 start_task / stop_task 函数)与事件指令(下发 ENABLE_TASKS / DISABLE_TASKS,程序化控制,不经过函数调用)。
3.1 开关任务
方式一:语音/文本指令
开启与关闭的完整交互流向
| 操作 | 用户话术 | 命中函数 | 稳定性 | 系统动作 | 系统反馈 / 回传 |
|---|---|---|---|---|---|
| 开启(指定目标) | 「打开监控,帮我看着孩子做作业」 | start_task |
最稳 | 开启该任务 | TTS 确认(「好的,这就帮你盯着…」);回传 [E]:[HUMAN]:[TASK_ACK]:{...} |
| 开启(未指定目标) | 「开启监控」 | start_task |
最稳 | 追问「你想监控什么?」 | 等用户补全 |
| 开启(自然语言) | 「有人玩手机就告诉我」 | start_task |
较好 | 开启该任务 | TTS 确认;回传 [E]:[HUMAN]:[TASK_ACK]:{...} |
| 关闭(指定任务) | 「关闭监控,不用看孩子写作业了」 | stop_task |
最稳 | 关闭该任务 | TTS 确认(「好的,那就不看了」);回传 [E]:[HUMAN]:[TASK_ACK]:{...} |
| 关闭(未指定任务) | 「关闭监控」 | stop_task |
最稳 | 追问「你想关闭哪个任务?」 | 等用户补全 |
| 关闭全部 | 追问后回答「全部」「所有」 | stop_task |
最稳 | 关闭所有已开启任务 | TTS 确认;回传 [E]:[HUMAN]:[TASK_ACK]:{...} |
| 关闭(自然语言) | 「不用看孩子了写作业了」 | stop_task |
较好 | 关闭该任务 | TTS 确认;回传 [E]:[HUMAN]:[TASK_ACK]:{...} |
固定话术关键词:开启用「打开监控 / 开启监控 / 开始监控 / 打开看护 / 开启看护」,关闭用「关闭监控 / 停止监控 / 关闭看护 / 停止看护」。
方式二:事件指令(程序化控制)
消息格式遵循 RTC 消息协议文档,
[SET]、[GET]、[E]等前缀及消息结构说明见该文档。
| 操作 | 事件指令(客户端 → 智能体) | 系统动作 | 回传(智能体 → 客户端) |
|---|---|---|---|
| 开启任务 | [SET]:[HUMAN]:[ENABLE_TASKS]:{"task_ids":["task-abc123"]} |
开启指定任务 | [E]:[HUMAN]:[TASK_ACK]:{...} |
| 关闭任务 | [SET]:[HUMAN]:[DISABLE_TASKS]:{"task_ids":["task-abc123"]} |
关闭指定任务 | [E]:[HUMAN]:[TASK_ACK]:{...} |
查询任务的指令(
[GET]:[HUMAN]:[QUERY_ALL_TASK]、[GET]:[HUMAN]:[QUERY_ENABLED_TASK])见 3.2「查询任务」。
TASK_ACK 回执格式(开关任务统一回传,语音/文本指令与事件指令一致):
1[E]:[HUMAN]:[TASK_ACK]:{"task_id":"task-abc123","status":"success","type":"start_task"}
| 字段 | 说明 |
|---|---|
task_id |
任务唯一标识(临时任务以 temp- 开头) |
status |
处理结果:success 成功 / fail 失败(与 TASK_STATUS 一致) |
type |
请求方下发的命令类型,如 start_task / stop_task |
3.2 查询任务
查询指令
[GET]由客户端 → 智能体下发,查询结果[E]:[HUMAN]:[TASK_STATUS]:{...}由智能体 → 客户端回传。
查询所有任务
指令(客户端 → 智能体):
1[GET]:[HUMAN]:[QUERY_ALL_TASK]
响应(智能体 → 客户端):
1[E]:[HUMAN]:[TASK_STATUS]:{
2 "status": "success",
3 "type": "get_all_tasks",
4 "tasks": [
5 {"task_id": "task-abc123", "task_name": "摔倒", "enabled": false, "task_type": "predefined"},
6 {"task_id": "task-def456", "task_name": "打招呼", "enabled": true, "task_type": "predefined"},
7 {"task_id": "temp-12ab34cd", "task_name": "看手机", "enabled": true, "task_type": "temp"}
8 ]
9}
查询已开启的任务
指令(客户端 → 智能体):
1[GET]:[HUMAN]:[QUERY_ENABLED_TASK]
响应(智能体 → 客户端):
1[E]:[HUMAN]:[TASK_STATUS]:{
2 "status": "success",
3 "type": "get_enabled_tasks",
4 "tasks": [
5 {"task_id": "task-def456", "task_name": "打招呼", "enabled": true, "task_type": "predefined"},
6 {"task_id": "temp-12ab34cd", "task_name": "看手机", "enabled": true, "task_type": "temp"}
7 ]
8}
字段说明:
| 字段 | 说明 |
|---|---|
task_id |
任务唯一标识 |
task_name |
任务名称 |
enabled |
当前是否开启 |
task_type |
任务类型:predefined(预置任务)/ temp(临时任务) |
4. 处理触发结果
任务持续感知中检测到目标事件后触发,触发后系统通过两种方式反馈:
| 方式 | 流向 | 说明 |
|---|---|---|
| TTS 播报 | 智能体 → 客户端(语音) | 直接语音播报提醒内容,无需额外解析 |
| 消息回调 | 智能体 → 客户端(数据通道) | 推送 [E]:[HUMAN]:[TASK_TRIGGER]:{...} 结构化消息 |
消息回调格式遵循 RTC 消息协议文档,
[E]等前缀及消息结构说明见该文档。
消息回调格式示例:
1[E]:[HUMAN]:[TASK_TRIGGER]:{"task_name": "做作业不专心","task_id": "task-abc123","ext": {"reason": "", "evt_trace_id": "EVT-425846-9bed"},"actions": [{"action": "tts_speaking","tts_content": "刚闭眼睡着,怎么又摸起手机啦?快把它们收起来,专心写作业哦!"}]}
回调字段说明:
| 字段 | 说明 |
|---|---|
task_name |
触发的任务名称 |
task_id |
任务 ID |
ext.evt_trace_id |
事件追溯 ID,用于问题定位与去重 |
actions[].action |
动作类型,如 tts_speaking(语音播报) |
actions[].tts_content |
动态生成的语音提醒文案 |
5. 快速接入最小示例(端到端)
主动任务有两条接入路径,下面分别给出最小示例。
5.1 预置任务(每次会话自动生效)
以「小孩做作业不专心提醒我」为例:
第 1 步:创建任务
第 2 步:创建智能体并开启主动任务
调用 POST /api/v1/aiagent/generateAIAgentCall,在 config 中开启 human.sense(预置任务已通过 appid 关联自动加载,无需在 config 中携带任务 ID):
1{
2 "human": {
3 "sense": {
4 "auto_register": true,
5 "visual": { "enable": true },
6 "audio": { "enable": true }
7 }
8 }
9}
第 3 步:语音/文本下发任务
用户对智能体说「打开监控,帮我盯着小孩做作业」(或只说「打开监控」),系统命中内置的 start_task 函数,任务开始持续监控。成功后回传任务回执 [E]:[HUMAN]:[TASK_ACK]:{...}。
第 4 步:接收触发结果
任务触发后,系统通过消息回调推送结果:
1[E]:[HUMAN]:[TASK_TRIGGER]:{"task_name":"做作业不专心","task_id":"task_abc123","actions":[{"action":"tts_speaking","tts_content":"刚闭眼睡着,怎么又摸起手机啦?快把它们收起来,专心写作业哦!"}]}
5.2 临时任务(即说即用,无需预配置)
以「有人喝水就提醒我」为例,无需先创建任务:
第 1 步:创建智能体并开启主动任务
调用 POST /api/v1/aiagent/generateAIAgentCall,开启 human.sense(auto_register=true)
1{
2 "human": {
3 "sense": {
4 "auto_register": true,
5 "visual": { "enable": true },
6 "audio": { "enable": true }
7 }
8 }
9}
第 2 步:语音/文本下发任务
用户对智能体说「打开监控,有人喝水就提醒我」(或直接说「有人喝水就提醒我」),系统命中内置的 start_task 函数,实时分解并立即生效(仅本次会话有效)。任务创建成功后回传任务回执(TASK_ACK 字段含义见 3.1):
1[E]:[HUMAN]:[TASK_ACK]:{"task_id":"temp-12ab34cd","status":"success","type":"start_task"}
第 3 步:接收触发结果
任务触发后,系统通过消息回调推送结果:
1[E]:[HUMAN]:[TASK_TRIGGER]:{"task_name":"喝水提醒","task_id":"temp-12ab34cd","task_type":"temp","actions":[{"action":"tts_speaking","tts_content":"有人喝水了,提醒你一下。"}]}
两条路径的区别:预置任务要「先创建任务并关联 appid」,每次会话自动生效;临时任务只要智能体开启了主动任务,直接说就能用,但仅本次会话有效。
评价此篇文章
