<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>AI工程化 on 文艺技术笔记</title>
        <link>https://wenyiblog.top/tags/ai%E5%B7%A5%E7%A8%8B%E5%8C%96/</link>
        <description>Recent content in AI工程化 on 文艺技术笔记</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-cn</language>
        <copyright>文艺技术笔记 | 软件工程师文艺</copyright>
        <lastBuildDate>Tue, 14 Jul 2026 20:50:00 +0800</lastBuildDate><atom:link href="https://wenyiblog.top/tags/ai%E5%B7%A5%E7%A8%8B%E5%8C%96/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>大模型应用的&#34;最后一公里&#34;：Evaluation-Driven Development 实践方法论</title>
        <link>https://wenyiblog.top/2026/07/evaluation-driven-development/</link>
        <pubDate>Tue, 14 Jul 2026 20:50:00 +0800</pubDate>
        
        <guid>https://wenyiblog.top/2026/07/evaluation-driven-development/</guid>
        <description>&lt;h2 id=&#34;demo-很酷上线就崩&#34;&gt;&lt;a href=&#34;#demo-%e5%be%88%e9%85%b7%e4%b8%8a%e7%ba%bf%e5%b0%b1%e5%b4%a9&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;Demo 很酷，上线就崩
&lt;/h2&gt;&lt;p&gt;每个做大模型应用的团队都经历过这个场景。&lt;/p&gt;
&lt;p&gt;产品经理兴冲冲地跑来看 Demo，连说&amp;quot;太牛了&amp;quot;。老板拍板说下周上线。开发团队信心满满，觉得最难的部分已经搞定了。&lt;/p&gt;
&lt;p&gt;然后真上了线，用户骂声一片。&lt;/p&gt;
&lt;p&gt;回答不准确、幻觉严重、答非所问、关键信息遗漏——Demo 里没踩到的坑，生产环境里一个没落。&lt;/p&gt;
&lt;p&gt;这不是个别现象。根据行业内的交流反馈，超过 70% 的大模型应用在首次上线后都经历了严重的效果退化。Demo 阶段的&amp;quot;惊艳表现&amp;quot;和实际上线后的&amp;quot;灾难现场&amp;quot;之间的落差，是大模型工程化领域最普遍的痛点。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;问题的根源不是模型不行，而是没人认真做过评估。&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;传统质量保障为什么失灵&#34;&gt;&lt;a href=&#34;#%e4%bc%a0%e7%bb%9f%e8%b4%a8%e9%87%8f%e4%bf%9d%e9%9a%9c%e4%b8%ba%e4%bb%80%e4%b9%88%e5%a4%b1%e7%81%b5&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;传统质量保障为什么失灵
&lt;/h2&gt;&lt;p&gt;传统软件开发有成熟的质量体系——单元测试、集成测试、端到端测试。测试覆盖率达标，CI 绿灯亮了，代码就可以放心发布。&lt;/p&gt;
&lt;p&gt;但大模型应用打破了这套体系的基本假设。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;相同的输入不再产生相同的输出。&lt;/strong&gt; 大模型是概率性的，同一个 Prompt 跑十次，可能得到七八种不同的回答。传统的 assert 断言根本写不出来。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;正确性没有明确标准。&lt;/strong&gt; 一段回答可以有多种合理表述，很难用 if-else 来判定&amp;quot;对&amp;quot;还是&amp;quot;错&amp;quot;。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;行为空间无法穷举。&lt;/strong&gt; 传统软件可以通过边界值分析来覆盖测试场景。大模型的输入空间几乎是无限的。&lt;/p&gt;
&lt;p&gt;三个假设同时崩塌，意味着我们不能简单地把传统测试方法搬过来用。需要一套新的方法论。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;evaluation-driven-development让评估驱动开发&#34;&gt;&lt;a href=&#34;#evaluation-driven-development%e8%ae%a9%e8%af%84%e4%bc%b0%e9%a9%b1%e5%8a%a8%e5%bc%80%e5%8f%91&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;Evaluation-Driven Development：让评估驱动开发
&lt;/h2&gt;&lt;p&gt;EDD（Evaluation-Driven Development，评估驱动开发）的核心思想只有一句话：&lt;strong&gt;先定义什么叫&amp;quot;好&amp;quot;，再动手写代码。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这听起来理所当然，但绝大多数团队的做法恰恰相反。他们先写 Prompt、调参数、看效果，等到要上线了才想起来&amp;quot;好像应该测一下&amp;quot;。这时候才发现，什么指标都没有定义，什么数据都没有积累，评估根本无从下手。&lt;/p&gt;
&lt;p&gt;EDD 把评估前置到开发流程的最前面，贯穿整个生命周期。它包含四个核心环节：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;定义指标 → 构建数据集 → CI/CD 集成 → 持续监控
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;这四个环节形成一个闭环。每一轮迭代都从指标出发，用数据验证，通过自动化流水线卡住质量关口，上线后持续监控是否退化。&lt;/p&gt;
&lt;p&gt;下面逐一展开。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;第一步定义指标搞清楚你要优化什么&#34;&gt;&lt;a href=&#34;#%e7%ac%ac%e4%b8%80%e6%ad%a5%e5%ae%9a%e4%b9%89%e6%8c%87%e6%a0%87%e6%90%9e%e6%b8%85%e6%a5%9a%e4%bd%a0%e8%a6%81%e4%bc%98%e5%8c%96%e4%bb%80%e4%b9%88&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;第一步：定义指标——搞清楚你要优化什么
&lt;/h2&gt;&lt;h3 id=&#34;别急着写代码先把好量化出来&#34;&gt;&lt;a href=&#34;#%e5%88%ab%e6%80%a5%e7%9d%80%e5%86%99%e4%bb%a3%e7%a0%81%e5%85%88%e6%8a%8a%e5%a5%bd%e9%87%8f%e5%8c%96%e5%87%ba%e6%9d%a5&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;别急着写代码，先把&amp;quot;好&amp;quot;量化出来
&lt;/h3&gt;&lt;p&gt;很多团队在评估大模型应用时，用的指标只有一个：&amp;ldquo;感觉对不对&amp;rdquo;。这不是指标，这是玄学。&lt;/p&gt;
&lt;p&gt;定义指标需要回答三个问题：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;这个应用的核心任务是什么？&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;ldquo;做得好&amp;quot;在任务层面意味着什么？&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;怎么把&amp;quot;做得好&amp;quot;转化为可计算的数字？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;以一个企业知识问答系统为例。它的核心任务是&amp;quot;根据企业内部文档回答员工问题&amp;rdquo;。&amp;ldquo;做得好&amp;quot;意味着回答准确、信息完整、没有编造内容。把这些转化为指标：&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;指标名称&lt;/th&gt;
					&lt;th&gt;定义&lt;/th&gt;
					&lt;th&gt;计算方式&lt;/th&gt;
					&lt;th&gt;达标线&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;忠实度（Faithfulness）&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;回答中的每个事实都能在检索到的文档中找到依据&lt;/td&gt;
					&lt;td&gt;由 LLM 逐句判断是否有依据，计算有依据的句子占比&lt;/td&gt;
					&lt;td&gt;≥ 90%&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;答案相关性（Answer Relevancy）&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;回答与用户问题的语义匹配程度&lt;/td&gt;
					&lt;td&gt;由 LLM 对回答与问题的匹配度打分（1-5）&lt;/td&gt;
					&lt;td&gt;≥ 4.0&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;上下文精确度（Context Precision）&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;检索到的文档中，真正与问题相关的比例&lt;/td&gt;
					&lt;td&gt;相关文档数 / 检索到的文档总数&lt;/td&gt;
					&lt;td&gt;≥ 70%&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;上下文召回率（Context Recall）&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;所有相关文档中，被检索到的比例&lt;/td&gt;
					&lt;td&gt;被检索到的相关文档数 / 所有相关文档总数&lt;/td&gt;
					&lt;td&gt;≥ 80%&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;指标的层次化设计&#34;&gt;&lt;a href=&#34;#%e6%8c%87%e6%a0%87%e7%9a%84%e5%b1%82%e6%ac%a1%e5%8c%96%e8%ae%be%e8%ae%a1&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;指标的层次化设计
