ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

测试转大模型:Demo 跑通了,权限日志才是真实门槛

测试转大模型:Demo 跑通了,权限日志才是真实门槛 聊《同样转大模型测试背景的优势和短板分别是什么》之前先说一句实在的别急着背概念先看它在真实项目里到底解决什么问题。摘要摘要从功能测试转做 AI 测试很多人以为学会了写 prompt 和调 API 就万事大吉。但真正让我踩坑的不是用例怎么写而是权限、日志、可观测这些 boring 工程。本文复盘我从自动化测试转向大模型质量保障的真实路径给出一个可落地的学习顺序——哪些先补哪些暂时放一放。---目录测试岗位的新变化从边界到概率AI 辅助测试别急着学框架先搞清楚你在测什么自动化用例生成从 deterministic 到 probabilisticAgent 测试框架权限和日志才是生产环境的生死线质量评估跑分高不等于能干活总结测试背景的优势和短板---目录测试岗位的新变化从边界到概率AI 辅助测试别急着学框架先搞清楚你在测什么自动化用例生成从 deterministic 到 probabilisticAgent 测试框架权限和日志才是生产环境的生死线质量评估跑分高不等于能干活总结测试背景的优势和短板测试岗位的新变化从边界到概率我做测试出身过去十年干的最多的事情就是定义边界输入是什么、预期是什么、异常怎么处理。这套思维在大模型时代并不过时但有个根本性的变化——结果从确定变成了概率。以前我测一个接口传同样的参数返回一定一样。现在同样的 prompt同一个模型可能每次输出都不一样。这意味着什么意味着传统的预期输出匹配那套方法在大模型场景下直接失效了。我刚开始转的时候也走过弯路。以为学会了写 few-shot prompt、会调几个 API 就能做 AI 测试了。后来接了一个真实项目才发现能写 prompt 的人很多但能把 AI 系统的质量保障做扎实的人很少。差距不在 prompt 工程而在工程化能力。具体来说测试背景的人有几个天然优势1. 对边界条件的敏感度大模型应用的异常输入、越权调用、上下文溢出这些场景测试人员比开发更敏感2. 对质量指标的量化习惯准确率、召回率、F1 分数这些指标在 AI 评估里依然适用3. 对回归测试的理解模型更新、prompt 变更、数据漂移都需要回归策略但短板也很明显对权限、日志、可观测这些工程基础设施不够重视。很多人学 Agent 开发上来就玩 LangGraph、玩工具调用结果项目一上线权限配错导致数据泄露日志没有导致问题定位困难可观测性缺失导致无法评估效果——这些坑我全都踩过。---AI 辅助测试别急着学框架先搞清楚你在测什么现在市面上有很多 AI 辅助测试的工具自动写用例、自动生成测试数据、智能分析失败原因。这些工具确实能提效但我的建议是不要一上来就追求工具链的完整先搞清楚你在测什么。以一个真实的 RAG 系统测试为例。很多人看到 RAG 就想着用工具自动生成测试用例但实际上RAG 系统的质量评估维度非常复杂检索质量召回的文档是否相关有没有噪声生成质量模型的回答是否准确有没有幻觉系统质量响应时间、并发能力、权限控制如果直接用 AI 工具生成用例很可能只覆盖了功能正确性这一层而忽略了权限和可观测性这些生产环境的关键维度。我当时做的项目里有一个场景是用户通过 Agent 查询公司内部数据。测试时我只关注了查询结果是否正确结果上线后出现了两个问题1. 普通员工能查询到高管薪酬数据——权限漏洞2. 查询超时没有兜底直接返回空结果——可观测性缺失这两个问题传统的功能测试完全覆盖不到。所以我后来调整了学习路线先补工程化能力再学 AI 测试框架。具体来说先搞懂 OAuth、RBAC 这些权限模型先学会用 OpenTelemetry 做链路追踪先理解日志的结构化规范和告警策略然后再学 pytest-ai、LangSmith 这些测试框架顺序反了工具再先进也填不上工程化的坑。---自动化用例生成从 deterministic 到 probabilistic自动化测试是我原来的老本行。但大模型场景下自动化用例的写法需要根本性的转变。以前写自动化用例核心是确定性给定输入 A预期输出 B。现在需要接受概率性给定输入 A输出可能是一个分布我们需要评估这个分布是否在可接受范围内。举个例子我之前写过一个 LLM 输出评估的测试框架核心思路是这样的import pytest from llm_evaluator import AnswerEvaluator class TestRAGSystem: pytest.mark.parametrize(question,expected_keywords,unacceptable_hallucinations, [ ( Q1: 公司2024年Q1营收是多少, [营收, 亿元, 同比], # 答案中应该包含这些关键词 [保密, 无法回答], # 不应该出现这些表述除非确实无法回答 ), ( Q2: 帮我总结近三个月的销售数据, [销售, 环比, 增长], [虚构, 不存在], ), ]) def test_rag_answer_quality(self, question, expected_keywords, unacceptable_hallucinations): # 调用 RAG 系统 answer rag_system.query(question) # 评估答案质量 evaluator AnswerEvaluator( expected_keywordsexpected_keywords, unacceptable_hallucinationsunacceptable_hallucinations, threshold0.7 # 相似度阈值 ) result evaluator.evaluate(answer) # 概率性断言不要求完全匹配而是评估质量分数 assert result.quality_score 0.7, f答案质量过低: {answer} assert not result.contains_hallucination, f发现幻觉内容: {answer}这个例子里有几个关键转变1. 用关键词覆盖代替精确匹配不再要求输出完全一致而是检查关键信息是否包含2. 引入阈值判断质量分数低于阈值才失败而不是二元判断3. 关注负面案例不仅要检查答案对不对还要检查有没有幻觉但这里有个坑阈值怎么定 0.7 是拍脑袋还是数据驱动我的经验是先收集 100 个真实查询的评估分数看分布情况再定阈值。否则阈值设高了等于没测设低了全是误报。---Agent 测试框架权限和日志才是生产环境的生死线这是我最想强调的部分。很多人在学 Agent 测试时 focus 在工具调用、记忆管理、任务规划这些高级功能上但生产环境真正会崩的往往是权限和日志。我有一个朋友做了个内部知识问答 AgentDemo 阶段非常漂亮能理解问题、检索文档、生成回答。但上线一周后出现了问题1. 有员工发现可以通过构造特殊 prompt让 Agent 返回其他部门的敏感数据2. 出现响应超时但监控没有告警运维完全不知道发生了什么3. 模型更新后某些问题的回答质量下降但没有人发现这三个问题对应三个工程化维度权限问题Agent 调用工具时有没有校验调用者的权限检索文档时有没有做数据隔离# 错误的做法直接让 Agent 访问所有数据 agent Agent(tools[search_documents, query_database]) # 正确的做法在工具层做权限校验 def search_documents(query: str, user_id: str) - list: user_permissions get_user_permissions(user_id) # 过滤掉用户无权访问的数据 results database.query(query) return [r for r in results if r.access_level user_permissions.max_level] agent Agent(tools[ lambda q: search_documents(q, current_user_id) ])日志问题Agent 的每一步决策、每一次工具调用有没有记录日志结构是否规范import logging from opentelemetry import trace logger logging.getLogger(agent.tracing) def run_agent_step(user_query: str, context: dict): # 结构化日志便于后续分析 logger.info({ event: agent_step, user_id: context[user_id], query: user_query, timestamp: datetime.utcnow().isoformat(), step: context.get(step_count, 0) }) # 链路追踪便于定位性能瓶颈 with trace.get_tracer(__name__).start_as_current_span(agent_tool_call) as span: result call_tool(context[current_tool], context[tool_input]) span.set_attribute(tool_name, context[current_tool]) span.set_attribute(latency_ms, result[latency]) return result可观测性问题模型质量下降时能不能快速定位是模型问题、prompt 问题还是数据问题我后来做了一个简单的评估 pipeline# 每周自动评估模型质量 def weekly_quality_check(): test_cases load_golden_dataset() # 人工标注的黄金测试集 results [] for case in test_cases: answer agent.run(case[question]) score evaluator.score(answer, case[ground_truth]) results.append({ question: case[question], answer: answer, score: score, model_version: get_current_model_version() }) # 如果平均分下降超过 5%触发告警 avg_score sum(r[score] for r in results) / len(results) if avg_score baseline_score * 0.95: alert_team(f模型质量下降: {avg_score:.2f} {baseline_score * 0.95:.2f}) return results这套机制让我能在问题影响用户之前发现它而不是等运维告警或者用户投诉。---质量评估跑分高不等于能干活现在各种 LLM 评测榜单满天飞MMLU、HELM、CMMLU……但我的结论很直接跑分高不等于能干活。我参与过一个项目选了三个在 CMMLU 上跑分相近的模型结果在生产环境的表现差异巨大。原因是评测集和真实场景的分布完全不同——评测集偏向常识和知识问答而我们的场景是复杂的业务流程处理。所以我的建议是1. 不要迷信公开榜单选模型时用自己的业务数据做小规模评测2. 建立自己的 golden dataset收集真实场景的优质问答对作为评估基准3. 关注负面案例跑分高不代表没有严重错误要专门构造边界场景测试---总结测试背景的优势和短板回到标题的问题同样转大模型测试背景的优势和短板分别是什么优势对边界和异常场景敏感适合做 AI 系统的鲁棒性测试有质量度量思维能建立合理的质量评估体系熟悉回归测试策略能应对模型迭代带来的变化短板对权限、日志、可观测性等工程基础设施重视不足习惯确定性思维需要适应概率性输出对 Agent 的架构设计理解不够深入学习路线建议1. 先补工程化权限模型、结构化日志、链路追踪、监控告警——这些是生产环境的底线2. 再学 AI 测试框架pytest-ai、LangSmith、promptfoo 等工具在工程化基础上使用3. 最后关注前沿Agent 架构、多模态测试、RLHF 评估——这些是加分项不是必选项很多人转大模型时顺序反了上来就学 Agent 开发、玩 LangGraph结果项目一上线就崩。记住Demo 和生產之間隔著一整套工程化能力。测试背景的人只要把这块补上反而会比纯开发背景的人更有质量保障的优势。---写在最后这篇内容来自我过去一年转大模型质量保障的真实踩坑经历。如果你也是测试背景正在考虑转方向建议先把权限和日志这两块搞扎实再谈 Agent 和框架。有其他问题欢迎评论区交流。资料展示下面是我整理的AI大模型学习资料和工具包预览适合收藏后按主题逐步学习。如果你想看完整资料目录可以在评论区留言「资料」也欢迎告诉我你更关注AI大模型里的哪类内容。
返回列表