用AI让AI变聪明:数据合成、LLM评估与Agent反思闭环实战 📅 发布时间:2026/8/30 3:54:00 👁 浏览次数: 你有没有过这种体验给大模型写了一个非常详细的提示词生成的测试用例一开始质量很高但稍微换个业务场景输出就开始胡说八道。你以为是模型不够强于是换更大的模型结果只是把“明显错误”变成了“一本正经的错误”。问题出在哪里问题出在你只让 AI 做了一次生成却没有让 AI 参与反馈、验证和修正。真正让 AI 变聪明的核心不是底座模型版本号而是你有没有构建出“用 AI 训练 AI、用 AI 评估 AI、用 AI 改进 AI”的闭环。这篇文章不聊“AI 统治世界”这类宏大叙事而是把它拆成一个可以落地的工程问题在数据、评估、代码、运行四个环节如何用一套 AI 系统去增强另一套 AI 系统让模型的实际表现持续变好。全文会给出可运行的代码示例和排错思路适合正在做大模型应用开发、Agent 开发或者想把 AI 融入日常研发流程的工程师阅读。读完你会得到一个关键认知AI 变聪明不靠“换大模型”而是靠“建立反馈闭环”。1. 用 AI 让 AI 变聪明到底聪明在哪里先澄清一个容易误会的点。“Making AI Smarter with AI”不是指让模型自己改自己的权重也不是说 AI 会产生自我意识。当前工程界真正在做的事情是用大模型去优化大模型系统。这听起来像个循环论证但落到实际开发里它拆开是四个非常具体的方向。第一层数据层面的增强。用强模型生成高质量数据去训练或微调一个更聚焦的模型。这既包括合成数据也包括数据清洗、去重、改写。很多团队没有预算微调大模型但他们可以用大模型来生成小模型需要的语料这条路成本低、见效快。第二层评估层面的增强。用大模型来评测大模型的输出也就是常说的 LLM-as-a-Judge。以前人工评估一个对话系统要拉上产品、运营、算法一起看几十条样本费时费力。现在可以设计一套评测 prompt让大模型按维度打分快速反馈到开发流程里。第三层工程层面的增强。用 AI 编程助手来写模型调用代码、调试 API、生成测试用例。这一层是 AI 工程实践里最容易被忽视的。很多团队在做 Agent 开发时 代码、写 function call、调 prompt其实都可以先用 AI 快速生成一版再人工 review。第四层运行层面的增强。让 Agent 具备自我反思和纠错的能力。大模型在运行时经常“一条路走到黑”但如果我们在它的工作流里加入“先生成、再自检、再修正”的循环输出的质量会明显提升。这篇文章的核心判断是AI 系统的智能程度取决于它周围有多少智能反馈机制而不是单次生成有多惊艳。四层之间是递进关系没有高质量数据评估再准也没用没有评估闭环运行层面的反思就失去了标尺没有 AI 辅助工程化前三个环节都难以规模化。2. 四个核心环节数据、评估、编码、运行下面用一个表格把四个环节说清楚。这四个环节不是并列关系而是“数据 → 评估 → 编码 → 运行”的链路数据是源头评估是标尺编码是加速器运行是最终价值出口。环节解决什么问题传统做法用 AI 增强后的做法数据训练样本不足、质量参差人工标注、规则清洗大模型生成合成数据、辅助清洗和改写评估输出质量不可控人工抽检、BLEU 等指标大模型按维度打分输出结构化反馈编码功能开发慢、联调成本高手写代码、文档驱动AI 编程助手生成基础代码人工 review运行Agent 容易跑偏、无法纠错硬编码分支判断增加反思循环让模型自检并修正这个表格可以帮助你定位自己目前在哪个环节。如果你的项目还在人工标注数据的阶段去看第三节就行如果你已经能跑通一个简单的 Agent但效果不稳定重点看第五节。3. 用 AI 生成和清洗训练数据构建数据飞轮3.1 为什么需要合成数据很多团队做垂直领域应用时遇到的第一个瓶颈不是模型不够强而是没有合适的业务数据。举个例子你想做一个客服工单分类模型业务方只有几百条真实工单而且涉及用户隐私不能直接用。这种情况下合成数据是一条务实路径。让大模型扮演“资深客服主管”模仿真实用户语气生成投诉内容再配套生成处理建议几分钟就能得到几千条带标注的样本。这套思路在业界已经有成熟应用。不少大模型厂商在训练阶段就使用合成数据增强模型的推理能力因为真实数据里“高质量思考过程”太稀缺了。对小团队来说合成数据的意义不只是补数量更在于你可以按需控制数据分布想要理性用户就调整 prompt想要极端场景就调高 temperature。3.2 数据清洗用大模型过滤低质量内容合成数据生成之后还需要清洗。直接拿原始输出做微调模型会把噪声也学进去。清洗的核心是让大模型做二分类或打分。你可以把生成的数据逐条喂给模型问三个问题内容是否完整、语气是否自然、是否存在自相矛盾。凡是某一项不达标就丢弃或重新生成。下面是一个最小实现示例。代码使用 OpenAI 兼容 API你只需要把YOUR_API_KEY和YOUR_API_BASE_URL换成自己的配置即可。不同的模型服务商虽然接口细节略有不同但消息结构基本一致。# 文件路径data_pipeline/generate_synthetic_data.py from openai import OpenAI import json client OpenAI( api_keyYOUR_API_KEY, base_urlYOUR_API_BASE_URL ) SYSTEM_PROMPT 你是一名资深的产品运营专家擅长把用户退款场景写成结构化的客服工单。 def generate_one_sample(index: int) - dict: user_prompt f 请生成一条客服工单数据要求 1. 场景是用户对自动续费规则不理解而产生的退款投诉。 2. 包含用户原话、用户诉求、处理建议三段。 3. 第 {index} 条数据请把情绪调整为理性用户不要使用夸张语气。 resp client.chat.completions.create( modelyour-model-name, messages[ {role: system, content: SYSTEM_PROMPT}, {role: user, content: user_prompt}, ], temperature0.8, ) text resp.choices[0].message.content.strip() return {index: index, raw: text} def main(): samples [generate_one_sample(i) for i in range(1, 4)] with open(synthetic_samples.json, w, encodingutf-8) as f: json.dump(samples, f, ensure_asciiFalse, indent2) print(已生成, len(samples), 条数据) if __name__ __main__: main()这段代码的核心逻辑只有三步构造SYSTEM_PROMPT设定大模型扮演的角色。在user_prompt中描述数据要求并传入一个变量index避免每次生成完全相同的文本。把结果保存成 JSON 文件方便后续清洗和微调使用。3.3 清洗环节示例生成后不是直接进训练集而是先用大模型检查一遍# 文件路径data_pipeline/clean_with_llm.py from openai import OpenAI client OpenAI( api_keyYOUR_API_KEY, base_urlYOUR_API_BASE_URL ) def clean_with_llm(raw_text: str) - tuple: check_prompt f 请检查下面这条客服工单是否符合要求 - 用户原话是否口语化 - 用户诉求是否明确 - 处理建议是否可执行 如果全部符合回答“PASS”否则回答“FAIL”并说明原因。 工单内容 {raw_text} resp client.chat.completions.create( modelyour-model-name, messages[{role: user, content: check_prompt}], temperature0, ) text resp.choices[0].message.content.strip() is_pass text.startswith(PASS) return is_pass, text if __name__ __main__: # 假设这是上一步生成的原始数据 sample_text 用户说为什么自动扣我钱我要退钱。处理建议核实续费协议并引导开通免密支付管理。 ok, detail clean_with_llm(sample_text) print(是否通过:, ok) print(提示:, detail)这里的关键是把temperature设置为 0保证清洗判断尽量稳定。如果你在真实项目中用这个方法建议对所有生成数据做一次批量清洗把FAIL的数据丢弃或重新生成。4. 用 AI 评估 AI搭建 LLM-as-a-Judge 评测通道4.1 为什么需要大模型来评测模型输出的质量很难用传统指标衡量。BLEU 只看字面重合ROUGE 对语义改写不敏感真正有用的“质量”是忠实度、完整性、可读性这些语义层面的东西。过去做评测最靠谱的是人工打分。但人工评测有三个致命问题第一是慢一个版本改动要等好几天第二是贵需要专家投入大量时间第三是不稳定不同标注员之间的标准很难统一。LLM-as-a-Judge 的思路就是让一个更强的模型扮演评审员。你给它一套评分标准它按标准给候选回答打分并写评语。与大语言模型结合后评测速度可以从“天级”变成“分钟级”。4.2 一个可用的评测实现这里给出一个简化版的评测函数。核心是构造一个严格的JUDGE_PROMPT要求模型先给分数再给理由并且把温度调成 0。# 文件路径eval/llm_judge.py from openai import OpenAI client OpenAI( api_keyYOUR_API_KEY, base_urlYOUR_API_BASE_URL ) JUDGE_PROMPT 你是一个严格的算法评测员。请基于以下标准打分1-5分 1. 忠实度回答是否基于给定上下文没有编造事实。 2. 完整性是否覆盖了用户问题的所有关键点。 3. 清晰度表达是否结构化、无歧义。 请先给分数再给出不超过50字的理由。 【问题】 {question} 【回答】 {answer} 【参考上下文】 {context} def judge(question: str, answer: str, context: str) - dict: prompt JUDGE_PROMPT.format(questionquestion, answeranswer, contextcontext) resp client.chat.completions.create( modelyour-judge-model, messages[{role: user, content: prompt}], temperature0, ) text resp.choices[0].message.content.strip() lines text.split(\n) score lines[0] if lines else N/A return {score: score, detail: text}4.3 使用时需要注意什么不要只用总评分要把“忠实度、完整性、清晰度”分开记录。否则你只会知道效果变差了却不知道差在哪个维度。评委模型不能太弱评测模型最好比生成模型强一个档次否则它可能发现自己能力不足给出虚高分数。定期用人工抽检校准LLM-as-a-Judge 适合做回归测试和批量对比但最终上线前还是要有人工抽检。建议每周抽 20 到 30 条对比大模型评分和人工评分如果偏差大于某个阈值就要调整评测 prompt。输出格式要稳定这里为了可读性用了最简单的方式生产环境中建议使用response_formatjson_object或结构化输出来约束格式否则解析容易出错。5. 用 AI 开发 AIAgent 与自我反思循环5.1 为什么 Agent 需要反思你在用 Cursor 或 Copilot 写代码时会发现AI 生成的代码第一版往往有 bug。它能写出来是因为它能预测“看起来合理”的代码但它并不知道这份代码在真实环境里跑不跑得通。Agent 也一样一次生成能解决 80% 的问题但剩下 20% 需要“知道自己错在哪”的能力。反思循环的架构其实很朴素先生成一个答案然后让模型自己检查这个答案再根据检查结果修正。这个循环可以跑两轮、三轮直到自检通过或达到最大轮数。这个方法在当前 AI 编程工具里已经被大量使用。Cursor 这类工具的本质就是把“生成代码”和“运行、报错、修复”组合成一个循环让模型在错误信息中不断调整。我们自己写 Agent 时也可以借鉴同样的思路。5.2 一个带反思循环的最小 Agent 示例下面的代码展示了一个通过“生成 → 自检 → 修正”循环工作的简单 Agent。这里不接外部工具只演示循环的核心逻辑。# 文件路径agent/reflective_agent.py from openai import OpenAI client OpenAI( api_keyYOUR_API_KEY, base_urlYOUR_API_BASE_URL ) def call_model(history): resp client.chat.completions.create( modelyour-agent-model, messageshistory, temperature0.5, ) return resp.choices[0].message.content or def run_with_reflection(task, max_rounds3): history [ {role: system, content: 你是一个严谨的智能体每完成一个任务都要先自检再决定是否继续。}, {role: user, content: task}, ] for round_idx in range(max_rounds): # 第一步生成回答 answer call_model(history) history.append({role: assistant, content: answer}) # 第二步自检 reflection call_model(history [ {role: user, content: 请检查你上一个回答是否有事实性错误或漏洞。如果有请指出如果没有请回答通过。} ]) if reflection.strip() 通过: print(f第{round_idx 1}轮自检通过。) return answer # 第三步根据自检结果修正 print(f第{round_idx 1}轮发现需要修正开始新一轮。) history.append({role: user, content: f根据自检结果修正上一个回答。自检结果{reflection}}) return 无法在限定轮数内完成自检返回最后一次结果。 if __name__ __main__: result run_with_reflection(写一段 Python 代码判断一个字符串是否是回文并给出调用示例。) print(最终结果) print(result)这段代码最值得关注的是循环里的第三步把“自检结果”作为新的用户输入重新交给模型。这一步就是“反思”的工程化表达。所谓反思本质上就是多一次上下文提示让模型在自己的输出之上再思考一次。5.3 反思循环的几个坑自检未必可靠如果生成模型和自检模型是同一个模型它可能“自己看不出自己的错”。所以反思循环更适合用不同模型或者至少把任务拆成“生成”和“评审”两个角色。循环会膨胀成本每多一轮就多两次模型调用。建议设置max_rounds一般是 2 到 3 轮超过就终止。不要循环修正到过拟合你让模型反复修正一个“本来可以接受”的回答它可能改出更复杂、更啰嗦的版本。建议在自检 prompt 里写清楚“只有存在明显错误时才需要修正”而不是“总是尝试改进”。6. 从开发走向部署AI 工程实践的关键链路前面几节讲的是用 AI 增强单点能力真正到生产环境里还需要把数据、评测、Agent 串成一个完整的工程链路。这里有几个经验值得分享。6.1 评测集是 AI 工程的地基在每次修改 prompt 或微调模型之后都应该跑一遍固定的评测集。评测集要覆盖三类样本典型场景、边界场景、失败过的案例。这个评测集会成为你的“AI 项目回归测试”没有它你无法判断改动是变好还是变坏。维护评测集时建议把每次线上看到的坏案例都沉淀进去形成“坏例库”。这是让 AI 变聪明最有效的低成本方法靠人工把过去犯过的错持续注入测试集模型就不会在同一个地方反复翻车。6.2 日志与观测AI 的“黑匣子”必须打开传统系统出 bug你可以看调用栈和日志。AI 应用出问题你看到的往往只有一个不合理的回答根本不知道是 prompt 问题、上下文检索问题还是模型采样随机。所以工程上一定要记录这些信息每次请求的输入输出使用的 system prompt 和 user prompt模型名称、temperature 等参数RAG 场景下检索到了哪些片段分数是多少Agent 场景下每一步调用了哪些工具、耗时多长有了这些数据你才能在问题排查时快速定位是哪一环出了偏差。模型输出质量差不是因为“它不够聪明”很可能是因为检索到的上下文不对或者 prompt 里没有限定输出格式。6.3 模型部署与版本管理关于模型部署最稳妥的原则是“先跑通兼容层再优化性能”。如果你是调用云端 API那就把模型名称和版本号抽象成配置项不要硬编码在代码里如果你要私有化部署开源模型建议先用量化方案跑通功能再根据延迟和显存选择合适的并发方案。无论哪种方式都要给模型加版本号。你无法保证新模型在所有场景下都比旧模型好所以线上要保留一个可快速回滚的旧版本。灰度时先切 10% 流量观察人工反馈和自动评测指标再逐步增大比例。7. 常见问题与排查思路问题现象可能原因排查方式解决方案合成数据内容单一多样性不足temperature 设置过低prompt 约束过细检查 prompt 中是否给了负面样本打印几条输出观察分布调高 temperature 到 0.8 以上在 prompt 中要求“多样化表达”同一批次写入不同角色设定大模型评测分数虚高和人工评估差距大评委模型过弱评分标准不明确挑选 20 条样本做人工与模型打分对比换用更强的模型把评分标准细化为可观察的行为描述并加入反例Agent 自检循环不收敛反复输出不同答案生成和自检用同一个模型无法发现自身错误打印每一轮的自检反馈看反馈是否合理换成不同模型做“评审”限定最大轮数在自检 prompt 里强调“没有明显错误就通过”用户输入一改输出就崩评测集不够完整边界场景缺失检查评测集是否覆盖边界样本和坏例增加典型场景、边界场景和历史上失败案例的样本量形成坏例库上下文过长调用成本飙升RAG 检索片段过多prompt 冗长查看 token 消耗日志定位长上下文来源限制检索片段数量做摘要压缩合理设置对话历史窗口大小生产环境模型突然变差了云端模型升级或版本变更对比当前版本和上一个版本的输出在配置中锁定模型版本环境迁移时先跑完整评测集再切换排查时记住一个原则先分环节再调参数。AI 应用的问题链通常是“数据 → 评测 → 生成 → 后处理”从输入源头往后查远比盲目调整 prompt 更高效。8. 最佳实践与工程建议8.1 成本控制把模型调用当成资源来管理用 AI 让 AI 变聪明听起来很美好但每一轮反思、每一条合成数据、每一次自动评测都是真金白银的 token 消耗。实际项目里建议做到三点评测集优先用轻量模型跑只有最终版本才用强模型完整评测。合成数据生成时把相似的历史结果做缓存不要反复生成同样的问题。对 Agent 的反思轮数设上限避免极端情况下无限制调用。8.2 数据安全隐私红线不能触碰用外部大模型 API 处理数据时严禁把真实用户隐私、密钥、内部文档直接塞进 prompt。更好的方式是先做脱敏再用数据占位符替换敏感信息。私有化部署可以解决一部分数据安全问题但也要在服务的访问控制、审计日志方面做好规范。8.3 最小权限与灰度发布调用模型服务使用的密钥权限应该只开放给需要的服务和环境生产环境密钥不能暴露在代码仓库里要放到密钥管理系统中。模型切换或 prompt 修改都要遵循灰度原则先用小流量验证再全量发布。8.4 让“反思”成为一种工程习惯很多团队把所有精力都花在“让模型第一次就生成对”上。但就像人写代码也会出 bug 一样AI 生成一次就完美是偶然能发现错误并修正才是可持续的能力。在工程上你应该把“自检”“回归测试”“坏例沉淀”变成研发流程的一部分而不是希望靠一个万能 prompt 解决所有问题。9. 总结与后续学习方向这篇文章想把这个概念讲清楚让 AI 变聪明的关键不在于换多强的底座模型而在于建立起一套反馈闭环。用大模型生成合成数据来提升数据质量用大模型评测输出来替代低效的人工打分用 AI 编程工具加速开发过程用反思循环让 Agent 在运行时自我纠错。这四个环节单独拿出来都值得实践组合起来就是一套完整的 AI 工程方法。如果你的项目还停留在“写 prompt → 扔给模型 → 看结果”的阶段我建议从两个小动作开始转变。第一建一个 30 条样本的评测集每次改 prompt 都跑一遍。第二给最常用的 Agent 流程加一层自检输出哪怕只是打印一句话“模型认为自己的回答是否准确”。这两个动作的成本很低但会让你的 AI 系统从“靠运气”变成“有反馈”。下一步可以继续深入的方向包括RAG 管道的上下文检索优化Agent 工具调用的自主决策以及基于人工反馈的强化学习。这些话题都有一个共同的底层逻辑AI 的能力上限由它接收到的反馈质量决定。希望你把今天学到的思路用在真实项目里让 AI 不只是生成内容更能验证内容、修正内容、持续变聪明。