【大模型预备5】LLM应用迭代测评工程
从发现缺陷、Prompt迭代到自动化回归测试
前言
很多新手做大模型项目只会写 Prompt、单次调用、看效果,完全没有工程化迭代思维。
真正企业级 LLM 开发流程是:测试发现问题 → 迭代优化 Prompt → 回归全量用例 → 量化测评对比 → 固化版本。
本文以我的 LifeCraft 五维属性判定系统为实战案例,完整讲解大模型迭代测评的标准工程流程,解决:
为什么不能随便改 Prompt?
发现新场景、发现漏洞该怎么迭代?
什么是 LLM 回归测试、边界测试、量化测评?
如何实现可复用、可量化、可迭代的 Prompt 工程体系?
一、传统开发 vs LLM 迭代开发的本质区别
1.1 传统软件
发现 Bug → 改代码 → 修复 Bug → 重新测试功能
逻辑固定、结果确定性高
1.2 大模型应用
Prompt 是“代码”,模型理解是“运行逻辑”,存在:语义偏差、边界缺失、泛化不足、输出不稳定。
因此 LLM 项目必须依赖:持续测试 + 持续迭代 + 量化测评,无法一次性写完就永久可用。
二、什么是 LLM 迭代测评(核心概念)
迭代测评是大模型专属工程流程:
在持续发现新场景、新漏洞、新需求的过程中,不断优化提示词,通过全量回归测试验证改动不会破坏原有功能,并且通过量化指标证明优化效果。
完整闭环五步:
测试发现缺陷(边界场景、规则漏洞、输出错误)
针对性迭代 Prompt(规则、示例、输出格式升级)
全量回归测试(旧用例全部重跑,防止改崩)
量化测评对比(准确率、合规率前后对比)
固化版本(形成稳定可用的 Prompt 版本)
三、实战迭代案例:从「单属性判定」升级「多属性联动判定」
针对上一篇提到的个人项目LifeCraft,在测试过程中发现存在行为多属性变化场景。
3.1 迭代前现状(V1.0)
最初设计的 Prompt 逻辑:
一个行为只判定一个核心属性
输出格式:
数字,+ / 数字,-仅支持单一维度增减
3.2 测试发现重大业务漏洞
在做边界测试时发现:真实生活行为大多是复合型、多属性联动的。
例如:
熬夜看书学习 =心智提升 + 体魄损耗
做家务听歌 =行动力提升 + 愉悦值提升
通宵聚会社交 =人缘提升 + 体魄损耗
原 V1.0 Prompt 只能输出单一结果,导致:
业务逻辑不完整
属性奖惩失真
模型无法处理交叉场景
3.3 正确迭代方式(不直接瞎改,工程化升级)
Prompt 迭代严禁直接凭感觉修改,必须改三处:
1)规则层新增逻辑(I 模块)
增加描述:单条行为可能同时影响多项属性,需全部识别、全部输出,不可只取主行为。
2)输出格式层升级(P 模块)
兼容双格式:
单属性:
2,+多属性:英文逗号分隔
2,+,1,-
3)Few-shot 示例层新增边界案例(E 模块)
本地小模型 7B 必须依赖示例才能理解复杂多输出逻辑,新增:
熬夜看书学习 =心智提升 + 体魄损耗(双属性)
做家务听歌 =行动力提升 + 愉悦值提升(双属性)
通宵聚会社交 =人缘提升 + 体魄损耗(双属性)
通宵和朋友熬夜开黑打游戏 =人缘提升、体魄损耗、愉悦值提升(三属性)
心情低落摆烂,拒绝社交独自刷娱乐视频 =人缘损耗、行动力损耗、愉悦值提升(三属性)
带病坚持学习、整理当日任务 =心智提升、行动力提升、体魄损耗(三属性)
3.4 回归测试(关键步骤)
Prompt 更新后,必须全量回归:
30 条常规单属性用例全部重跑(保证老功能不崩)
10 条多属性边界用例新增测试(验证新功能生效)
目的:防止 Prompt 优化新场景,却破坏原有简单场景的判定精度。
3.5 量化测评(产出迭代数据)
对比迭代前后指标:
迭代前 V1.0
常规场景准确率:95%+
边界多场景准确率:0%
多属性业务完全无法覆盖
迭代后 V1.1
常规场景准确率:保持不变
边界多属性场景准确率:90%+
格式合规率:100%
3.6 版本固化
将新版 Prompt 命名为 V1.1 存档,完成一次标准 LLM 迭代闭环。
四、工程化落地:用代码导入用例实现自动化测评
人工逐条测试效率极低,真正工程化做法是:用例文件独立导入 + 批量自动化测试 + 自动统计准确率。
4.1 项目结构
project/ ├── test_cases.py # 所有测试用例+标准答案 ├── prompt_template.py# 统一管理Prompt版本 └── run_test.py # 自动化测评脚本① test_cases.py 测试用例文件
# 1、基础单属性日常场景single_attr_cases=[{"action":"今晚通宵熬夜没有睡觉","expect":"1,-"},{"action":"早起慢跑锻炼身体","expect":"1,+"},{"action":"一整天不停刷短视频","expect":"2,-"},{"action":"学习AI大模型相关知识","expect":"2,+"},{"action":"周末在家大扫除洗衣服","expect":"3,+"},{"action":"这几天摆烂拖延啥活都不干","expect":"3,-"},{"action":"和好朋友出门逛街吃饭","expect":"4,+"},{"action":"跟伴侣闹矛盾刻意冷战疏远","expect":"4,-"},{"action":"睡前听歌追剧放松心情","expect":"5,+"},{"action":"压力太大整日情绪低落难受","expect":"5,-"},]# 2、双属性一增一减/双向增益场景double_attr_cases=[{"action":"熬夜看书学习新知识","expect":"2,+,1,-"},{"action":"做家务一边听歌放松","expect":"3,+,5,+"},{"action":"和朋友聚会大吃大喝通宵玩耍","expect":"4,+,1,-"},]# 3、三属性联动复杂场景(最高难度边界用例)triple_attr_cases=[{"action":"通宵和朋友熬夜开黑打游戏","expect":"4,+,1,-,5,+"},{"action":"心情低落摆烂,拒绝社交独自刷娱乐视频","expect":"4,-,3,-,5,+"},{"action":"带病坚持学习、整理当日任务清单","expect":"2,+,3,+,1,-"},]# 合并全部测试用例,一键全量执行all_test_cases=single_attr_cases+double_attr_cases+triple_attr_cases② prompt_template.py 提示词版本管理文件
# Prompt V1.1 支持多属性联动判定版本PROMPT=""" 【C】能力:生活五维属性精准判定助手 五大属性固定定义: 1=体魄:睡眠、运动、熬夜、身体健康、三餐作息相关 2=心智:学习知识、阅读、动脑思考、无意义消遣刷视频相关 3=行动力:做家务、完成计划、做事执行、拖延摆烂相关 4=人缘:朋友聚会、人际交往、冷战、拒绝社交往来相关 5=愉悦:情绪心情、放松消遣、低落内耗、开心休闲相关 【R】角色:只输出属性变化结果,不解释、不闲聊、不加任何中文文字 【I】硬性判定规则: 1. 逐行对照5个属性检查行为,所有发生增减的维度必须全部写出,禁止漏掉任意一个受影响属性; 2. + 代表属性数值上涨,- 代表属性数值下降; 3. 不得主观挑选主属性,次要影响也要完整输出; 【P】输出格式严格遵守: 1. 单个属性变动:编号,符号 例:1,+ 2. 多个属性变动:英文逗号分隔拼接 例:2,+,1,- 、4,+,1,-,5,+ 3. 只允许数字、英文逗号、+、- 四种字符 【E】大量参考样例: # 单属性示例 行为:早起慢跑锻炼身体 → 1,+ 行为:通宵不睡熬夜 → 1,- 行为:全天刷短视频消磨时间 → 2,- 行为:学习大模型专业知识 → 2,+ 行为:全屋大扫除洗衣服 → 3,+ 行为:整日拖延什么事都不做 → 3,- 行为:和好友逛街聚餐 → 4,+ 行为:刻意冷战疏远伴侣 → 4,- 行为:睡前追剧听歌放松心情 → 5,+ 行为:长期压力大心情压抑 → 5,- # 双属性示例 行为:熬夜看书学习新知识 → 2,+,1,- 行为:做家务同时听歌放松 → 3,+,5,+ 行为:通宵聚餐吃喝玩乐 → 4,+,1,- # 三属性复杂示例 行为:通宵和朋友开黑打游戏 → 4,+,1,-,5,+ 行为:心情低落摆烂、拒绝社交刷短视频 → 4,-,3,-,5,+ 行为:生病依旧坚持学习整理计划 → 2,+,3,+,1,- 用户行为:{user_input} """③ run_test.py 自动化测评主脚本
- 循环遍历所有用例调用本地 Ollama 大模型推理
- 校验输出格式合法性
- 比对模型输出与预期标准答案
- 自动统计总条数、正确条数、准确率、格式错误数
- 打印完整测试日志与测评汇总报表
importollamafromtest_casesimportall_test_casesfromprompt_templateimportPROMPTdefllm_infer(user_content:str)->str:"""调用本地大模型推理,temperature置0保证输出稳定可复现"""content=PROMPT.format(user_input=user_content)res=ollama.chat(model="qwen2:7b",messages=[{"role":"user","content":content}],options={"temperature":0})returnres["message"]["content"].strip()defbatch_evaluation():total_count=len(all_test_cases)correct_count=0format_err_count=0log_list=[]# 允许出现的字符:数字、英文逗号、加减号allow_chars=set("12345,+-")forcaseinall_test_cases:act=case["action"]expect_res=case["expect"]pred_res=llm_infer(act)# 1.格式校验format_ok=all(chinallow_charsforchinpred_res)ifnotformat_ok:format_err_count+=1# 2.结果正误比对is_correct=(pred_res==expect_res)ifis_correct:correct_count+=1log_list.append({"行为文本":act,"模型输出":pred_res,"预期结果":expect_res,"判定是否正确":is_correct,"格式合规":format_ok})# 测评指标计算accuracy=(correct_count/total_count)*100# 打印汇总测评报表print("="*75)print(f"✅ LLM属性判定模块自动化测评汇总报表")print(f"测试总用例数量:{total_count}条")print(f"判定正确条数:{correct_count}条 | 整体准确率:{accuracy:.2f}%")print(f"输出格式错误条数:{format_err_count}条")print("="*75)print("📋 详细逐条测试日志:\n")foriteminlog_list:print(item)if__name__=="__main__":batch_evaluation()4.2 核心能力
新增场景只需修改用例文件
修改 Prompt 无需改代码
一键批量回归测试
自动输出准确率、格式错误统计
五、核心总结:什么是真正的 LLM 迭代测评
很多初学者误以为“改改提示词、效果变好”就是优化。
工程化的迭代测评完整定义:
通过测试挖掘边界漏洞,针对性升级 Prompt 规则、格式与示例,通过全量回归测试保证兼容性,最终通过量化数据证明模型效果提升,形成可沉淀、可复盘、可升级的提示词版本体系。
六、迭代测评在 Agent 开发中的意义
当前的属性判定模块是未来 LifeCraft AI Agent 的底层数据底座。
如果底层打分逻辑不严谨、无法处理多属性场景、准确率不稳定,上层的行为复盘、状态分析、智能规划、生活建议生成全部都会失效。
稳定的迭代测评体系,是开发 AI Agent 的前置核心能力。
七、学习收获
掌握 LLM 项目区别于传统代码的迭代思维;
理解边界测试、回归测试、量化测评的完整工程定义;
学会从业务漏洞反向驱动 Prompt 优化;
建立可复用、可迭代、可量化的 Prompt 工程开发范式。
