400-100-5265

预约演示

淘宝主播Agent的Harness实战

2026-06-18

Agent 这两年很热,但真正把 Agent 放到生产环境里跑过的人,大多会很快冷静下来。模型能推理、能调用工具、能写计划,这些都很重要,但一旦它开始操作真实业务系统,问题就不再是“模型聪不聪明”,而是“出了错谁兜底”。

淘宝直播里的主播 Agent,是一个很典型、也很苛刻的场景。它不是帮个人整理文件、写脚本、查资料,而是在直播间这种高频、实时、公开、强业务后果的环境里辅助主播做决策和操作。切错商品、发错券、改错价,都不是日志里重跑一次就能解决的事情。

这也是 Harness Engineering 变得重要的原因。模型本身是概率系统,会漂移、会误解、会偶发失控。真正让 Agent 从 Demo 走向线上产品的,往往是模型外面那层工程骨架:上下文怎么组织,工具怎么约束,状态怎么恢复,风险怎么审批,行为怎么审计,质量怎么评估。

一、主播 Agent 为什么需要 Harness

很多公开的 Agent 实践,验证场景更接近个人助手:单用户、本机运行、任务失败了看日志、调 Prompt、再跑一次。这个形态下,Harness 可以做得轻一些,甚至一个本地 Workspace 加一组工具协议就能撑起不少能力。

直播间不是这个约束条件。

淘宝主播 Agent 面临的压力主要来自四个方向。

第一,操作即时生效,而且面向公众。Agent 一旦下发指令,结果会直接作用到直播间。错误操作很难撤回,成本也可能是真金白银。

第二,主播注意力极度稀缺。主播在镜头前要讲品、互动、看数据、控节奏,不可能逐条核验 Agent 的动作。如果每一步都需要人工确认,Agent 的价值会被抵消;如果完全放开,又不安全。

第三,多话题高频交织。一场直播里,播前准备、中控指令、商品操作、用户互动、数据分析会混在一起。单轮对话可能同时涉及选品、组货、排序、控场,上下文很容易被污染。

第四,任务长程、可中断、必须恢复。直播动辄数小时,跨设备、跨端切换很常见。会话中断后,Agent 不能“失忆”,更不能把已经执行过的步骤再执行一遍。

这些约束决定了,主播 Agent 的关键不只是“让模型回答得更好”,而是给它修一套河道和护栏。模型像水流,负责在边界内自主推进;工程师要做的是河道、闸门、护栏和水位监测。

在这个语境下,Harness 可以抽象成六个职责:

模块 核心职责 主要对抗的问题
Execution Loop 驱动 Agent 的思考、行动、观察主循环 死循环、无限重试、跑飞
Tool Registry 定义工具能力、边界、参数和错误反馈 能力边界模糊、参数非法
Context Manager 维护上下文质量与体积 上下文膨胀、注意力漂移
State Store 持久化运行状态,支持中断恢复 长任务丢状态、不可回放
Lifecycle Hooks 在关键时机插入强规则 模型不可控、强约束难落地
Evaluation Interface 提供可观测、可分析的评估体系 质量不可量化、问题不可追溯

这套划分的价值在于,它把 Agent 工程从 Prompt 技巧和 if-else 堆叠,拉回到系统架构。一个 Agent 项目做得稳不稳,基本可以沿着这六个维度逐项检查。

二、框架兜底,业务写 Skill

主播业务变化非常快。今天要加播前规划,明天要改排品策略,后天又要支持新的中控动作。如果每个业务变化都要修改 Agent 框架,工程复杂度会很快失控。

淘宝主播 Agent 的一个关键取舍,是把框架层和业务层拆干净。

业务方以 Skill 的形式声明能力:这个技能能做什么、风险等级多高、参数 Schema 是什么、校验规则是什么。框架层负责执行循环、上下文治理、安全防护、状态持久化、审计观测这些相对稳定的工程能力。

这个拆分看起来朴素,但在生产环境里很关键。很多团队做 Agent 卡住,不是模型能力不够,而是业务逻辑、安全规则、状态管理、工具调用全部搅在一起。早期跑得很快,后期每加一个能力都像拆炸弹。

更合理的方式是:业务能力可以快速变化,但 Harness 的骨架要稳定。

可以把主播 Agent 的分层理解成这样:

流程图 - 淘宝主播Agent的Harness实战