&lt;/h3&gt;&lt;p&gt;一个成熟的大模型应用不会只用一组指标。指标应该是分层次的：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;系统层指标&lt;/strong&gt;：延迟、吞吐量、Token 消耗、错误率。这些是基础设施层面的，保证系统跑得动。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;模型层指标&lt;/strong&gt;：忠实度、相关性、幻觉率、安全性。这些衡量模型输出的质量。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;业务层指标&lt;/strong&gt;：用户满意度、任务完成率、人工介入率、平均解决时长。这些衡量应用是否真正产生了价值。&lt;/p&gt;
&lt;p&gt;三个层次的指标缺一不可。系统跑得飞快但回答全是幻觉，没用。回答很准确但延迟 10 秒，用户也跑了。一切都好但用户就是不愿意用，那更没辙。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;一个常见的陷阱是：只优化你最容易测量的指标，忽略最难测量但最重要的指标。忠实度容易量化，用户满意度难量化。但后者才是决定产品生死的关键。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;选错指标比不选指标更危险。知识问答系统应该关注忠实度和召回率，内容生成系统应该关注风格一致性和创造性，代码生成系统应该关注功能正确性和安全性。用错指标，你会在错误的方向上越跑越远，还以为自己做得很好。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;第二步构建评估数据集评估的质量取决于数据的质量&#34;&gt;&lt;a href=&#34;#%e7%ac%ac%e4%ba%8c%e6%ad%a5%e6%9e%84%e5%bb%ba%e8%af%84%e4%bc%b0%e6%95%b0%e6%8d%ae%e9%9b%86%e8%af%84%e4%bc%b0%e7%9a%84%e8%b4%a8%e9%87%8f%e5%8f%96%e5%86%b3%e4%ba%8e%e6%95%b0%e6%8d%ae%e7%9a%84%e8%b4%a8%e9%87%8f&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;第二步：构建评估数据集——评估的质量取决于数据的质量
&lt;/h2&gt;&lt;h3 id=&#34;数据集才是你的核心资产&#34;&gt;&lt;a href=&#34;#%e6%95%b0%e6%8d%ae%e9%9b%86%e6%89%8d%e6%98%af%e4%bd%a0%e7%9a%84%e6%a0%b8%e5%bf%83%e8%b5%84%e4%ba%a7&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;数据集才是你的核心资产
&lt;/h3&gt;&lt;p&gt;很多团队把精力花在调 Prompt、选模型、优化检索策略上，对评估数据集的态度是&amp;quot;随便搞几百条就行&amp;rdquo;。这是一个严重的认知错误。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;评估数据集的质量，直接决定了你对系统质量的判断是否可信。&lt;/strong&gt; 数据集有偏差，你的评估结果就有偏差。数据集覆盖面不够，你以为系统很好，实际上只是没测到那些会出问题的场景。&lt;/p&gt;
&lt;h3 id=&#34;数据集的四种来源&#34;&gt;&lt;a href=&#34;#%e6%95%b0%e6%8d%ae%e9%9b%86%e7%9a%84%e5%9b%9b%e7%a7%8d%e6%9d%a5%e6%ba%90&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;数据集的四种来源
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;来源一：人工构造。&lt;/strong&gt; 这是质量最高的数据来源。让领域专家针对业务场景设计问题和标准答案。成本高，但数据质量最有保障。建议每个核心场景至少构造 20-30 条高质量样本。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;来源二：生产日志挖掘。&lt;/strong&gt; 系统上线后，用户的真实提问是最宝贵的评估数据。从日志中筛选出有代表性的问题，人工标注答案质量。这些数据最贴近真实分布。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;来源三：对抗性生成。&lt;/strong&gt; 故意设计一些&amp;quot;刁钻&amp;quot;的测试用例。比如多跳推理问题、需要否定推理的问题、包含干扰信息的问题。这些用例专门用来探测系统的边界和弱点。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;来源四：LLM 辅助生成。&lt;/strong&gt; 用大模型来批量生成测试问题和参考答案。成本最低，但需要人工审核。适合快速扩大数据集规模。&lt;/p&gt;
&lt;h3 id=&#34;数据集的结构设计&#34;&gt;&lt;a href=&#34;#%e6%95%b0%e6%8d%ae%e9%9b%86%e7%9a%84%e7%bb%93%e6%9e%84%e8%ae%be%e8%ae%a1&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;数据集的结构设计
&lt;/h3&gt;&lt;p&gt;一个好的评估数据集不是简单的&amp;quot;问题-答案&amp;quot;对。它应该包含足够的元信息来支持多维度分析：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;- &lt;span class=&#34;nt&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;eval_001&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;question&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;公司的年假政策是什么？入职不满一年怎么算？&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;reference_answer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;根据公司HR制度2024版，正式员工年假为...&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;reference_docs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;doc_id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;hr_policy_2024_03&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;doc_id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;hr_faq_leave&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;category&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;HR政策&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;difficulty&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;medium&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;reasoning_type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;single_hop&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;expected_behavior&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;准确引用制度条款，说明入职不满一年的折算规则&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;edge_case&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;expert_crafted&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;每条数据都带有分类、难度、推理类型等标签。这样在评估结果出来后，你可以按维度切分，知道系统在哪些场景下表现好，哪些场景下还有差距。&lt;/p&gt;
&lt;h3 id=&#34;数据集的规模经验&#34;&gt;&lt;a href=&#34;#%e6%95%b0%e6%8d%ae%e9%9b%86%e7%9a%84%e8%a7%84%e6%a8%a1%e7%bb%8f%e9%aa%8c&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;数据集的规模经验
&lt;/h3&gt;&lt;p&gt;到底需要多少条评估数据？没有一个放之四海皆准的数字。但有一些经验法则：&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;数据集用途&lt;/th&gt;
					&lt;th&gt;建议规模&lt;/th&gt;
					&lt;th&gt;说明&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;开发阶段快速验证&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;50-100 条&lt;/td&gt;
					&lt;td&gt;快速迭代，看大方向对不对&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;发布前回归测试&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;200-500 条&lt;/td&gt;
					&lt;td&gt;覆盖所有核心场景和边界情况&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;线上持续评估&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;每日抽样 50-100 条&lt;/td&gt;
					&lt;td&gt;监控线上效果是否退化&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;模型选型基准测试&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;500-1000 条&lt;/td&gt;
					&lt;td&gt;在多个模型之间做横向对比&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;数据集不是一次性的工作。它需要随着业务发展持续扩充。每一个线上发现的 bad case，都应该被回填到评估数据集中。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;第三步cicd-集成让评估像单元测试一样自动化&#34;&gt;&lt;a href=&#34;#%e7%ac%ac%e4%b8%89%e6%ad%a5cicd-%e9%9b%86%e6%88%90%e8%ae%a9%e8%af%84%e4%bc%b0%e5%83%8f%e5%8d%95%e5%85%83%e6%b5%8b%e8%af%95%e4%b8%80%e6%a0%b7%e8%87%aa%e5%8a%a8%e5%8c%96&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;第三步：CI/CD 集成——让评估像单元测试一样自动化
