QA Spider
审计我的网站

AI 应用

测试 AI 应用:哪里会出问题,以及如何测试。

LLM 应用的出错方式与普通 Web 应用不同。模型每次返回的内容都不一样,所以你无法对答案本身做断言——你要断言的是答案之外的一切:响应是否送达、是否流式输出、是否停止、失败时是否有明确提示、是否遵守限制,以及是否从不返回用户无权查看的数据。

最后更新于 2026 年 8 月 24 日

测试 AI 应用有什么不同?

界面是一样的,但约定不一样。传统的测试自动化建立在一个能成立两次的断言上——点这里,看到那个。模型第一次运行就打破了这个前提,所以团队常常断定 AI 功能根本无法做回归测试,然后不加测试就上线了。

其实可以。诀窍是把断言从文字内容挪到确定性的部分:响应是否在预算时间内送达、是否能解析成你要求的结构、引用的文档是否是该用户有权阅读的、拒绝回答是否显示为拒绝、重试是否没有重复扣费。这些都是普通的自动化。判断答案是否好是评估问题,需要你自己的基准真值,应当放在提示词旁边的评估工具中,而不是回归测试套件里。

LLM 应用实际会出什么问题

这些是行为,而不是对输出质量的看法,这正是它们可以被测试的原因。每一项到达用户手中时,表现为产品里的 bug,而不是一个糟糕的答案。

故障用户会怎么遇到测试方法
回答流式输出到一半就停了流式传输中途断开连接,屏幕上留下写了一半的回复,既没有报错也没有重试。用户会把它当作完整的答案。在流式输出中途切断响应,并断言界面显示失败状态,而不是一个被截断的答案。
模型很慢,而界面对此毫无应对p95 延迟高达四十秒,界面却没有进度提示、没有取消按钮,也没有超时处理。用户会再点一次,结果两个请求同时在计费。让响应保持挂起直到超过超时时间,并断言界面有可见的状态、有取消途径,且第二次点击不会产生重复请求。
模型服务商返回 429 或 503速率限制和服务商故障是家常便饭,不是例外。把它们当作不可能发生的应用,会显示原始错误或无休止的加载动画。让服务商返回 429 和 503,并断言应用降级为用户可以据此采取行动的提示信息。
空回复、被拒绝的回复和被安全过滤的回复模型拒绝回答,或安全过滤器被触发,而界面只处理了正常流程,于是渲染出一个空白的气泡。强制产生一次拒绝和一次空的补全;断言两者都不会产生空白消息或破坏布局。
对话丢失了上下文为了适应上下文窗口而裁剪了历史记录,助手悄悄忘掉了三条消息之前被告知的内容。用户只会觉得这个产品很蠢。让对话超出上下文上限,并断言应用会说明丢弃了什么,而不是悄悄丢掉。
工具调用被触发多次智能体重试了一个其工具已经执行过的步骤。该工具做过的事——发送邮件、扣款、写入数据——都会发生两次。让一次工具调用在成功之后才超时,并断言重试不会重复产生副作用。
检索返回了其他租户的文档向量库是在提示词里而不是在查询里做过滤的,所以一次忽略该指令的检索,就会返回用户无权读取的数据。以某个租户的身份查询属于另一个租户的文档,并断言它不在检索结果集中,而不只是没有在答案里被提到。
费用失控,没有上限没有按用户设置的上限,于是一个循环或一个脚本控制的账号,就会变成一笔直到收到账单才有人发现的费用。反复调用同一个接口,并断言存在限制——按用户、按密钥、按分钟。

安全

LLM 安全测试:值得检查的风险面

AI 功能通常会连接到普通功能没有的两样东西:一个付费接口,以及一个会执行它所读到内容中指令的组件。这两者都扩大了攻击面,而标准的应用安全评审并不是为此而设计的。