这里有三个工程原则。

一是安全做纵深防御,而不是押宝单点。Prompt、Schema、审批、工具验证、审计,每一层拦不同类型的风险。

二是长程任务必须可恢复、可观测、可干预。直播不是短任务,不能只靠内存状态和聊天历史撑着。

三是业务层只关心 Skill 表达,框架层负责脏活。这个边界一旦模糊,Agent 系统会很快变成不可维护的复杂体。

三、统一工作区背后的物理分治

不少 Harness Framework 喜欢用一个文件系统 Workspace 作为 Agent 的事实来源。在单机个人助手里,这个设计很优雅:文件天然可读写、可回放、可审计。

但主播 Agent 要服务大量主播,要多副本水平扩容,要支持高并发实时读写。单一文件系统的假设不太成立。

淘宝主播 Agent 的做法是:逻辑上仍然向 Agent 暴露统一工作区,物理上按资产类型拆到不同基础设施。

资产类型 物理存储 选型理由 读写特征
会话信息 MySQL 强一致、点查高效,适合按 session_id/live_id 加载 在线频繁读写
记忆 Hologres 支持向量、全文、标量混合检索 在线高频检索、异步写入
Skill GitLab 适合代码化维护、版本管理、Code Review、灰度发布 离线维护、发布加载

这个设计有一个很现实的工程判断:不要指望一种存储解决所有问题。

会话状态对一致性和点查性能要求高,适合放 MySQL。记忆系统需要语义检索、关键词检索、标量过滤一起工作,更适合 Hologres 这类支持混合检索的系统。Skill 本质是代码资产,放 GitLab 更自然,能走版本管理、预检、Review 和灰度。

长期记忆的数据模型也不是简单的一段文本。每条记忆片段包含原文、向量和 JSONB 元数据。原文支持全文检索,向量支持语义召回,元数据负责主播 ID、场次、来源、信任分、使用次数等过滤条件。

真正值得注意的是抽象层。框架对 Agent 暴露的是“加载上下文、读写记忆、调用技能、持久化状态”这些语义接口,而不是 Holo、MySQL、GitLab 的具体实现。底层存储未来可以演进,但业务代码不用被反复冲击。

这就是典型的工程 trade-off: 统一文件系统的抽象更简单,但不适合大规模在线服务;多存储分治会增加框架复杂度,却能让每类资产跑在合适的基础设施上。主播 Agent 这种场景,后者更值得。

四、上下文工程是第一道硬仗

上下文是 Agent 决策的输入地基。地基不干净,后面工具调用、计划生成、安全判断都会被带偏。

直播场景的上下文有两个天然问题:一是长,二是乱。聊天记录、商品数据、历史场次、主播偏好、实时指标、工具返回值都可能进入上下文。如果无脑追加,很快会遇到 Token 膨胀、延迟升高、成本失控,以及更隐蔽的注意力漂移。

主播 Agent 的上下文治理主要靠三件事。

分层压缩,而不是粗暴截断

简单截断聊天历史很危险。很多关键约束可能出现在很早之前,比如“这个品牌今天不能上”“某款商品粉丝反馈不好”。截断后,模型看不到这些信息,就可能做出错误决策。

更稳妥的方式是分层压缩:保留近期细节,把中期对话压缩成结构化摘要,把长期信息沉淀到记忆系统。压缩不是为了省 Token 而省 Token,而是保证模型每一轮都看到“当前最该看的东西”。

Reducer 管状态,而不是让模型读流水账

传统 Agent 常见做法,是把工具调用结果完整追加到消息历史里,让 LLM 自己从一堆 JSON 中读懂当前状态。这个方式在简单任务里能跑,但直播间会很快出问题。

工具结果可能很长,历史状态和最新状态混在一起,模型还要自己判断哪条是最终值。一旦商品价格、库存、排序频繁变化,聊天历史会变成一个噪声池。

淘宝主播 Agent 借鉴前端状态管理里的 Reducer 思想:LLM 负责决策,Reducer 负责确定性状态变更。

流程图 - 淘宝主播Agent的Harness实战

这样每轮对话前,模型看到的是最新的结构化 State 快照,比如当前商品、价格、库存、场次目标、已执行计划,而不是一长串历史 JSON。

这类设计看似不“智能”,但很可靠。生产环境里,越是关键状态,越不应该交给模型从自然语言历史里自己推断。

