跳转至

高德扫街榜 HermesAgent 配图系统:VLM + Skill + 语言驱动的生产级 Agent 架构

📊 Level ⭐⭐⭐⭐ | 13.1KB

高德扫街榜(Amap Street Food List)POI 配图系统重构案例。从手工作坊式 Workflow(50+ SQL/8 步骤/T+1 24 小时)重构为 "VLM 语义感知 + Skill 化生产 + HermesAgent 编排 + 语言驱动干预" 的生产级 Agent 系统。单榜单生产 24h → 30min,提效 48 倍。

架构设计哲学:确定性流程 + Agent 各司其职

核心选型:混合架构——确定性 Pipeline 负责"重活"(高并发/批量/同构/可并行),Agent 推理负责"巧活"(开放式/组合式/需要理解规则)。这个选择直接回应了"纯 DAG 不够灵活 vs 纯 ReAct Agent 执行路径不稳定"的两难。

五层系统架构

层级 组件 职责
交互层 Hermes 自然语言入口 对话干预、自然语言启动/修改配图
编排层 Python Pipeline + Hermes Pipeline 稳定执行,Hermes 管理和调度
节点层 Query 泛化/召回/粗排/精排/兜底/质检/审核 生产漏斗的每个可控环节
MCP/Skill 层 各功能固化为独立 Skill Python 脚本,可被 Python/Bash/Hermes 调用
原子能力层 POI-CLIP/美学评分/OCR/人脸检测/图片去重 底层多模态能力

分层设计的关键变化:业务规则不再散落在 SQL 和脚本分支里,底层能力不再只能被固定 Pipeline 调用——系统多了一个新的生产接口:语言。

六段式全链路

数据准备 → 召回与准入 → 粗排 → 精排(Agent 化) → 兜底 → 质检与准出

关键技术详解

1. Agent 化精排决策

多维度美学评分(三域十五维度):

域 维度 作用
通用美学域 清晰度/曝光/构图/色彩/完整性 判断基础可用性
高级美学域 光影质感/视觉冲击力/层次/专业感/情绪 判断视觉表现力
领域美学域 主题契合度 判断与主题的相关性与出彩性

每维度门控保底线 + 补偿拉上限。

RAG 配置驱动:主题 Prompt 和挑图规则外置为配置表(定制 > 通用模板 > 默认),RAG 运行时动态注入。新增主题只需维护配置表,不需要改动执行逻辑。未命中配置时自动调用 LLM 生成 Query 词用于 CLIP 召回。

生产级约束:模型负责感知,代码负责计算: - VLM 输出各维度原始分,最终总分由代码计算——模型不碰聚合逻辑 - Structured output 必须经过运行时白名单校验,非法枚举直接报错重试

2. 兜底与质检

多阶梯兜底:复用上游结果(精排 > 粗排 > 召回 > 准入 > 图片库 > 在线图),越靠上验证越多。最差情况保证至少一张兜底图。

VLM 选图 ARAD 标准:Aesthetics / Relevance / Authenticity / Diversity。兜底只选一张,不在弱候选里强行补多张。

多维度质检:基础质量 + 视觉重复度 + 主题相关性 + 反季节检测。

3. 多模态知识库

图文相互校验流程:文字总结(区分地方做法 vs 通用做法)→ 图片聚类(最大簇为有效簇)→ VLM 图文一致性确认。从"错中选对"到"对中选优"。

4. Hermes 语言驱动生产

Hermes 作为 Agent 编排层,自然语言对话支持进度查询/单点重配/配置修改。四要素工程闭环:功能必须 Skill 化、规则必须配置化、执行必须可观测、结果必须可回滚。

工程实践与踩坑

挑战 解法
并发 VLM 调用集中重试 指数退避 + 随机等待
VLM 数理逻辑局限 模型只输出原始分,代码算总分
Structured output 逃逸 运行时白名单校验,非法输出重试
VLM 算力容量瓶颈 优化 Prompt token、并发逻辑、模型切换
多机会话一致性 Consistent Hashing + 分布式 DB

全链路监控:供给侧/精排侧/兜底侧/质检侧/交付侧看板,支持比昨日/上次版本/线上版本对比。

核心工程原则(跨场景可复用)

  1. 确定性流程与 Agent 各司其职:批量同构的交给 Pipeline,开放组合式的交给 Agent
  2. 结构化评分替代黑盒打分:问题越具体,LLM 输出越稳定
  3. 模型负责感知,代码负责计算:生产系统不能把正确性完全寄托在模型"自觉遵守格式"上
  4. 规则外置到 RAG 配置表:执行逻辑保持稳定,业务规则动态注入
  5. 兜底、质检和监控是 AI-Native 生产系统的基础设施
  6. Skill 化是 Agent 落地的工程前提:底层能力封装为稳定工具
  7. 语言驱动让系统从"人适应机器"转向"机器理解人"

