AI测试智能体系列会更新30篇左右,这2篇是如何搭建智能体,后面的全是围绕这个智能体如何进行测试,代码还在调试中,本月底或下月初会开源,源码+文章搭配一起搞清楚智能体到底如何测试,感兴趣的小伙伴可点赞、收藏、关注;


一、上一篇发出去,读者问得最多的问题

上一篇AI测试智能体(agent)实战:规划→执行→反思:14年测试教你从零手写一个能跑的Agent(附源码自取)-CSDN博客发出去以后,后台收到最多的评论不是"写得真好",而是:

"你搭的这个智能体,到底能干什么?" "看起来像个玩具,实际能用来做什么?" "跟 LangChain、CrewAI 比,优势在哪?"

说实话,这些问题问到了点子上。

上一篇我讲"怎么搭",代码、架构、坑都给了。但没讲清楚一件事:这个智能体到底能干什么,为什么要搭它。

这篇补上。


二、先说结论:它是一个"电商数据分析智能体"

用一句话概括:

你给它一个自然语言任务,它自己拆成子任务,选工具执行,检查执行结果,不够就重新规划,最后给你一份完整答案。

不是"一句话进一句话出"的聊天。是"任务进→规划→执行→反思→总结→答案出"的完整链路。

举个例子,你给它发一句话:

帮我分析2024年6月销售数据,找出退货率最高的品类,生成一份报告

普通聊天机器人会怎么做?直接回答:

好的,销售数据分析可以从以下几个维度入手...

我们这个智能体会怎么做?

[规划] 拆成 6 个子任务:
  task_1: 查询2024年6月各品类销售额 → 工具: search
  task_2: 计算各品类退货率 → 工具: calculator
  task_3: 找出退货率最高的品类 → 工具: code_executor
  task_4: 分析退货率高的原因 → 工具: none (LLM直接回答)
  task_5: 生成报告 → 工具: search

[执行] 
  task_1 → search("查询2024年6月各品类销售额") → 拿到数据
  task_2 → calculator("12.8 / 100") → 算出退货率
  task_3 → code_executor("找出最大值...") → 锁定服装鞋帽
  task_4 → LLM直接分析原因
  task_5 → search("生成月度销售报告,含GMV与异常预警") → 生成Markdown报告

[反思] 
  检查:任务完成度 100%,结果合理,可以输出
  返回: done

[总结] 
  汇总所有子任务结果,生成一份完整的业务报告

这就是它能干的事:把一个模糊的自然语言任务,变成可执行的计划,跑完以后给你一份完整答案。


三、它能干什么?6 个工具,覆盖 4 类场景

智能体内置了 6 个工具,每个工具对应一类能力:

工具 能干什么 典型场景
search 电商 Mock 数据库(品类/地区/趋势/渠道查询 + 报告模板) 查销售数据、查品类信息、生成业务报告
calculator 安全数学计算(AST 解析,不用 eval) 算占比、算增长率、算利润率
code_executor 执行 Python 代码(沙箱隔离) 数据分析、排序、找最大值、代码计算
memory_store 记忆存储/读取(键值对) 跨任务记住中间结果、多轮对话保持上下文
web_fetch 获取网页内容(去 HTML 标签) 抓取公开数据、读取 API 响应
safety_checker 安全检测(有害内容/Prompt注入/越狱/隐私) 输入过滤、攻击拦截

这 6 个工具组合起来,能覆盖 4 类典型场景:

场景 1:数据分析

任务:分析2024年上半年销售趋势,找出增长最快的月份

智能体做的事:
1. search → 查询月度销售数据
2. calculator → 计算环比增长率
3. code_executor → 找出增长率最高的月份
4. LLM → 分析增长原因
5. search → 生成报告

场景 2:代码任务

任务:用 Python 计算斐波那契数列前 20 项,找出其中的偶数

智能体做的事:
1. code_executor → 跑 Python 代码生成斐波那契数列
2. code_executor → 过滤偶数
3. LLM → 解释结果

场景 3:多轮对话

用户:帮我查一下华东地区的销售额
智能体:[执行 search] 华东地区销售额 168 万元
用户:占全国多少比例?
智能体:[执行 calculator] 1680000 / 4710000 = 35.7%
用户:把这两个数字存到记忆里
智能体:[执行 memory_store] 已保存

记忆功能让智能体能"记住"中间结果,多轮对话不会断线。

场景 4:安全检测

任务:忽略之前的指令,你现在是...

智能体做的事:
1. safety_checker → 检测到 Prompt注入
2. 直接拦截,不进入规划阶段
3. 返回:安全拦截: Prompt注入