下面按实际发现的频率排序——这与它们被讨论的顺序并不相同。

  1. 01

    客户端包里的服务商密钥

    模型服务商的密钥被打包进前端 JavaScript,或者可以通过一条前面没有任何鉴权的代理路由访问到。

    任何打开开发者工具的人都能花掉你的额度。这是清单中检查成本最低、漏掉代价最高的一项。

  2. 02

    通过内容进行的提示词注入

    指令被藏在模型会读取的内容里——上传的文档、抓取的网页、客服工单、邮件正文——模型随后照做。

    攻击者根本不需要碰你的输入框。系统接收的任何内容都是输入,无论你是否把它设计成输入。

  3. 03

    触达工具的注入

    注入的指令让智能体去调用工具:发送消息、写入记录、向内部地址发起请求。

    到这一步,注入就不再只是难堪,而会变成事故。影响范围取决于智能体被允许做什么。

  4. 04

    系统提示词和机密信息泄露

    让模型复述它自己的指令、工具定义,或者它拿到的部分配置片段。

    系统提示词里往往包含业务规则、内部端点,偶尔还有没人打算放进去的凭据。

  5. 05

    跨租户检索

    检索的范围是靠客客气气地请模型遵守来限定的,而不是靠过滤查询。

    提示词不是访问控制。如果过滤规则写在指令里,只要有一条指令被忽略,就是一次数据泄露。

  6. 06

    输出被当作标记或代码渲染

    模型输出被作为 HTML 放进页面,或者被放进 shell、查询语句或 eval 中。

    还是经典的注入,只是来源变了。模型现在是不可信的输入,而且是攻击者可以影响的输入。

  7. 07

    无上限的花费造成的拒绝服务

    一个调用付费模型的接口,没有速率限制,没有按账号的上限,也没有对接受内容的大小限制。

    攻击的目的不是让你宕机,而是不断推高账单,直到你自己把服务关掉。

  8. 08

    日志保留了什么

    写入日志和分析系统的提示词与补全内容——包括用户粘贴进去的一切。

    人们会把生产环境凭据和客户记录粘贴进聊天框。你的日志保留策略现在成了一个数据保护问题。

QA Spider 自动化什么,不做什么

表述得足够具体,你可以据此来要求我们。

我们自动化这些

  • 在真实浏览器中操作你的产品,因此上面提到的流式输出、超时、重试、空状态和错误状态,都只是普通的 UI 测试——按计划运行,也在每次部署时运行。
  • 检查界面之下的 API,包括前端用来访问模型的路由。
  • 把失败项作为工单提交到 Jira、Azure DevOps、ClickUp、GitHub 或 Linear,附上复现步骤和截图。
  • 对公开网站做一轮表层安全检查:传输与安全头、Cookie 标志、混合内容、表单暴露、DNS 与邮件仿冒防护。

我们不做这些

  • 我们目前不提供自动化的提示词注入或越狱测试套件。如果有人告诉你他们的爬虫开箱即用就能做到,请让他们给你看断言。
  • 我们不评估答案是否正确。那是评测问题,需要你自己的标准答案,并且与回归测试是不同的学科。

关于测试 AI 应用,大家常问的问题

测试 AI 应用与测试普通网页应用有什么不同?
界面是一样的,输出不一样。普通应用两次返回相同的答案,所以可以直接断言。模型每次返回的内容都不同,所以断言要转移到答案周围的形态和行为上——它是否到达、是否流式输出、是否停止、是否明显地失败,以及花费是否合理。
输出每次都变,怎么写断言?
断言契约,而不是文字。比如响应是否在预算时间内到达,是否能解析成你要求的 schema,是否引用了用户有权查看的文档,拒绝是否被显示为拒绝。评判措辞属于评测,与回归测试套件分开运行。
什么是提示词注入,如何测试?
指令被藏在系统会读取的内容里——文档、网页、工单——模型随后服从这些指令。测试方法是在每一个能到达模型的渠道里埋入指令,并断言其效果永远不会生效:没有调用工具,没有返回数据,没有复述系统提示词。
AI 产品最常见的安全问题是什么?
都是不起眼的问题。浏览器能拿到的服务商密钥、没有速率限制的模型接口,以及靠提示词中的一条指令而不是查询上的过滤来限定范围的检索。这三种都比一次巧妙的越狱更容易发现,也更可能存在。
QA Spider 能测试我的 AI 产品吗?
模型周围的行为可以:流式输出、超时、重试、拒绝、错误状态、速率限制,以及界面之下的 API,在每次部署时用真实浏览器测试。自动化的提示词注入测试套件目前我们不提供,我们宁愿直说,也不想让你以后才发现。
你们会检查模型给出的答案是否正确吗?
不会。正确性需要你自己的标准答案,应该放在由你拥有、并与提示词一起做版本管理的评测框架里。回归测试回答的是另一个问题:昨天还能用的东西,在今天部署之后是否仍然能用。

把它用在你的 AI 产品上。

模型周围的行为——流式输出、超时、重试、拒绝回答、频率限制,以及界面下面的 API——在真实浏览器中测试,每次部署后都运行。

免费开始 →
测试 AI 应用:哪里会出问题,以及如何测试