&lt;/h2&gt;&lt;h3 id=&#34;手工评估是最大的浪费&#34;&gt;&lt;a href=&#34;#%e6%89%8b%e5%b7%a5%e8%af%84%e4%bc%b0%e6%98%af%e6%9c%80%e5%a4%a7%e7%9a%84%e6%b5%aa%e8%b4%b9&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;手工评估是最大的浪费
&lt;/h3&gt;&lt;p&gt;如果每次改了一行 Prompt，都需要人肉跑一遍评估数据集，那这个评估流程注定无法持续。人是最贵的资源，评估必须自动化。&lt;/p&gt;
&lt;p&gt;目标是：&lt;strong&gt;每一次代码变更（包括 Prompt 变更、模型切换、检索策略调整），都自动触发一轮评估，结果以报告形式呈现，达标才能合并。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这和传统软件的单元测试是一模一样的逻辑。改了一行代码，CI 跑一遍测试，全绿了才能合并。EDD 只是把&amp;quot;测试&amp;quot;换成了&amp;quot;评估&amp;quot;。&lt;/p&gt;
&lt;h3 id=&#34;评估流水线的架构设计&#34;&gt;&lt;a href=&#34;#%e8%af%84%e4%bc%b0%e6%b5%81%e6%b0%b4%e7%ba%bf%e7%9a%84%e6%9e%b6%e6%9e%84%e8%ae%be%e8%ae%a1&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;评估流水线的架构设计
&lt;/h3&gt;&lt;p&gt;一个典型的 EDD 评估流水线包含以下环节：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;代码变更触发
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    ↓
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;构建评估环境（加载模型、检索索引、配置参数）
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    ↓
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;运行评估数据集（批量调用，记录输入输出）
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    ↓
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;计算各项指标（忠实度、相关性、召回率等）
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    ↓
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;与基线对比（本次结果 vs 上一次发布的版本）
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    ↓
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;生成评估报告（指标卡片、对比图表、bad case 列表）
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    ↓
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;门禁判断（核心指标是否达标 / 是否出现退化）
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    ↓
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  ├─ 达标 → 允许合并/发布
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  └─ 不达标 → 阻断，通知相关人员
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;评估工具链选型&#34;&gt;&lt;a href=&#34;#%e8%af%84%e4%bc%b0%e5%b7%a5%e5%85%b7%e9%93%be%e9%80%89%e5%9e%8b&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;评估工具链选型
&lt;/h3&gt;&lt;p&gt;目前市面上有不少开源的评估框架可以用：&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;工具&lt;/th&gt;
					&lt;th&gt;特点&lt;/th&gt;
					&lt;th&gt;适用场景&lt;/th&gt;
					&lt;th&gt;上手难度&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Ragas&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;专注 RAG 评估，指标体系完善&lt;/td&gt;
					&lt;td&gt;RAG 系统评估&lt;/td&gt;
					&lt;td&gt;低&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;DeepEval&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;类 pytest 接口，CI 友好&lt;/td&gt;
					&lt;td&gt;通用 LLM 评估&lt;/td&gt;
					&lt;td&gt;低&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;LangSmith&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;全链路可观测，可视化强&lt;/td&gt;
					&lt;td&gt;LangChain 生态&lt;/td&gt;
					&lt;td&gt;中&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Promptfoo&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;红队测试能力强，支持多模型对比&lt;/td&gt;
					&lt;td&gt;模型选型与安全测试&lt;/td&gt;
					&lt;td&gt;中&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;自研框架&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;完全定制，贴合业务&lt;/td&gt;
					&lt;td&gt;特殊场景&lt;/td&gt;
					&lt;td&gt;高&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;选择工具的核心标准不是功能多不多，而是&lt;strong&gt;能不能顺畅地嵌入你的 CI/CD 流程&lt;/strong&gt;。一个功能强大但跑一次要两小时的工具，不如一个轻量但 5 分钟出结果的工具实用。&lt;/p&gt;
