← 返回信息流
AI 资讯Hacker News·2 小时前

开源QA代理Sentinel:点击前先读代码

原标题:Show HN: Sentinel – open-source QA agent that reads your code before it clicks

速览

Sentinel作为开源QA代理,创新性地在点击操作前先读取代码,理解其逻辑后再执行测试。它通过代码分析提升测试准确性,减少误操作。该工具面向开发者和测试工程师,旨在自动化QA流程,提高效率。

AI 深度解读

背景

当前的AI测试代理大多停留在“点击”层面:打开页面、点击按钮、发现一个元素错位或控制台报错,然后宣告任务完成。这种做法的价值约等于冒烟测试——代理并没有真正理解产品做什么。一位合格的QA工程师不会盲目点击,而是先学习产品,再推理业务逻辑:这是一个酒店系统,所以我要测试单笔预订、团体预订、取消后释放房间、入住、退房、夜审,并确认每一项都在服务端真正持久化,而不是仅仅相信UI看起来正常。

Sentinel正是为了解决这个“点击与理解之间的鸿沟”而诞生的开源QA代理。它由开发者在Hacker News上展示,采用MIT许可证开源。

核心内容

Sentinel是一个会先读取你的代码库,再执行操作的端到端测试代理。它通过以下方式工作:

1. 读取代码库(Repo Recon)
通过确定性扫描(grep和find,不调用模型)提取项目结构:前端路由、API路由模块、服务、数据库实体。模型基于这个摘要进行推理,而不是盲目爬取整个monorepo(那样既慢又容易遗漏)。

2. 推导业务流(Flow Derivation)
使用Mimo模型(通过pi agent harness运行)将代码摘要转化为优先级排序的端到端业务流列表,每个流包含UI步骤、后端断言和边界情况。计划基于commit缓存,只有代码变化时才重新推导。

3. 运行流程(Flow Execution)
每个流程作为一个代理循环执行:模型决定下一步动作,Playwright驱动浏览器,同时内置的api_request工具在每个步骤检查服务端状态(通过页面内执行fetch,复用前端发送的Authorization头)。模型只能使用浏览器和API工具,不能访问shell或文件系统。每个尝试有硬性预算限制(超过90次工具调用后动作工具拒绝继续,只能调用finish)。

4. 多次运行
由于自主代理是非确定性的,每个流程默认运行两次(FLOW_ATTEMPTS可配置),发现结果取并集:任何一次尝试发现的bug都会进入报告,每个流程保留所有尝试中的最差判定。

5. 设计评分(Design Grading)
代理访问过的每个不同屏幕(按URL去重,默认每轮最多8个)会由多模态模型进行视觉评分,评估视觉层次、间距、可能违反WCAG对比度的文本、排版和破损状态。这是纯DOM检查无法看到的层面。

真实案例:无指令测试酒店PMS
开发者将Sentinel指向一个完整的全栈酒店PMS(KaribuKit,他们自己的产品),仅提供仓库和一次性测试租户的admin凭证,没有测试计划或流程列表。Sentinel读取代码后自行得出结论:这是一个精品酒店和safari酒店PMS,并推导出9个关键业务流:

  • 完整的预订生命周期
  • 团体预订
  • 从线索到提案的管道
  • 房价管理
  • 客人自助服务
  • 入住期间换房
  • 夜审
  • 从发票到退款的支付
  • AI copilot(取消被作为边界情况和后端检查嵌入其他流程中)

它随后运行了排名前两个的流程,各两次。追踪记录展示了类似人类的手工测试过程:

  • 调用GET /api/availability得到400,计算出缺失参数后重试adults=2&children=0得到200。
  • 通过POST /api/reservations创建真实预订(201),然后回查确认持久化正确。
  • 遍历状态生命周期,通过试错找到入住端点(/checkin返回404,/check-in返回400,最终有效调用返回200),并检查了账单(folio)。

发现的Bug(UI层面无法发现)

  • 确认预订时返回NO_AVAILABILITY,尽管同一预订已经持有该房间——后端状态机bug,UI在一种情况下显示误导性的“No rooms available”,另一种情况下无任何反馈。
  • 日历显示房间在已有预订后仍可用——API和UI不一致,只有同时检查两层才能发现。
  • 入住返回200,但客人的registrationStatus在服务端仍为NONE——状态转换只完成了一半。

技术架构
Sentinel的底层引擎是flow,一个pipeline。它使用Mimo模型(mimo-v2.5)进行决策,通过pi agent harness驱动。所有调度基于launchd,每15分钟检查一次仓库,每次新commit触发代码审查,QA按设定频率(如12或24小时)运行。Sentinel还有三个兄弟代理:

  • 代码审查代理:读取每个新diff
  • 文档同步代理:保持Markdown与代码匹配
  • 大脑同步代理:将每个仓库的变更提炼到共享团队知识库中

版本演化

  • v1:确定性Node循环,每次调用Mimo作为无工具的单次“大脑”,但循环本身是天花板,无法积累上下文测试多步流程。
  • v2(pi-native):将Playwright工具注册为pi扩展,让Mimo在pi的代理循环内驱动,拥有完整会话记忆,但依然需要手动编写目标。
  • v3:当前flow引擎,自动读取代码推导流程并运行。

关键要点

  • Sentinel是开源QA代理,MIT许可证,核心思想是“先读代码再点击”,而非盲操作。
  • 通过确定性扫描提取代码结构,模型只用于需要判断的环节:推导流程、决定下一步动作、评分屏幕设计。
  • 在无任何测试计划的情况下,Sentinel仅凭代码和凭证自行推导出9个关键业务流,接近人类QA主管会列出的清单。
  • 它发现了多个UI无法捕捉的bug:后端状态机不一致、API与UI数据冲突、半完成的状态转换。
  • 每个流程运行两次以应对非确定性,结果取并集,且每个流程保留最差判定。
  • 集成视觉设计评分,使用多模态模型检查屏幕的视觉层次、对比度等,弥补DOM-only检查的盲区。
  • 使用Mimo模型(mimo-v2.5)通过pi agent harness驱动,v1曾因模型太弱失败,v3利用模型作为agent loop的核心。
  • 只支持常见JS技术栈(Next.js、Express、Fastify、Prisma、Drizzle或纯SQL schema),但其他栈可通过扩展recon支持。
  • 所有代理运行在调度系统上,有预算限制(90次工具调用上限),且不会自动合并PR,保证安全。
  • 三个兄弟代理分别处理代码审查、文档同步和知识蒸馏,构成完整的自动化质量保障体系。

意义与影响

Sentinel的出现代表了一种新型测试范式的尝试:从“脚本化测试”或“简单AI点击”转向“代码理解驱动的自主测试”。它模拟了人类QA工程师先学习产品再推理的思维方式,将测试从表面验证提升到业务逻辑验证层面。

其开源性质(MIT许可证)意味着社区可以自由

查看原文 →blog.simbastack.com