面向技术产品经理的 Agent Harness 设计:从任务编排到可验证交付

vivo互联网技术 · 软件开发

原创 互联网产品团队 2026-11-04 20:00 广东 把用户目标转化为可执行任务、工具契约、权限策略、结构化结果和可验收的工程系统。 作者:vivo 互联网产品团队- Meng Disheng 目录 01. Agent 产品为什么需要技术建模 02. 从用户目标到 Agent Workflow 03. 任务模型:不要只设计一轮对话 04. 工具设计:产品经理要定义工具契约 05. 权限与副作用:用风险等级设计审批 06. 结果协议:从文本回答到结构化交付 07. 失败处理:重试、恢复与幂等性设计 08. 可观测性与验收:监控不能替代验证 09. 案例:反馈分析 Agent 的技术设计 10. 产品经理的交付物:需要围绕关键业务动作 11. 总结:从功能需求到 Agent 系统契约 面向产品经理的 Agent Harness 设计指南:把用户目标转化为可执行任务、工具契约、权限策略、结构化结果和可验收的工程系统。 产品经理在设计 Agent 产品时,不仅仅只写 Prompt、页面和最终输出,还要参与定义 Agent 如何执行任务、调用工具、控制权限、处理失败并交付结果。 1分钟看图掌握核心要点👇 01 Agent 产品为什么需要技术建模 传统产品需求往往可以用“输入—处理—输出”描述:用户提交信息,系统完成处理,再返回结果。但 Agent 产品通常不是一次同步调用,而是一段可能持续较长时间的工作过程。它可能需要读取多个数据源、调用多个工具、等待用户确认、处理外部系统失败,并在中间生成可复用的结果。 因此,Agent 产品需求不能只描述“用户输入什么、模型回答什么”。它至少要解释任务如何拆分、步骤之间是否存在硬依赖、可调用的工具是否会改动外部系统、何处需要用户确认,以及发生超时、拒绝或服务异常时任务应当停止、降级还是恢复。最终交付也不能只是一段回复,而要明确是结构化数据、可下载产物,还是一个已写入业务系统的资源。 如果一份 Agent 需求只能描述输入和输出,它通常还没有进入工程设计阶段。产品经理设计的不只是交互页面,还包括一套能够被执行、被观察和被验收的任务模型。 本文所说的 Agent Harness ,不是某个特定框架的名称,而是承接任务定义、步骤调度、工具调用、权限执行、结果校验和运行观测的控制层。业务工作流决定“要完成什么”,工具实现决定“如何访问外部能力”,Harness 则把两者组织成一段可约束、可追溯的运行。本文关注的正是产品经理需要参与定义的这部分系统契约,而不讨论某一种模型或编排框架的具体实现。 02 从用户目标到 Agent Workflow 产品经理首先需要把用户目标转换成可执行的工作流,而不是直接把目标写成一个 Prompt。 例如,“根据用户反馈生成改进建议,并在确认后提交到目标工作系统”可以拆解为: 读取反馈数据 -> 清洗和去重 -> 按问题类型聚类 -> 统计影响范围 -> 查询历史记录 -> 生成候选建议 -> 检查建议冲突 -> 输出评估报告 -> 用户确认并提 每一个步骤都需要具备明确的工程属性: 字段 示例 步骤名称 用户反馈聚类 输入 反馈记录 输出 问题分类结果 使用工具 数据查询、文本分析 是否可并行 是 是否需要审批 否 失败处理 重试或跳过 产出类型 结构化数据 验收标准 每条反馈必须有分类 产品经理不一定需要实现聚类算法,但需要判断工作流是否完整:哪些步骤必须串行,哪些步骤可以并行,哪些结果可以被后续步骤消费,哪些环节需要产品经理介入。 为步骤定义执行语义 工作流不能只有顺序,还要定义调度语义。通常可把步骤分成四类: 步骤类型 典型场景 技术要求 serial 先完成数据清洗,再做聚类 前序输出校验通过后才可启动 parallel 同时查询历史记录与统计影响范围 独立输入、并发上限、聚合策略 fan-out/fan-in 按问题类别分别分析,再汇总建议 分片键、子任务失败容忍度、聚合条件 human-gate 向目标系统提交记录前等待确认 暂停条件、审批 payload、过期处理 例如,问题聚类和历史记录匹配可以并行,但建议生成是否必须等待两者完成,取决于历史记录在这项业务中是硬依赖还是增强信息。前者应阻塞后续生成;后者可以记录“历史匹配缺失”并降级继续。两种行为都要由任务定义决定,不能让执行器在运行时猜测。 建议把这种语义写进 Workflow DSL 或 JSON 配置,而不要散落在 Prompt 中。下面的配置将历史匹配视为硬依赖,因此任一步失败都会阻塞建议生成: "id" : "generate\_recommendation" , "dependsOn" : \[ "cluster\_feedback" , "analyze\_impact" , "match

查看原文