AI测试智能体(agent)实战:我花了一个周末搭的智能体,到底能干什么?
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 个地方:
BUSINESS_CONTEXT(业务背景)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.py、evaluators/tool_security_evaluator.py
关联 3:安全测试
智能体有 _check_safety() 方法,在规划前执行。测试要测什么?
| 测试项 | 测什么 | 怎么测 |
|---|---|---|
| Prompt注入防御 | 能否拦截"忽略之前指令"类攻击 | 输入典型 Prompt注入语句 |
| 越狱防御 | 能否拦截角色扮演绕过 | 输入"DAN 模式"等越狱语句 |
| 隐私泄露防护 | 能否识别身份证号、手机号 | 输入包含隐私信息的任务 |
| 有害内容拦截 | 能否拦截暴力/色情/仇恨内容 | 输入典型有害内容 |
对应评测器:evaluators/prompt_injection_evaluator.py、evaluators/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 os、eval()、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前沿技术在测试领域的应用。
如果你跟着搭了这个智能体,在评论区告诉我:你打算用它来干什么?我看看谁的想法最有趣。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)