&lt;h3 id=&#34;评估的执行策略&#34;&gt;&lt;a href=&#34;#%e8%af%84%e4%bc%b0%e7%9a%84%e6%89%a7%e8%a1%8c%e7%ad%96%e7%95%a5&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;评估的执行策略
&lt;/h3&gt;&lt;p&gt;不是每次变更都需要跑全量评估。可以根据变更的影响范围，设计分级策略：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;轻量评估（每次提交触发）&lt;/strong&gt;：跑 50 条核心 case，只检查最关键的 2-3 个指标。耗时 5 分钟以内。目的是快速反馈，不让明显的问题溜进去。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;标准评估（PR 合并前触发）&lt;/strong&gt;：跑 200-500 条数据，检查所有指标，与基线版本做对比。耗时 15-30 分钟。目的是确保这次变更不会导致效果退化。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;全量评估（发布前触发）&lt;/strong&gt;：跑全部评估数据集，包括对抗性测试和边界用例。耗时可能 1-2 小时。目的是对即将发布的版本做一次全面的体检。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;分级执行的关键在于平衡。评估太重，开发效率被拖累，大家会想方设法规避评估。评估太轻，问题漏过去了，等于白评。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;处理评估中的不确定性&#34;&gt;&lt;a href=&#34;#%e5%a4%84%e7%90%86%e8%af%84%e4%bc%b0%e4%b8%ad%e7%9a%84%e4%b8%8d%e7%a1%ae%e5%ae%9a%e6%80%a7&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;处理评估中的不确定性
&lt;/h3&gt;&lt;p&gt;大模型评估有一个传统测试没有的难题：&lt;strong&gt;同一个评估用例，跑两遍可能得到不同的结果，评估分数会有波动。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;处理这个问题有几个实践策略：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;多次采样取均值。&lt;/strong&gt; 每条用例跑 3 次，取指标均值作为最终分数。这能有效降低随机性带来的噪声，但成本也翻了三倍。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;设置容忍区间。&lt;/strong&gt; 不要求指标精确达标，而是设置一个容忍范围。比如忠实度的达标线是 90%，容忍区间是 ±2%。那么 88% 以上都算通过。这避免了因为随机波动导致的误拦截。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;关注趋势而非单点。&lt;/strong&gt; 单次评估的结果可能有偏差，但连续多次评估的趋势是可靠的。如果忠实度在过去 10 次评估中持续下降，即使当前还在达标线以上，也应该引起警觉。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;第四步持续监控上线不是终点是另一个起点&#34;&gt;&lt;a href=&#34;#%e7%ac%ac%e5%9b%9b%e6%ad%a5%e6%8c%81%e7%bb%ad%e7%9b%91%e6%8e%a7%e4%b8%8a%e7%ba%bf%e4%b8%8d%e6%98%af%e7%bb%88%e7%82%b9%e6%98%af%e5%8f%a6%e4%b8%80%e4%b8%aa%e8%b5%b7%e7%82%b9&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;第四步：持续监控——上线不是终点，是另一个起点
&lt;/h2&gt;&lt;h3 id=&#34;线上效果和线下评估的差异&#34;&gt;&lt;a href=&#34;#%e7%ba%bf%e4%b8%8a%e6%95%88%e6%9e%9c%e5%92%8c%e7%ba%bf%e4%b8%8b%e8%af%84%e4%bc%b0%e7%9a%84%e5%b7%ae%e5%bc%82&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;线上效果和线下评估的差异
&lt;/h3&gt;&lt;p&gt;即使 CI/CD 中的评估全部通过，线上效果仍然可能出问题。原因有很多：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;用户的提问方式和评估数据集中的不一样&lt;/li&gt;
&lt;li&gt;知识库更新了，但评估数据没有同步更新&lt;/li&gt;
&lt;li&gt;底层模型 API 做了静默升级，输出分布发生了变化&lt;/li&gt;
&lt;li&gt;并发量增大后，部分请求走了降级策略，效果变差&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这些情况在线下评估中很难完全覆盖。所以线上监控是 EDD 闭环中不可或缺的一环。&lt;/p&gt;
&lt;h3 id=&#34;监控什么&#34;&gt;&lt;a href=&#34;#%e7%9b%91%e6%8e%a7%e4%bb%80%e4%b9%88&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;监控什么
&lt;/h3&gt;&lt;p&gt;线上监控的核心指标和线下评估基本一致，但需要增加几个运维维度：&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;监控维度&lt;/th&gt;
					&lt;th&gt;具体指标&lt;/th&gt;
					&lt;th&gt;告警阈值建议&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;输出质量&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;忠实度、相关性（抽样评估）&lt;/td&gt;
					&lt;td&gt;连续 3 天均值下降超 5%&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;用户反馈&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;点赞/点踩比例、投诉量&lt;/td&gt;
					&lt;td&gt;点踩比例超过 15%&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;行为信号&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;重复提问率、人工转接率&lt;/td&gt;
					&lt;td&gt;重复提问率超过 20%&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;系统性能&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;P99 延迟、错误率、Token 用量&lt;/td&gt;
					&lt;td&gt;P99 延迟超过 5 秒&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;数据漂移&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;用户问题分布变化&lt;/td&gt;
					&lt;td&gt;新类型问题占比超过 10%&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;抽样评估的实施方式&#34;&gt;&lt;a href=&#34;#%e6%8a%bd%e6%a0%b7%e8%af%84%e4%bc%b0%e7%9a%84%e5%ae%9e%e6%96%bd%e6%96%b9%e5%bc%8f&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;抽样评估的实施方式