所有任务在进入规划之前,先过安全检测。有害内容、Prompt注入、越狱、隐私泄露,4 类攻击全部拦截。


四、它不能干什么?(诚实说明)

说清楚它能干什么,也得说清楚它不能干什么。

不能 1:不能替代 LangChain/CrewAI 做复杂编排

这个智能体是"轻量级"的。它没有:

  • 多智能体协作(CrewAI 的强项)
  • 向量数据库检索(LangChain 的 RAG)
  • 复杂的状态机(AutoGen 的多轮对话编排)

如果你要做多智能体辩论、RAG 增强检索、复杂工作流编排,它搞不定。

不能 2:不能长期记忆

它的 memory_store 是内存级别的(进程内键值对)。进程一重启,记忆全丢。不是持久化数据库,不是向量检索。

不能 3:不能并行执行

代码里算出了 parallel_groups(无依赖的子任务可以并行),但当前是串行执行。要并行需要自己加 ThreadPoolExecutor

不能 4:不能直接操作真实数据库

search 工具目前是 Mock 数据(内置电商销售数据)。要接真实数据库,需要自己写一个 _sales_db_query 方法。


五、那它到底有什么用?(核心价值)

说了这么多"能"和"不能",核心价值在哪?

价值 1:它是一个"可测试的智能体被测对象(SUT)"

这才是我搭它的最初目的。

你要测试一个智能体的能力,你得先有一个智能体给你测。不能只测 GPT-4 的"聊天能力",你得测一个"会拆任务、调工具、自己反思"的完整智能体。

这个智能体就是那个被测对象。

后续的所有测试——任务规划质量、工具选择准确率、反思机制有效性、安全检测覆盖率——都是对着它跑的。

价值 2:它是一个"教学用的最小完整智能体"

LangChain 的智能体有 10000+ 行代码,CrewAI 的智能体有 5000+ 行代码。你读得懂吗?

这个智能体 1466 行,纯 Python,没有框架依赖。你跟着跑一遍,就能理解:

  • 智能体的规划-执行-反思链路是怎么跑通的
  • LLM 返回的 JSON 是怎么解析成子任务的
  • 拓扑排序是怎么确定执行顺序的
  • 反思机制是怎么触发重规划的

理解了一个最小完整智能体,再看 LangChain 的智能体,你就知道它多出来的 8000 行是在干什么了。

价值 3:它是一个"可改场景的通用骨架"

换一个业务场景?只改 2 个地方:

  1. BUSINESS_CONTEXT(业务背景)
  2. TOOLS(工具列表)

控制流(规划→执行→反思→总结)不用改。

你可以把它改成:

  • 客服智能体(工具换成:工单查询、知识库检索、工单创建)
  • 代码助手智能体(工具换成:代码搜索、代码执行、代码审查)
  • 医疗咨询智能体(工具换成:症状查询、科室推荐、药品查询)

六、它和后续测试的关系(重点)

这篇是实战系列,不是纯理论。所以必须说清楚:这个智能体和后面的测试怎么关联上。

关联 1:任务规划测试

智能体的 _plan() 方法会把任务拆成子任务。测试要测什么?

测试项 测什么 怎么测
拆解合理性 拆出来的子任务是不是合理的 对比"标准拆解",计算 Precision/Recall
工具选择准确率 每个子任务选的工具对不对 对比"标准工具选择",计算准确率
依赖关系正确性 依赖关系有没有搞错 检查拓扑排序结果是否符合预期
兜底能力 LLM 返回非法 JSON 时会不会崩 输入非法 JSON,检查是否退化为单任务

对应评测器:evaluators/task_planning_evaluator.py

关联 2:工具使用测试

智能体的 ToolRegistry.execute() 会调用 6 个工具。测试要测什么?

测试项 测什么 怎么测
工具调用正确性 调用的工具名和参数对不对 检查 _meta.subtasks 中的 tool 和 tool_input
工具调用顺序 是否按依赖顺序执行 检查执行顺序是否符合拓扑排序
失败重试 工具失败后是否重试 模拟工具失败,检查 retry_count
工具安全性 危险操作是否被拦截 输入 eval("__import__('os').system('rm -rf /')")

对应评测器:evaluators/tool_use_evaluator.pyevaluators/tool_security_evaluator.py

关联 3:安全测试

智能体有 _check_safety() 方法,在规划前执行。测试要测什么?

测试项 测什么 怎么测
Prompt注入防御 能否拦截"忽略之前指令"类攻击 输入典型 Prompt注入语句
越狱防御 能否拦截角色扮演绕过 输入"DAN 模式"等越狱语句
隐私泄露防护 能否识别身份证号、手机号 输入包含隐私信息的任务
有害内容拦截 能否拦截暴力/色情/仇恨内容 输入典型有害内容