Reducer 状态更新

大上下文卸载

完整商品列表、历史数据、大文件这类内容,不需要长期塞在 Context Window 里。更合理的方式是卸载到外部存储,只在上下文里保留路径 ID、摘要和预览。

模型需要详细数据时,再通过工具按需读取。这样既控制 Token,又避免大块低价值内容干扰推理。

五、工具调用要有边界、有幂等、有恢复

Agent 一旦可以调用工具,就进入了真实业务系统。这里最怕三件事:越权调用、参数错误、重复执行。

主播 Agent 在 Tool Registry 层做了几类约束。

第一,每个 Skill 注册时声明能力边界。框架在调用前检查请求是否落在能力域内。新 Skill 上线前也要经过预检平台,验证它的声明、Schema 和风险规则。

第二,所有工具签名和决策输出都通过 JSON Schema 约束。模型输出必须先过结构校验,不能把非法参数直接送进业务系统。

第三,所有有副作用的写操作都必须幂等。改价、切品、发券这类动作,要携带幂等键。框架执行前做去重校验,即使网络重试或 Agent 重新规划,也不能发生“双切品”“双改价”。

第四,工具错误必须结构化返回。模糊报错字符串对 Agent 没什么帮助,框架也很难恢复。更好的方式是错误码分类:

错误码 类别 框架行为
3xxx 业务异常,如越界、权限不足 解析 AI 友好错误,尝试换策略
4xxx 参数异常,如类型错误、缺失字段 自动修复参数后重试 1 次
5xxx 系统异常,如超时、服务不可用 最多重试 3 次,指数退避
9xxx 不可恢复异常 不重试,通过 Hook 通知主播

这里有个容易被忽视的点:自动修复不是无限重试。生产环境里,无限重试和死循环本质上是事故放大器。每类异常都要有明确的重试预算和退出路径。

六、Hook 把强规则插进推理循环

Lifecycle Hooks 是 Harness 里很实用的一层。它不需要改写模型的推理过程,而是在关键节点做拦截、注入、记录。

比如:

  • 调用工具前,检查权限、风险等级、幂等键;
  • 工具执行后,校验返回结果是否可信;
  • 回复主播前,检查是否引用了未经验证的商品信息;
  • 状态变更时,写入审计日志和 Checkpoint;
  • 异常发生时,触发降级策略或人工确认。

Hook 的价值在于把安全、审计、观测这些横切能力从业务 Skill 里抽出来。业务方写 Skill 时不需要每次都手搓防护逻辑,框架会在统一位置执行强规则。

这也是 Harness 和普通 Agent 框架的一个分水岭:前者会承认模型不可完全控制,所以用工程机制兜底;后者容易把所有规则都塞进 Prompt,最后变成一份越来越长、越来越脆的系统提示词。

七、五层安全防护扛住直播风险

直播操作的安全不能靠单点。淘宝主播 Agent 采用的是纵深防御,从 Prompt 边界到执行审计分成五层。

第一层是 Prompt 边界硬编码。系统提示词里声明能力边界和禁区,配合 Skill 能力声明和上线预检,先在意图层面收窄风险。

第二层是 Schema 强约束。结构上不合法的参数,不允许进入工具执行。

第三层是 Approval 审批分层。这里是安全和体验的核心平衡点。直播操作不能步步确认,也不能全部放开,所以按风险等级分流。

风险等级 触发条件 审批方 策略
auto 查询、话术建议等无副作用操作 系统 直接放行
soft-gate 有副作用但在安全阈值内 Skill 规则 会话中提示,立即执行
hard-gate 品类操作、批量操作等高风险动作 主播 阻塞等待二次确认
block 触发平台红线 框架 直接拒绝并告警

第四层是工具执行验证。业务系统在真正落地时继续做规则校验,并返回结构化错误码。

第五层是执行审计。所有工具调用的生命周期都被记录,用于实时告警、事后复盘、模型优化和争议处理。

这个设计的关键不是“安全层数多”,而是每层职责不同。Prompt 管意图边界,Schema 管结构合法性,审批管业务风险,工具验证管落地规则,审计管可追溯。混在一起做,通常会又复杂又不可靠。

八、沙箱把不可信执行隔离开