与其他实体的关系

  • HermesAgent 生产案例:本文是 wiki 中首个 HermesAgent 在大型互联网应用中的端到端生产案例,与 高德 SDD/Harness 编码范式 互补——前者讲 AI 编码,本文讲 Agent 在生产链路的编排
  • 确定性 + Agent 混合架构:与 Harness Engineering 的"多层重试+执行者/验证者分离"哲学一致——确定性与 Agent 的边界划分是生产级 Agent 系统设计的核心
  • Skill 化/MCP 层:五层架构中的 MCP/Skill 层与 Hermes Agent 的 Skill 系统直接对应——每个能力被封装为可独立调用的工具
  • RAG 配置驱动:与 Flow2Spec 结构化知识路由 的"规则外置"思想同源——业务知识从代码中剥离出来
  • 语言驱动生产:与 Claude Tag 的"聊天即工作流入口"趋势一致——自然语言成为新的生产接口

深度分析

一、分界线不在"难易",而在损失函数能否分解

"重活/巧活"的说法容易被误读为按难度切分。真正的判据是损失函数能否分解到单条候选:召回、粗排每一项都可独立打分,argmax 即答案;精排却要求"组合选择 3 张",重复与多样性是集合级约束——三张图各自满分仍可能互相撞图,逐点最优不等于集合最优。只有约束跨条目耦合的环节,才值得让 Agent 在候选集上循环试错。反之,可分解却上 Agent 只买来不确定性与重试成本。

更隐蔽的一层:兜底阶梯依赖确定性的产物形态。"精排 > 粗排 > 召回 > 准入 > 图片库 > 在线图"之所以成立,是因为每层都留下可寻址、可复用的中间结果;若精排只是一段不可解释的 Agent 轨迹,就没有"上一层"可退。确定性不只买吞吐,还提供故障的可回退坐标——Agent 的自由度被包夹在两层确定性之间,向下有阶梯、向上有质检。

二、评测回路测的是"感知",漏的是"集合"与"分布"

十五维度分三域、每维"门控保底线 + 补偿拉上限",本质是把总分拆成可归因的诊断向量:图变差能定位到哪一维掉了。但这条回路有结构性的漏。

其一,聚合逻辑不在被测范围内。模型只出原始分、总分由代码算,评测覆盖感知,线上质量却由权重决定;权重调整与模型替换在看板上分不开,回归必归因错对象。其二,逐图评分看不见集合缺陷:重复与审美疲劳只在组合中出现,必须另设"视觉重复度"质检——这笔开销正是逐点打分覆盖不了集合约束的代价。其三,兜底样本被排除在统计外:兜底图取自验证更少的上游,却恰在最难的 case 上出街,看板均值系统性优于真实交付质量。其四,新主题是冷启动:只需维护配置表即可上主题,首批图等于在没有历史 badcase 时被验收。

三、成本与延迟:48 倍买的是"人退出回路"

30 分钟的量级由两次串行 VLM pass(精排一次、质检再一次)决定,而非单次推理速度。十五维压进一次 structured output 而非十五次调用,是成本可行的前提;代价是长 schema 的合规风险,白名单校验的重试因此成为延迟长尾主因。重试彼此相关(同一端点被打满),同步重试会自我放大,必须指数退避加随机等待。兜底阶梯同时是一份延迟预算工具:复用上游结果等于零额外 VLM 调用,用覆盖率换一轮召回。24h → 30min 的 48 倍里含着 T+1 排队与人工确认,读成算力节省会高估收益——删掉的主要是人的串行确认环节。

四、哪些结论可迁移,哪些只是高德的资产

可迁移的是结构:以可分解性划分确定性/Agent 边界;Agent 阶段必须被确定性阶段包夹;模型只负责感知,聚合与校验留在代码;规则外置成"定制 > 模板 > 默认"的三级覆盖链,让新增主题变成数据改动而非代码改动;Skill 化让同一能力同时服务 Python 调用与 Agent 工具调用;语言入口必须配齐可观测与可回滚,否则等于开放无界写接口。

不可迁移的是数值与资产:POI-CLIP 的域内召回决定了前排环节便宜且够用,换通用 CLIP 后召回上限下降,成本结构随之变化;十五维权重来自榜单编辑标准(真实、热闹、有温度)与 badcase 积累,可迁移的只是"门控 + 补偿"的形状;反季节与主题契合依赖地点—季节本体。最后是实时性:榜单是"活榜单",刷新快,30 分钟才有意义;面向静态目录的业务,T+1 本就够用,48 倍不构成重构理由。

实践启示

  • Agent 化不要 ALL-in:确定性流程和 Agent 推理的混合架构是生产级系统的最佳实践——"重活"交给 Pipeline,"巧活"交给 Agent
  • VLM 不等于万能计算器:模型做感知和语义理解,不做算术——显式划分职责边界
  • Skill 化是前提:在考虑 Agent 编排之前,先把底层能力封装为可稳定调用的工具
  • 语言驱动需要工程闭环:自然语言入口背后必须有可观测性、可回滚性和安全边界
  • 生产系统需要三层保障:兜底(覆盖率)、质检(质量底线)、监控(可信度)

→ 原文存档