技术实践

天猫百补以薄客户端Skill桥接远程Agent

智能体系统上下文与知识上下文工程Agent 工具调用Agent Skills

概述

bybt-detail-assistant 是百亿补贴商品详情页的智能分析 Skill(50+ commit),由本地 Skill 文件与远程 Agent 两部分组成,中间以 xiaomi.py 桥接脚本连接。本地负责信息收集、商品查询和结果呈现这类“薄客户端”,日志搜索、截屏分析等依赖集团内部在线服务和知识库的深度分析交给远程 Agent。拆分的动因是两部分的变化节奏与迭代成本完全不同:若全部逻辑放本地,每次升级都要改 SKILL.md 并重新发版、用户还得频繁更新本地版本;改为桥接后,远程 Agent 升级时(如支持新埋点字段解读)作者无需修改本地 Skill,且远程侧版本管理、灰度发布、可观测、一键回滚都更成熟,升级对用户无感。SKILL.md 侧则改成共享全局约束(约 60 行)下的决策树:4 条规则约 20 行分流到路径 A traceId 分析(约 30 行,线性)、路径 B 商品查询(约 15 行,线性)、路径 C 截图+日志(约 250 行,循环迭代),三条路径逻辑互斥,解决了过去各家功能描述交织导致 Agent 在低端模型上“顾此失彼、迷失方向”的问题,也便于后续按路径物理拆分为 path-a.md 等实现完整的多文件渐进式披露。 三项优化均已落地且有量化对比。一是注意力聚焦:最初把远程 Agent 的上百条埋点解读规则写进 SKILL.md,导致本地 Agent 搜日志时也要加载全量规则、token 开销大且容易“自作主张去分析埋点”,改为本地只描述「什么时候调 xiaomi.py、参数怎么传、结果怎么输出」的调用协议,埋点解读逻辑用 Python 脚本固化,相比让 LLM 处理脚本直出最多快 7 倍且格式 100% 统一。二是对抗 LLM 的“总结冲动”:远程脚本生成 Markdown 报告后,本地模型常二次加工(加标题、改写措辞、截断表格甚至补充不存在的结论),SKILL.md 中用极强语气定义 FORBIDDEN 列表(不得总结改写、不得重排版式、不得在 stdout 前后添加内容)并要求「直接输出 stdout,一字不改」。三是 sessionId 会话复用:每次会话首次调用前生成随机 sessionId(session-<8 位字母数字),会话内后续调用复用同一 ID,让远程 Agent 记住之前分析过的日志,解决“追问刚才那张截图时远程 Agent 失忆、用户只能重发截图”的问题,SKILL.md 中仅增加约 10 行。此外,针对长输出(一次日志搜索几十条记录、详情访问报告占满两屏),本地把报告处理成 HTML 文件并优先输出本地路径,再让 Agent 摘取关键信息以折叠表格与链接呈现,避免用户在对话里翻屏,同时要求 HTML 转换必须由本地 Agent 执行以免丢失高价值上下文。