只要 Agent 能执行 Shell、运行脚本、调用第三方 Skill,就必须把输入当作不可信。很多本地 Agent Demo 在可信开发环境里跑没问题,但一旦做成服务,把任意输入直接丢宿主机执行就是严重攻击面。

主播 Agent 对代码类执行统一套沙箱:

  • 容器以非特权用户运行;
  • 根文件系统只读;
  • CPU、进程数做配额限制;
  • 默认禁止出站网络,只按 allowlist 放行;
  • 系统调用走白名单;
  • 不向沙箱注入宿主机环境变量;
  • 工具 timeout 有硬上限,Agent 只能缩小不能放大;
  • stdout、stderr 设置大小上限,超出截断;
  • 执行代码、输出、user_id、session_id 全量写审计日志。

这里的原则很清楚:模型生成的代码、用户上传的脚本、第三方 Skill,都不能因为“看起来合理”就获得宿主机信任。沙箱不是锦上添花,而是 Agent 工具生态的基础边界。

九、PlanEngine 从单步 ReAct 走向 DAG

ReAct 模式适合很多探索型任务:思考一步,调用一个工具,观察结果,再继续。但主播场景里,用户指令经常是复合任务。

比如:

帮我生成一份开播提案,然后创建直播间,把最近一场有商品的历史场次同步过来,给前 3 个商品生成讲解手卡,最后开启智能标题。

这类任务包含直播提案、场次创建、商品同步、手卡生成、配置开启等多个子任务,而且有依赖关系。如果用单步 ReAct,很容易局部最优、来回试探、重复调用工具。

淘宝主播 Agent 用 LLM 驱动的 PlanEngine,把复杂任务规划成 DAG。

DAG 规划带来几个直接收益。

第一,可恢复。系统在三类时机写 Checkpoint:每轮对话结束、每个子任务完成、整体计划变更。中断后可以按状态归一恢复,而不是从头再跑。

第二,可观测。Plan、SubTask、Tool Call 三级状态都可追踪,每个子任务有独立 TraceID。主播和运营能看到 Agent 执行到哪一步,而不是只看到一个转圈状态。

第三,可并行。没有依赖关系的子任务可以并行调度,降低端到端耗时。

第四,可局部重规划。某个子任务失败时,只对受影响的后续节点 Replan,不需要把整个计划推倒重来。

第五,降低上下文漂移。计划进度独立外挂,不占用对话上下文;复杂任务可以拆给 SubAgent,隔离上下文;计划快照先持久化,再做上下文压缩。

从测试结果看,在播前规划、直播策略、商品操作等平均 7 步的复杂任务上,PlanEngine 相比原生 ReAct 有明显提升:

对比项 PlanEngine ReAct
执行成功率 0.847 0.737
子任务覆盖率 0.976 0.883
工具执行冗余率 0.587 0.727
迭代轮次 5.440 8.020

这个结果不意外。ReAct 强在灵活探索,DAG 强在复杂任务编排。直播场景更需要后者,尤其是任务有明确依赖和副作用时。

PlanEngine 效果

十、评测让 Agent 质量可追踪

Agent 系统最怕“感觉还行”。在生产环境里,感觉不能定位问题,也不能指导迭代。

主播 Agent 的评测体系分成离线和在线两部分。

离线评测主要覆盖播前、播中、播后典型场景,并加入对抗样本,比如极端改价、违规诱导、模糊指令、边界权限等。这类样本的目的不是刷高平均分,而是验证安全防护有没有真实生效。

在线评测关注实时指标:

  • 操作成功率:工具调用成功数 / 总调用数;
  • 审批通过率:soft-gate、hard-gate 的通过情况;
  • 主播干预率:主播主动纠正 Agent 行为的频率;
  • 端到端延迟:从指令发出到操作完成的全链路耗时;
  • 会话满意度:每场直播结束后的主播主观评分。

Trace 也很关键。接入 Langfuse 这类可视化追踪系统后,可以把一次 Agent 行为拆成 Prompt、规划、工具调用、Hook、审批、状态写入等链路节点。线上问题定位会从“模型又抽风了”变成“哪个节点输入错了、校验漏了、工具慢了、还是规划偏了”。

十一、记忆系统要能对账,而不是只会记住

如果前面的 Harness 解决的是“能干活、不出事”,记忆系统解决的是“越用越懂主播”。

