评估质量(如:测试)。 调试问题(如:日志记录与数据检查)。 改变系统行为或机制(如:提示工程、微调、编写代码)。
解决一个失效模式后,又出现其他失效模式,犹如打地鼠游戏。 除基本的“氛围检测”外,对于AI系统在各项任务中的整体效果缺乏深入了解。 提示内容逐渐膨胀为冗长且难以驾驭的形式,试图涵盖众多边缘情况和示例。
第一级:单元测试 第二级:模型与人工评估(包括调试) 第三级:A/B测试
步骤 1:编写范围明确的测试
const noExposedUUID = message => {// 移除双花括号内的所有文本const sanitizedComment = message.comment.replace(/\{\{.*?\}\}/g, '')// 搜索暴露的UUIDconst regexp = /[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/igconst matches = Array.from(sanitizedComment.matchAll(regexp))expect(matches.length, 'Exposed UUIDs').to.equal(0, 'Exposed UUIDs found')}
步骤 2:创建测试用例
[["Create a contact for John ()","What's the email address of John Smith?"]]
[['Create a contact for John Smith () with phone number 123-456-7890 and address 123 Apple St.','What\'s the email address of John Smith?'],['Add Emily Johnson with phone 987-654-3210, email , and company ABC Inc.','What\'s the phone number for Emily Johnson?'],['Create a contact for Tom Williams with birthday 10/20/1985, company XYZ Ltd, and job title Manager.','What\'s Tom Williams\' job title?'],['Add a contact for Susan Brown with partner name James Brown, and email .','What\'s the partner name of Susan Brown?'],...]
步骤3:定期运行并跟踪您的测试
记录跟踪信息
查看跟踪信息
正在评估的工具(功能)与场景。 跟踪信息源自合成输入还是真实用户输入。 在不同工具与场景组合之间导航的过滤器。 当前记录与CRM及跟踪日志系统的链接。
应查看多少数据?
带 LLM 的自动评估
模型响应:这是LLM做出的预测。 模型批评:这是(通常更为强大的)LLM对原始LLM预测所写的批评。 模型结果:这是批评模型赋予“好”或“坏”的二元标签。
使用最强大的模型:在预算允许范围内尽可能选用最强大的模型。对输出进行有效批评往往需要高级推理能力。在评估阶段,相对于生产环境中使用的模型,您可以选择速度较慢但功能更强大的模型来进行批判分析。 视模型评估为更大问题中的元问题:您必须维护一个微型评估系统来监控其质量。有时我在这个阶段会对模型进行微调(尽管我尽量避免这样做)。 持续监测模型与人类一致性:在将基于模型的评估器与人类评估标准校准一致后,必须继续定期进行练习,以监控模型与人类意见的一致性。
数据合成与筛选
["纽约市售价50万美元以下的住宅"]
一个可供搜索与筛选的轨迹数据库。 一套有助于标记错误及不良行为的机制(如断言、测试等)。 能够帮助定位错误根源的日志搜索与导航工具。错误可能源自RAG、代码中的bug,或是模型性能欠佳。 针对错误作出调整并快速验证其效果的能力。
消除查看数据的所有阻力:确保数据访问无碍,易于分析。 保持简洁:无需购买复杂的LLM工具,先充分利用现有资源。 若未大量审视数据,方法即有误:深入且广泛地观察数据是正确评估的前提。 不要依赖通用评估框架衡量AI质量:针对具体问题定制专属评估系统。 编写大量测试,并定期更新:确保测试覆盖度广且紧跟产品变化。 利用LLMs助力构建评估系统:如用于生成测试案例、编写断言、生成合成数据、批判与标注数据等。 复用评估基础设施进行调试与微调:将评估系统作为调试工具及微调数据集构建的基础。