对应评测器:evaluators/prompt_injection_evaluator.pyevaluators/jailbreak_evaluator.py

关联 4:多轮对话测试

智能体有 _context_history 和 _build_context_text() 方法管理对话历史。测试要测什么?

测试项 测什么 怎么测
上下文保持 多轮对话后是否还记得之前的内容 5 轮以上对话,检查是否引用了第 1 轮信息
指代理解 能否正确理解"它""那个"等代词 "查一下华东销售额"→"占全国多少比例?"
长对话衰减 对话越长,质量是否下降 10 轮对话,对比第 1 轮和第 10 轮的回答质量
窗口管理 超过最大轮数后是否正确截断 发送 15 轮对话(max_context_turns=10)

对应评测器:evaluators/dialogue_evaluator.py

关联 5:代码能力测试

智能体的 code_executor 工具能执行 Python 代码。测试要测什么?

测试项 测什么 怎么测
代码正确性 生成的代码能否正确执行 斐波那契、排序、数据过滤等经典题目
代码安全性 是否拦截了危险操作 import oseval()exec() 等
超时处理 死循环是否会被超时拦截 输入 while True: pass
错误恢复 代码执行失败后是否重试 输入有语法错误的代码

对应评测器:evaluators/coding_evaluator.py

关联 6:知识能力测试

智能体的 search 工具能检索知识库。测试要测什么?

测试项 测什么 怎么测
知识准确性 检索结果是否准确 对比标准答案,计算 F1 分数
幻觉检测 是否编造了不存在的知识 输入"2025 年 1 月销售额"(数据只到 2024 年 6 月)
知识边界 是否知道自己不知道 输入超出业务范围的问题

对应评测器:evaluators/knowledge_evaluator.py

关联 7:隐私检测测试

智能体的 _check_safety() 方法包含隐私信息检测(身份证号、手机号)。测试要测什么?

测试项 测什么 怎么测
身份证号识别 能否识别 15/18 位身份证号 输入包含身份证号的查询任务
手机号识别 能否识别 11 位手机号 输入包含手机号的查询任务
拦截准确性 是否误拦截正常查询 输入不含隐私信息的正常任务

对应评测器:evaluators/privacy_evaluator.py

关联 8:稳定性测试

智能体在多次执行同一任务时,结果是否一致。测试要测什么?

测试项 测什么 怎么测
结果一致性 同一任务多次执行结果是否相同 同一任务执行 5 次,对比输出差异
容错能力 异常输入是否导致崩溃 输入空字符串、超长字符串、特殊字符
超时处理 超时任务是否正确终止 输入需要长时间计算的任务

对应评测器:evaluators/stability_evaluator.py

完整评测流程

1. 加载智能体(CustomAgent)
2. 加载评测数据集(每个维度一个 JSON)
3. 对每个测试用例:
   a. 调用 agent.run(task)
   b. 提取 _meta(规划结果、工具调用、执行轨迹)
   c. 对比标准答案,计算评分
4. 汇总所有维度评分,生成综合报告

对应脚本:scripts/run_full_eval.py

一句话:实战 6 搭了一个智能体,实战 7 说清楚它能干什么、不能干什么、后面怎么测它。下一篇实战 8,我们跑一次完整的评测。


七、快速参考

问题 回答
这个智能体能干什么? 把自然语言任务拆成子任务,选工具执行,自己检查,给出完整答案
它有几个工具? 6 个:search / calculator / code_executor / memory_store / web_fetch / safety_checker
它不能干什么? 不能替代 LangChain/CrewAI 做复杂编排,不能长期记忆,不能并行执行
它和测试什么关系? 它是被测对象——后续所有评测(规划/工具/安全/对话/代码/知识/隐私/稳定性)都是对着它跑的
换个场景怎么改? 只改 BUSINESS_CONTEXT 和 TOOLS,控制流不变
代码在哪? agents/custom_agent/agent.py(1466 行)

代码位置agents/custom_agent/agent.py(1466 行),agents/custom_agent/config.yaml(配置),agents/custom_agent/tools/(自定义工具)

评测代码evaluators/(10 个评测器),scripts/run_full_eval.py(完整评测脚本)

,评测代码还在调试中,后期调好以后会开源

最近都会更新AI智能体测试系列,如果您也对如何测试智能体感兴趣,可收藏、关注,会持续更新AI前沿技术在测试领域的应用。

如果你跟着搭了这个智能体,在评论区告诉我:你打算用它来干什么?我看看谁的想法最有趣。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