vivo统一AI Agent能力,Chat模式落地打造可“拼”底座助力业务演进!
【背景与目标】
各位,vivo互联网项目团队围绕三大业务场景(笔记、知识库、项目管理)统一了一套可组合的AI Agent能力。本文聚焦一期「Chat模式」落地,强调Runtime Adapter的“协议无关、面向任意后端流”特性。业务诉求方面,笔记、知识库、项目管理三类场景都需要“对话式”AI能力,并逐步演进到多轮、工具调用、上下文增强与可追溯。统一入口上,不希望每条业务线重复造轮子,期待用同一套可组合Hook即插即用。一期范围是先完成Chat模式打底,但保留可扩展的“多消息一回合”“工具调用”“历史/检查点”能力。在产品体验上,遵循主流Agent设计范式,结合过往实现风格,将复杂性交由“消息模型 + 运行时适配 + 前端编排”三段式来解耦。
【设计原则】
设计原则有四点。一是“消息即协议”,把后端回传的事件统一解码为前端消息模型,UI只消费消息,不关心来源细节。二是“运行时可插拔”,只要后端能以“流”的形式输出,Adapter都会转为相同的AgentStreamEvent,前端逻辑零差异。三是“前端可编排”,用Hook/Context管理上下文、工具、重试/变体、回调,形成稳定的胶水层。四是“渐进增强”,一期只做Chat,但保留threadId/runId,为“历史/检查点/回放/评测”留出Agent能力口。
【架构总览】
只列出Chat模式强相关的核心模块。①统一消息模型,覆盖UserMessage、AssistantMessage、Thinking - Message、ActionExecution - Message、ResultMessage等类型,含status与可选parentMessageId,可扩展图片、状态消息。②Runtime Adapter接口,generateResponse(params) / retry(params)返回ReadableStream,sendFeedback统一正/负反馈,可对接多种后端“流”,无论来源如何,都会标准化为AgentStreamEvent。③前端编排(Orchestration),AgentKit作为Provider暴露上下文,统一注入runtime、actions、上下文树、消息与加载状态、重载完成回调等;useAgentChat组合useChat,提供append - Message、reloadMessages、stop - Generation、threadId、runId等能力;useChat串接Runtime流式事件,处理工具调用与Agent循环,并维护AbortController。④Vue UI组件,Chat容器封装输入/消息区/操作/建议项,借助useCopilotChatLogic与Core同步。
【事件流与消息模型:把一切都还原成消息】
后端返回的是“事件”,前端消费的是“消息”,把差异收敛在Adapter层。一是“增量累加”,把分片token聚合为Thinking - Message / AssistantMessage。二是“工具事件”,tool_call → ActionExecution - Message,tool_result → ResultMessage。三是“统一标识”,维护threadId(会话)与runId(本轮loop),为历史/检查点铺路。四是“精确收束”,依据服务端“回合结束”信号或本地规则,准确结束本轮流。上层只看到标准的AgentStreamEvent,UI组件无须关心消息从哪里来,只负责渲染消息序列。
【Agent回合循环(loop)与工具调用(tools)】
Chat模式不仅是“生成一条回复”,而是“一轮内可能包含多条消息”。把“回合循环”放在useChat中集中处理,串接流式事件,按顺序追加消息;捕获ActionExecutionMessage触发前端工具handler,并把结果回注为ResultMessage;当一轮结束,返回最终AssistantMessage并可进入下一轮;在“重载/变体”场景中,保留既有候选并追加新候选,形成多变体集合。与传输方式无关,只要后端发出等价事件,Adapter统一映射,工具消息即可完整往返。工具调用的前端形态是useAgentAction,它可描述name/description/parameters;处理时handler(args)返回值会被打包成ResultMessage回注对话;可选渲染可将工具调用或结果以内嵌卡片形式展示;同一执行ID只会触发一次handler;Adapter负责把后端的工具事件统一映射为前端消息,UI不需要关注具体协议与传输方式。
【UI交互与建议(Suggestions)】
Chat作为容器,暴露了消息渲染插槽与输入区控制,默认行为是渲染Thinking、Assistant、User、Error等消息类型;支持复制、停止、重新生成、建议点击;useCopilotChatLogic负责把Core能力(useAgentChat)与UI事件连起来,并提供节流后的建议刷新入口。
【最小上手:3步把Chat接入到任一页面】
第一步,在根组件用AgentKit包裹,并选择Runtime。第二步,页面里直接用Chat(或自定义渲染)。第三步,(可选)注册工具,供模型调用。
【与业务的契合】
笔记/知识库/项目管理方面,前端可把当前选中文段/标签/页面结构通过addContext合并入agentArgs,无需更改Runtime。知识库agent文档/集成流程智能Agent(未来规划)方面,把检索与聚合能力抽象为FrontendAction,回注ResultMessage,让Agent循环自动推进。
【面向知识库问答与集成流程智能的演进设想】
一是知识库问答Agent(RAG),支持互联网检索,结合站内知识完成回答;提供关键字检索、内容获取与语义检索(向量);后续将支持直接帮你编辑、新增文档等操作;让AI准确看到你正在关注的内容,与你的上下文保持一致,帮助你更高效地思考、写作与创造。二是集成流程,自动配置,添加节点,配置节点,验证节点,一句话帮你完成流程配置,面向非开发同学,解决流程编排困难和语法复杂的问题;支持从自然语言自动生成流程与节点参数;节点配置表单化,参数智能补全与校验,自动化验证每一步并给出修复建议;支持逐步验证与仿真运行,输出日志与每步结果检查。
【下一步需完善】
一是历史记录,当前未做持久化回放,已通过threadId预埋会话键,后续可依此查询并复原消息序列。二是检查点,runId用于标记本轮loop,未来可以支持检查点能力,在“继续/撤回/回滚”中复用,是Agent交互中必不可少的能力。三是工具事件,实现HumanInTheLoop能力,工具调用需要用户确认,或者需要用户填写表单等内容与Agent协同。
【结语】
用“消息模型 + Runtime Adapter + 前端编排”的方式,把Chat模式做成了可以“拼”的底座,UI只面向消息,不关心来源;运行时可替换,协议差异被屏蔽;工具/上下文/重试等交互都在编排层实现;threadId/runId为历史/检查点打好地基。这让三类业务都能在同一套基建上继续演进。接下来,会补齐历史与工具事件、完善多变体交互,并把“回合对齐/评测”纳入流水线。
