ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

AI原生测试平台架构拆解:Agent编排与记忆体系设计实践

AI原生测试平台架构拆解:Agent编排与记忆体系设计实践 1. 为什么我要花两周时间拆解 WHartTest 这个 AI 原生测试平台第一次看到 WHartTest 桌面端发布的消息时我正在给团队做季度测试工具链的复盘。说实话市面上打着AI 测试旗号的东西这两年见得太多了大部分无非是在传统测试框架外面套一层大模型接口把用例生成包装成智能把断言失败包装成AI 分析。所以当我看到配好模型测试全流程搞定这句话时第一反应是怀疑——又一个营销话术。但真正让我决定动手拆解的原因是它明确把自己定位成AI 原生测试平台而不是AI 增强的测试工具。这两个词差别很大。增强是在原有架构上打补丁原生是从一开始就把 Agent 当作系统的一等公民来设计。我带着团队做过几个 Agent 项目深知原生和外挂在工程复杂度上完全不是一个量级。于是我用两周时间从它的桌面端交互、任务编排、Agent 调度、模型接入到执行反馈链路做了一次比较彻底的逆向梳理。这篇内容适合三类人看一是正在做测试平台选型的技术负责人想知道 AI 原生架构到底比传统方案强在哪二是想自己搭一套 Agent 驱动测试流程的工程师需要一份可参考的架构拆解三是对 Agent 编排、记忆管理、工具调用这些概念还比较模糊想通过一个真实项目把概念落地的同学。我会尽量把每个设计决策背后的为什么讲清楚而不是只罗列它有什么功能。需要先说明一点WHartTest 的具体源码我没有拿到以下架构分析是基于桌面端行为、公开信息、以及我在同类 Agent 系统上的工程经验做的合理还原。凡是推断的部分我都会标注出来避免误导。2. AI 原生测试平台到底原生在哪架构分层拆解2.1 传统测试平台和 AI 原生平台的根本分歧要理解 WHartTest 的架构得先搞清楚传统测试平台的问题出在哪。传统平台的核心抽象是用例——人写用例平台执行用例报告汇总结果。整个系统的中心是用例库AI 顶多是个辅助生成用例的插件。这种架构下AI 是外挂的它拿不到执行上下文也无法根据执行结果动态调整策略。AI 原生平台的核心抽象变成了任务意图 Agent 执行。你告诉平台我要验证登录流程在弱网下的表现平台不是去匹配一条现成用例而是派一个 Agent 去理解意图、规划步骤、调用工具、观察结果、动态修正。用例库退化成 Agent 可调用的工具之一而不是系统的中心。这个转变带来的架构差异是根本性的。传统平台是请求-响应模型AI 原生平台是感知-规划-行动-反思的循环模型。前者是同步的、确定的后者是异步的、概率的。WHartTest 桌面端配好模型就能跑全流程的体验本质上就是把这套循环封装成了开箱即用的形态。2.2 四层架构的还原与职责划分基于桌面端的行为特征我把它还原成四层结构这个分层和当前主流 Agent 平台的实践高度吻合层级职责关键组件对应热词交互层任务输入、过程可视化、结果确认桌面客户端、任务面板、执行时间线桌面端发布编排层意图解析、任务分解、Agent 调度Planner、Router、多 Agent 协作agent框架与编排、多agent协作执行层工具调用、浏览器/接口操作、断言Tool Registry、Executor、Sandboxagent 部署 测试软件记忆层上下文保持、经验复用、状态管理短期/长期记忆、向量检索agent记忆、agent记忆框架以及选型这四层里编排层和记忆层是 AI 原生的灵魂也是和传统平台差距最大的地方。交互层和执行层反而相对标准化很多团队都能做。下面我重点拆这两层。2.3 为什么是桌面端优先而不是 Web 优先WHartTest 选择桌面端作为首发形态这个决策值得单独说。测试执行天然需要访问本地环境——本地浏览器、本地文件、本地网络配置、本地证书。Web 平台要碰这些东西要么装浏览器插件要么起本地代理服务链路长且脆弱。桌面端直接拥有本地权限工具调用的延迟和成功率都高一个档次。另一个原因是模型调用的隐私和成本。桌面端可以把模型请求直接发到用户配置的端点平台方不碰数据这对企业客户是刚需。同时本地可以缓存大量中间结果减少重复的模型调用。我实测过类似的架构把高频的意图分类和结果判定放到本地小模型只在复杂规划时调用大模型整体成本能降 60% 以上。这个取舍在桌面端做起来很自然在 Web 端就很别扭。3. Agent 编排从一句意图到可执行任务的完整链路3.1 意图解析不是调一次大模型那么简单很多人以为 Agent 编排就是把用户输入丢给大模型让它输出步骤。真做起来会发现单次调用根本撑不住。用户说测一下支付流程这里面隐含的信息太多了测哪个支付渠道、什么金额、正常还是异常、要不要覆盖退款。一次性让模型补全所有信息它要么瞎猜要么反问一堆问题让用户烦。WHartTest 这类平台通常采用分层解析第一层做意图分类判断这是新建测试任务还是查询历史结果还是修改配置第二层做槽位填充把渠道、金额、场景这些参数抽出来缺的用默认值或追问第三层才做任务规划把意图翻译成 Agent 可执行的步骤序列。这三层可以分别用不同规模的模型分类和填槽用小模型就够规划才需要大模型。提示分层解析的最大好处是可调试。当结果不对时你能定位到底是分类错了、槽位抽错了还是规划错了。单次调用出问题你只能干瞪眼。3.2 任务分解的粒度控制太粗会失控太细会爆炸任务分解是编排层最考验工程经验的地方。分解得太粗比如打开页面并完成支付Agent 执行时自由度太大容易跑偏分解得太细比如把点击按钮都当成一个子任务步骤数会爆炸模型调用成本和出错概率都飙升。我的经验是按可验证的里程碑来分解。每个子任务结束时必须有一个明确的、可程序化验证的状态。比如进入支付页并确认订单金额正确就是一个好的里程碑因为它有明确的验证点。而处理支付就不是因为它没有中间检查点。WHartTest 桌面端在执行时会显示一条时间线每个节点就是一个里程碑。这个设计不只是为了好看它本质上是把 Agent 的推理过程外化成可审计的步骤。一旦某步失败用户能立刻看到是哪一步、当时的上下文是什么。这是 AI 原生平台相比黑盒工具的核心优势。3.3 多 Agent 协作的三种模式与选型热词里多agent协作出现频率很高但真正落地时多 Agent 不是越多越好。我总结过三种常见模式主管-工人模式一个 Planner Agent 负责分解和调度多个 Worker Agent 各管一摊一个管 UI 操作一个管接口校验一个管数据准备。适合流程长、职责清晰的场景。辩论模式多个 Agent 对同一问题给出方案互相批判后收敛。适合需要高可靠判断的场景比如结果断言有歧义时。成本高慎用。流水线模式Agent 按固定顺序接力前一个的输出是后一个的输入。适合步骤确定的回归测试。WHartTest 从桌面端的执行表现看主体用的是主管-工人模式在结果判定环节可能引入了轻量的辩论机制。这个组合比较务实调度用主管模式保证可控关键判断用辩论模式保证准确。3.4 工具注册与调用Agent 的手和脚Agent 再聪明也得靠工具干活。工具注册表的设计直接决定了平台的能力边界。一个成熟的测试平台工具至少覆盖这几类工具类别典型工具调用频率注意事项浏览器操作点击、输入、截图、等待极高必须带重试和超时接口调用HTTP 请求、断言、Mock高注意鉴权和环境隔离数据操作数据库查询、造数、清理中事务和回滚要设计好文件操作上传、下载、解析中路径和权限要管控模型调用意图识别、结果判定高成本和限流要控制工具描述的质量比工具本身更重要。模型是靠工具的名称和描述来决定调哪个的。描述写得含糊模型就会乱调。我踩过的坑是两个工具功能相近但描述没区分清楚模型在两者之间反复横跳一次任务多花了好几倍的调用。后来把描述改成用于X场景不适用于Y场景这种带边界的写法问题就解决了。4. 记忆体系让 Agent 不在同一个坑里摔两次4.1 短期、长期、永久记忆的分层实现热词里agent 记忆体系中短期、长期、永久记忆如何实现是个高频问题。WHartTest 这类平台要跑全流程测试记忆体系是刚需否则每次任务都从零开始效率极低。我的理解是这样分层的短期记忆就是当前任务的上下文窗口包括已经执行的步骤、观察到的页面状态、中间结论。它随任务结束而销毁。实现上就是消息列表加上必要的状态快照。关键是控制长度超出窗口就得做摘要压缩否则模型会忘事。长期记忆是跨任务的经验比如这个系统的登录按钮在右上角这个接口在高峰期会超时。它需要持久化通常用向量库存储任务开始时检索相关经验注入上下文。这里的关键是检索质量检索不准反而会污染上下文。永久记忆是平台级的稳定知识比如工具的使用规范、系统的业务规则、历史踩坑记录。它变化慢可以人工维护也可以从长期记忆里沉淀。4.2 记忆检索的坑相似不等于有用向量检索最大的陷阱是语义相似但实际无用。比如你检索登录失败处理可能召回一堆登录成功的记录因为语义太接近了。我试过几种改进加元数据过滤检索时先按任务类型、系统模块过滤再做向量匹配。这一步能砍掉大量噪声。混合检索向量检索 关键词检索加权融合。纯向量对精确术语不敏感关键词能补上。重排序召回一批后用一个小模型重新打分。成本不高效果提升明显。注意记忆不是越多越好。注入太多无关记忆模型反而会被带偏。我一般控制在 3-5 条高相关记忆宁缺毋滥。4.3 记忆的写入时机与去重记忆写早了会存一堆半成品写晚了会漏掉关键经验。我的做法是任务成功或失败后统一写入并且做去重。去重不能只靠文本相似度要结合任务类型 关键实体做联合判重。否则同一个经验会被反复存进去检索时全是重复项。另外记忆要有衰减机制。老旧的、很少被检索到的记忆应该降权甚至清理。系统在演进三年前的经验可能早就不适用了。这个机制不做记忆库会越来越臃肿检索质量越来越差。5. 模型接入与执行反馈配好模型之后发生了什么5.1 模型配置的抽象层设计配好模型测试全流程搞定这句话背后是一层模型抽象。平台不能绑死某一家模型得支持用户切换。这层抽象要处理几个问题不同模型的 API 格式不一样、上下文窗口不一样、函数调用能力不一样、成本不一样。好的抽象层会把这些差异封装掉对上层暴露统一的接口。同时它要能按任务类型路由到不同模型意图分类用小模型任务规划用大模型结果判定用中等模型。这个路由策略能显著降本。我实测过把分类任务从大模型换成小模型准确率只掉 2 个点成本降了 80%。5.2 执行反馈闭环Agent 怎么知道自己做对了这是 AI 原生测试平台最核心的能力。传统平台靠断言断言过了就是过了。但 Agent 执行的是开放任务很多结果没法用硬断言判断。比如页面看起来正常这种就得靠模型判断。WHartTest 的反馈闭环我推测是这样的每个动作执行后采集多模态观察截图、DOM、接口响应、日志然后由判定 Agent 综合这些信息判断是否达成里程碑。如果没达成进入反思环节分析原因并调整下一步。这个循环就是经典的 ReAct 模式。关键在于观察信息的质量。截图要清晰、DOM 要精简全量 DOM 太大模型处理不了、日志要过滤。我踩过的坑是直接把全量 DOM 丢给模型结果 token 爆了而且模型被无关元素干扰判断准确率反而下降。后来改成只提取关键区域和交互元素效果好很多。5.3 失败重试与降级策略Agent 执行失败是常态不是异常。设计时要假设失败会发生。常见的处理策略原地重试适合网络抖动这类瞬时故障重试 2-3 次。换策略重试适合原方案不适用让 Agent 重新规划。降级执行适合非关键步骤跳过并记录。人工介入适合关键步骤反复失败暂停并请求确认。WHartTest 桌面端在执行时间线上应该能看到这些状态。这个设计很重要它让用户知道 Agent 在努力而不是卡死。我见过太多 Agent 系统失败时一声不吭用户完全不知道发生了什么。6. 实操复现从零搭一个最小可用的 AI 原生测试流程6.1 环境准备与依赖选型如果你想自己复现一套类似的流程我建议从最小闭环开始别一上来就追求完整平台。以下是我验证过的技术选型# 核心依赖Python 生态为例 pip install openai # 模型调用可替换为任意兼容端点 pip install playwright # 浏览器自动化 pip install pydantic # 结构化输出校验 pip install chromadb # 轻量向量库做记忆 pip install fastapi uvicorn # 如果要暴露接口选 Playwright 而不是 Selenium是因为它的等待机制和截图能力更适合 Agent 场景。选 ChromaDB 而不是重型向量库是因为起步阶段数据量小轻量方案够用且部署简单。这些选型的原则是先跑通再优化别在起步阶段就过度设计。6.2 最小 Agent 循环的实现核心就是一个 while 循环伪代码逻辑如下def run_agent(task_intent, max_steps20): context build_initial_context(task_intent) memory retrieve_relevant_memory(task_intent) context memory for step in range(max_steps): # 1. 规划下一步 action llm_plan(context) # 2. 执行动作 observation execute_tool(action) # 3. 判断是否达成里程碑 done, reason llm_judge(context, action, observation) # 4. 更新上下文 context update_context(context, action, observation, reason) if done: save_memory(task_intent, context) return success, context return max_steps_reached, context这个循环看起来简单但每个环节都有讲究。llm_plan要限制输出格式用结构化输出JSON Schema约束否则模型会输出一堆没法解析的自然语言。execute_tool要有超时和异常捕获工具挂了不能让整个循环崩掉。llm_judge要给出明确的判断依据方便调试。6.3 参数选择与成本控制模型调用的参数直接影响成本和效果我整理了一份实测参考参数规划任务判定任务分类任务说明temperature0.2-0.30.0-0.10.0规划要一点创造性判定要稳定max_tokens1000300100按输出复杂度给模型规模大中小按任务难度路由重试次数211规划失败重试价值高成本控制的核心是减少大模型调用次数。我的做法是把能本地判断的都本地判断比如页面元素是否存在、接口状态码是否正常这些用代码判断比模型判断又快又准。只有真正需要语义理解的环节才调模型。6.4 一个完整的实操案例假设要测用户登录后查看订单列表完整流程是这样的意图解析识别出这是 UI 测试任务涉及登录和订单两个模块。记忆检索召回该系统的登录入口在首页右上角订单列表需要登录态等经验。任务规划分解为打开首页 → 点击登录 → 输入凭证 → 提交 → 验证登录成功 → 进入订单页 → 验证列表加载。逐步执行每步调用 Playwright 工具采集截图和 DOM 片段。里程碑判定登录后检查是否出现用户头像订单页检查是否有列表元素。记忆写入把本次成功的路径和遇到的特殊情况存下来。整个过程如果顺利大概 7-10 步模型调用 10-15 次。如果中途失败步数和调用次数会增加。这就是为什么成本控制要从减少无效调用入手。7. 常见问题与排查技巧实录7.1 Agent 执行中断的典型原因热词里agent execution terminated due to error是个高频痛点。我遇到过的情况和排查思路整理如下现象可能原因排查方法解决方向执行到一半停住模型返回格式无法解析打印原始返回加结构化输出约束反复调用同一工具工具描述不清或状态未更新看调用日志优化描述更新上下文判定总是失败观察信息不足或噪声大检查截图和DOM精简观察信息上下文超长报错记忆注入过多统计token数压缩摘要限制记忆条数工具调用超时目标环境慢或网络问题看工具日志加超时和重试7.2 我踩过的三个坑第一个坑把模型当万能判断器。一开始我什么判断都交给模型结果又慢又不准。后来发现能用代码判断的绝不用模型。元素存在性、状态码、数值范围这些代码判断 100% 准确且零成本。第二个坑忽略上下文长度。任务跑长了上下文越堆越多最后超窗口报错。解决办法是定期做摘要压缩把已完成的步骤压缩成一句话只保留关键状态。第三个坑工具没有幂等性。重试时重复执行了有副作用的操作比如重复下单。后来所有有副作用的工具都加了幂等键重试前先检查是否已执行。7.3 提升稳定性的几个实用技巧给每个工具加超时默认 30 秒特殊工具单独配置。没有超时的工具是定时炸弹。关键步骤加断言不要全靠模型判断关键节点用硬断言兜底。执行过程全程留痕截图、日志、调用记录都存下来出问题能复盘。设置最大步数防止 Agent 陷入死循环超过就中止并报告。模型输出做校验用 JSON Schema 校验不合格就重试别硬解析。提示稳定性不是靠一个技巧解决的是靠一层层的防御。每加一层防御系统就稳一点。别指望模型自己靠谱。8. 我对 AI 原生测试平台的一点个人判断拆完 WHartTest 这套架构我最大的感受是AI 原生测试平台的门槛不在模型而在工程化的编排和记忆体系。模型能力是公开的谁都能调但怎么把模型、工具、记忆、反馈串成一个稳定可控的闭环这才是真功夫。我在实际项目里的体会是Agent 系统 80% 的代码都在处理异常和边界只有 20% 在处理正常流程。那些看起来配好模型就能跑的丝滑体验背后是大量的重试、降级、校验、留痕在兜底。所以如果你打算自己做别被 demo 的流畅骗了把精力放在异常处理上那才是决定能不能上生产的关键。另外一点记忆体系的价值被很多人低估了。一个没有记忆的 Agent 每次都在从零开始效率低且不稳定。而一个好的记忆体系能让 Agent 越用越顺手这才是 AI 原生平台相比传统工具真正的护城河。我建议起步阶段就把记忆的写入和检索设计好后期再补会很痛苦。最后分享一个我常用的调试技巧把 Agent 的每一步决策都打印成人类可读的日志包括它看到了什么、想了什么、决定做什么、结果如何。这份日志比任何可视化界面都有用出问题时顺着日志走一遍问题基本就定位了。这个习惯帮我省了无数排查时间。
返回列表