&lt;/h3&gt;&lt;p&gt;线上全量评估不现实（成本太高），抽样评估是标准做法。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;随机抽样&lt;/strong&gt;：从每天的请求中随机抽取 1%-5%，进行自动评估。这是最基础的监控方式，可以发现整体质量的变化趋势。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;分层抽样&lt;/strong&gt;：按问题类型、用户等级、业务线等维度分层抽样。确保每个关键场景都有足够的监控覆盖。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;异常触发抽样&lt;/strong&gt;：对于用户点踩的、重复提问的、触发了降级策略的请求，优先纳入评估。这些是最可能出问题的请求。&lt;/p&gt;
&lt;p&gt;抽样评估的结果需要和线下评估结果做关联分析。如果线上忠实度持续低于线下评估结果，说明评估数据集的分布和真实用户的分布存在偏差，需要更新数据集。&lt;/p&gt;
&lt;h3 id=&#34;建立反馈闭环&#34;&gt;&lt;a href=&#34;#%e5%bb%ba%e7%ab%8b%e5%8f%8d%e9%a6%88%e9%97%ad%e7%8e%af&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;建立反馈闭环
&lt;/h3&gt;&lt;p&gt;监控的价值不在于发现问题，而在于推动问题的修复。一个有效的反馈闭环应该包含：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;自动告警&lt;/strong&gt;：指标异常时，自动通知到相关负责人&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bad case 归档&lt;/strong&gt;：将线上发现的问题自动归档到 bad case 库&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;根因分析&lt;/strong&gt;：对 bad case 进行分类分析，定位是检索问题、生成问题还是知识库问题&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;数据集更新&lt;/strong&gt;：将修复后的 bad case 回填到评估数据集，防止同类问题再次出现&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;回归验证&lt;/strong&gt;：修复后跑一轮评估，确认问题已解决且没有引入新问题&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;这个闭环跑通了，评估数据集会越来越完善，系统质量会越来越高。这才是 EDD 的真正威力所在。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;edd-的组织落地不只是技术问题&#34;&gt;&lt;a href=&#34;#edd-%e7%9a%84%e7%bb%84%e7%bb%87%e8%90%bd%e5%9c%b0%e4%b8%8d%e5%8f%aa%e6%98%af%e6%8a%80%e6%9c%af%e9%97%ae%e9%a2%98&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;EDD 的组织落地：不只是技术问题
&lt;/h2&gt;&lt;h3 id=&#34;评估应该谁来负责&#34;&gt;&lt;a href=&#34;#%e8%af%84%e4%bc%b0%e5%ba%94%e8%af%a5%e8%b0%81%e6%9d%a5%e8%b4%9f%e8%b4%a3&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;评估应该谁来负责
&lt;/h3&gt;&lt;p&gt;很多团队把评估工作扔给算法工程师。这是一个组织层面的错误。&lt;/p&gt;
&lt;p&gt;EDD 是一个跨职能的工作。算法工程师负责评估框架和指标计算。领域专家负责构造评估数据和定义达标标准。产品经理负责定义业务层指标和用户体验标准。QA 工程师负责评估流程的自动化和持续运行。&lt;/p&gt;
&lt;p&gt;每个角色都有自己的职责。缺少任何一个，评估体系都不完整。&lt;/p&gt;
&lt;h3 id=&#34;评估的投入产出&#34;&gt;&lt;a href=&#34;#%e8%af%84%e4%bc%b0%e7%9a%84%e6%8a%95%e5%85%a5%e4%ba%a7%e5%87%ba&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;评估的投入产出
&lt;/h3&gt;&lt;p&gt;&amp;ldquo;评估太花时间了&amp;quot;是最常见的反对理由。确实，构建和维护一套评估体系需要持续投入。但不评估的代价更大。&lt;/p&gt;
&lt;p&gt;算一笔账：一个没有评估的大模型应用上线后，客服团队每天花 2 小时处理用户投诉，产品经理每天花 1 小时分析 bad case，算法工程师每天花 3 小时在线上排查问题。一天就是 6 个小时的人力浪费。&lt;/p&gt;
&lt;p&gt;而建立一套基本的评估体系，初始投入大概 2-3 人周。之后每周的维护成本不超过半天。这笔账怎么算都划算。&lt;/p&gt;
&lt;h3 id=&#34;从小做起逐步完善&#34;&gt;&lt;a href=&#34;#%e4%bb%8e%e5%b0%8f%e5%81%9a%e8%b5%b7%e9%80%90%e6%ad%a5%e5%ae%8c%e5%96%84&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;从小做起，逐步完善
&lt;/h3&gt;&lt;p&gt;不要试图一步到位。EDD 的落地可以从最小可行评估开始：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第一阶段（1-2 周）&lt;/strong&gt;：人工构造 50 条核心评估数据，用现成工具跑一轮评估，了解系统当前的基线水平。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第二阶段（2-4 周）&lt;/strong&gt;：把评估脚本接入 CI，每次 Prompt 变更自动触发轻量评估。建立基本的门禁机制。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第三阶段（1-2 月）&lt;/strong&gt;：扩充数据集到 200+ 条，覆盖更多场景。接入线上日志，开始抽样监控。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第四阶段（持续）&lt;/strong&gt;：不断丰富数据集，优化指标体系，完善反馈闭环。让评估成为团队的日常习惯。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;edd-不是要替代-tdd&#34;&gt;&lt;a href=&#34;#edd-%e4%b8%8d%e6%98%af%e8%a6%81%e6%9b%bf%e4%bb%a3-tdd&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;EDD 不是要替代 TDD
&lt;/h2&gt;&lt;p&gt;一个成熟的大模型应用，应该是 TDD + EDD 的混合体。确定性部分用 TDD，概率性部分用 EDD。两套体系并行运作，共同保障整体质量。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;几个容易踩的坑&#34;&gt;&lt;a href=&#34;#%e5%87%a0%e4%b8%aa%e5%ae%b9%e6%98%93%e8%b8%a9%e7%9a%84%e5%9d%91&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;几个容易踩的坑
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;坑一：把评估指标当成优化目标。&lt;/strong&gt; 当忠实度成为 KPI，团队就会开始&amp;quot;刷分&amp;rdquo;——在 Prompt 里加一句&amp;quot;如果不确定就说不知道&amp;quot;，忠实度指标好看了，但系统的实用性大打折扣。指标是用来监控的，不是用来优化的。真正的优化目标应该是用户体验和业务价值。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;坑二：评估数据集长期不更新。&lt;/strong&gt; 业务在变，知识库在变，用户的问题也在变。半年前的评估数据集，今天可能已经严重过时。建议每季度至少做一次数据集审计，淘汰过时的用例，补充新的场景。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;坑三：只评估&amp;quot;正常&amp;quot;场景。&lt;/strong&gt; 大多数团队构造的评估数据集，覆盖的都是&amp;quot;正常提问-正常回答&amp;quot;的场景。但真正出问题的是边界情况：用户提了一个知识库里没有的问题、用户的提问有歧义、用户连续追问了十轮。这些边界场景才是评估的重点。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;坑四：评估结果不透明。&lt;/strong&gt; 评估报告只给算法工程师看，产品经理和业务方看不到。这导致评估变成了技术团队的自嗨，无法与业务目标对齐。评估结果应该对所有人可见，用所有人都能理解的方式呈现。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;坑五：追求完美评估而迟迟不行动。&lt;/strong&gt; &amp;ldquo;我们的评估体系还不够完善，等完善了再开始评估。&amp;ldquo;这是拖延症的另一种表现形式。一个粗糙的评估方案，也比没有评估方案强一百倍。先做起来，再做好。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;评估工具链实践示例&#34;&gt;&lt;a href=&#34;#%e8%af%84%e4%bc%b0%e5%b7%a5%e5%85%b7%e9%93%be%e5%ae%9e%e8%b7%b5%e7%a4%ba%e4%be%8b&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;评估工具链实践示例
&lt;/h2&gt;&lt;p&gt;为了让 EDD 更具体，下面给出一个简化的实践示例。假设我们用 Python + DeepEval 来为一个 RAG 系统搭建评估流水线。&lt;/p&gt;
&lt;p&gt;评估数据集的格式（YAML）：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;eval_cases&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;question&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;公司出差报销的上限是多少？&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;reference&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;根据公司财务制度，国内出差住宿上限为500元/晚...&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;contexts&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;s2&#34;&gt;&amp;#34;财务报销制度_v3.pdf#page=12&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;metadata&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;category&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;财务制度&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;difficulty&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;easy&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;question&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;如果项目延期超过两周，需要走什么审批流程？&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;reference&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;项目延期超过两周需提交延期说明报告，经部门总监审批后...&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;contexts&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;s2&#34;&gt;&amp;#34;项目管理办法_2024.pdf#page=7&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;s2&#34;&gt;&amp;#34;审批流程手册.pdf#page=23&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;metadata&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;category&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;项目管理&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;difficulty&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;medium&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;评估脚本的核心逻辑：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;18
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;19
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;20
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;21
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;22
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;23
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;24
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;25
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;26
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;27
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;28
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;29
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;30
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;31
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;deepeval&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;evaluate&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;deepeval.metrics&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;FaithfulnessMetric&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;AnswerRelevancyMetric&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;deepeval.test_case&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;LLMTestCase&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;build_test_cases&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dataset_path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&amp;#34;加载评估数据集，构建测试用例&amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;cases&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;load_yaml&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dataset_path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;LLMTestCase&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nb&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;question&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;actual_output&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rag_pipeline&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;answer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;question&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;expected_output&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;reference&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;retrieval_context&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fetch_contexts&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;contexts&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;c&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cases&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;eval_cases&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;run_evaluation&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;test_cases&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;thresholds&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&amp;#34;运行评估，返回各项指标&amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;faithfulness&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;FaithfulnessMetric&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;threshold&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;thresholds&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;faithfulness&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;relevancy&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;AnswerRelevancyMetric&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;threshold&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;thresholds&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;relevancy&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;results&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;evaluate&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;test_cases&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;faithfulness&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;relevancy&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;results&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;check_gate&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;results&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;baseline&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&amp;#34;门禁检查：与基线对比，判断是否允许发布&amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;metric&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;results&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;metric&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;score&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;baseline&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;metric&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;0.95&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;False&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;metric&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; 退化超过 5%&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;True&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;所有指标在容忍范围内&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;这套代码不复杂，但它把 EDD 的核心流程都串起来了：加载数据集 → 执行评估 → 门禁检查 → 生成报告。任何一次 Prompt 变更或模型切换，都会自动触发这个流程。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;让评估成为习惯而不是负担&#34;&gt;&lt;a href=&#34;#%e8%ae%a9%e8%af%84%e4%bc%b0%e6%88%90%e4%b8%ba%e4%b9%a0%e6%83%af%e8%80%8c%e4%b8%8d%e6%98%af%e8%b4%9f%e6%8b%85&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;让评估成为习惯，而不是负担
&lt;/h2&gt;&lt;p&gt;EDD 的终极目标，不是建立一套复杂的评估系统，而是让评估成为团队的一种本能反应。&lt;/p&gt;
&lt;p&gt;就像资深开发者写完代码会下意识地写单元测试一样，做大模型应用的人应该在改完 Prompt 之后，下意识地想：&amp;ldquo;这次改动会让忠实度下降吗？让相关性变差吗？我需要跑一轮评估看看。&amp;rdquo;&lt;/p&gt;
&lt;p&gt;当这种意识成为团队文化的一部分，EDD 就不再是一个需要推行的方法论，而是融入日常工作的一种工程习惯。&lt;/p&gt;
&lt;p&gt;大模型应用的&amp;quot;最后一公里&amp;quot;不是技术问题。它是工程纪律问题。是愿不愿意在&amp;quot;看起来很酷&amp;quot;和&amp;quot;真正可靠&amp;quot;之间，多走一步、多做一步验证的问题。&lt;/p&gt;
&lt;p&gt;能走好这一步的团队，才能真正把大模型从实验室搬到生产环境，从 Demo 变成产品，从话题变成价值。&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