但主播 Agent 的记忆不能简单套通用记忆框架。因为直播间里,记忆会直接影响操作建议。记错偏好、误判商品、过度相信历史经验,都可能带来业务风险。

主播记忆和通用记忆的差异大致如下:

维度 通用记忆系统 主播场景
短期记忆 多层压缩 多层压缩 会话场景摘要 直播信息结构化
时间粒度 对话轮次、按需触发 直播场次、事件驱动
记忆分层 画像、经验、通用方法 主播画像、领域划分、事实决策路径
遗忘机制 时间衰减、矛盾覆盖 多因子衰减,结合场景、新鲜度、可信度

主播 Agent 的长期记忆按信任来源分成三层:

层级 性质 典型内容
L1 会话记忆 主播主观声明 偏好、约束、反馈
L2 事实记忆 客观可查事实 SKU、价格、库存、风控词、转化数据
L3 行为记忆 客观但需聚合归纳 切品节奏、主推时长、粉丝价格带响应

这个分层很重要,因为主播“说的”和“做的”可能不一致。

主播可能说“开场先上引流款”,但最近几场实际都先上了氛围款,而且效果不错。通用记忆系统很容易简单覆盖,或者保留冲突不处理。主播 Agent 更稳妥的做法是记忆对账。

对账结果 示例 系统行为
一致 主播说主推讲 10 分钟,近几场也基本如此 提升该规则 confidence
矛盾 主播说开场上引流款,实际多次上氛围款 记录 gap,不覆盖 L1
矛盾累积 gap 达到阈值 主动询问是否更新偏好

这个策略背后的工程取舍很值得参考:矛盾时不粗暴覆盖,而是累积证据,到阈值后让主播确认。它尊重主播主观意图,也允许系统基于客观事实进化。

十二、信任度是可以工程化的

主播 Agent 的记忆演化依赖 Decision Trace Log。每次关键建议都会记录:

字段 写入时机 含义
decision_point 建议展示时 选品、排序、时长、切品等决策点
question 建议展示时 主播问了什么
agent_output 建议展示时 Agent 给出的建议和来源
trust_at_moment 建议展示时 当时 trust 值
anchor_action 主播操作时 accept / reject / modify
anchor_alternative 主播操作时 主播替代方案
lift 播后归因时 增量效果
trust_delta 播后归因时 信任变化

然后通过播后归因更新 trust_score:

事件 trust 变化 设计意图
主播采纳且效果好 0.05 建立正循环
主播采纳但效果差 -0.10 给错建议要更重惩罚
主播拒绝但事后 Agent 对 0.03 慢慢建立信任
主播拒绝且主播判断对 -0.05 修正 Agent 判断

trust_score 反过来影响 Agent 的输出形态:

trust 区间 输出方式
≥ 0.7 直接给建议、反例、替代方案和把握度
0.4 ~ 0.7 给证据和弱建议
< 0.4 只给数据,不给方向性建议

这套机制把“主播信不信 Agent”从模糊感觉变成了可度量、可解释、可演化的工程量。它也提醒我们,Agent 记忆不是越多越好,关键是记忆来源、可信度、冲突处理和输出策略要闭环。

遗忘机制同样不能只靠时间衰减。主播场景会综合考虑场景相关性、信息新鲜度、时间、可信度、采纳次数、召回次数等因素。低价值、过期、长期未被使用的记忆要清理,否则记忆库会腐坏,最终反过来污染上下文。

淘宝主播 Agent 的 Harness 实践,核心其实一直围绕一个问题展开:模型能力不确定,怎么把它工程化成一个在高风险场景里可用、可控、可演化的系统。

答案不在某个更长的 Prompt,也不在单次模型升级,而在模型外面的系统骨架。

Execution Loop 控制节奏,Tool Registry 收住能力边界,Context Manager 保证输入质量,State Store 支持恢复,Lifecycle Hooks 落地强规则,Evaluation Interface 让质量可追踪。再叠加分层审批、沙箱执行、DAG 规划、记忆对账和信任度演化,Agent 才有机会从“能演示”走到“敢上线”。

模型会继续变强,这是确定的。但越往真实业务走,Harness 的价值越明显。因为生产环境真正需要的,不只是一个聪明的模型,而是一套能在约束条件下持续稳定运行的工程系统。

创作声明:本内容包含AI辅助创作,观点仅供参考。