找回密码
 立即注册
首页 业界区 安全 12. 模型RAG评测

12. 模型RAG评测

琦谓 11 小时前
12. 模型RAG评测

@
目录

  • 12. 模型RAG评测

    • 模型理解力评测

      • 现实中出现事实性幻觉的常见场景
      • RAG幻觉评测


  • 最后:

模型理解力评测

RAG 之所以广受欢迎,是因为它(基于检索到的真实资料)能够减少幻觉。然而, RAG 并不一定意味着幻觉会被完全消除。
现实中出现事实性幻觉的常见场景


  • 上下文提供了明确事实,但模型未读取或匹配,凭常识胡乱生成。
  • 模型“看”到的背景信息有限,但它仍然自信地“虚构”细节回答问题。
问:马云在阿里巴巴创办初期遇到了哪些具体困难?
RAG:马云,著名企业家,阿里巴巴创始人。
答A(幻觉):
马云在阿里巴巴创立初期曾因办公楼失火导致数据全部丢失,团队一度陷入危机。

  • 多个相似案例混淆,模型输出了正确格式但内容错误的事实
怎么你确定是否有这些问题:
事实性的评估
评估器主要用于以下场景:

  • 开发和测试阶段:在集成测试中验证 RAG 系统的质量
  • 批量质量检查:对一批历史对话进行离线评估
  • 系统监控:定期抽样评估生产环境中的对话质量,比如每100次对话评估1次
  • 模型验证:当更换 AI 模型或调整 RAG 配置时,用于验证新配置的效果
  1. @SpringBootTest
  2. public class FactCheckingTest {
  3.     @Test
  4.     void testFactChecking(@Autowired OllamaChatModel chatModel) {
  5.         // 创建 FactCheckingEvaluator
  6.         var factCheckingEvaluator = new FactCheckingEvaluator(ChatClient.builder(chatModel));
  7.         // 示例上下文和声明
  8.         String context = "地球是仅次于太阳的第三颗行星,也是已知唯一孕育生命的天文物体。";
  9.         String claim = "地球是距离太阳第三大行星。";
  10.         // 创建 EvaluationRequest
  11.         EvaluationRequest evaluationRequest = new EvaluationRequest(context, Collections.emptyList(), claim);
  12.         // 执行评估
  13.         EvaluationResponse evaluationResponse = factCheckingEvaluator.evaluate(evaluationRequest);
  14.         Assertions.assertTrue(evaluationResponse.isPass(), "The claim should not be supported by the context");
  15.     }
  16. }
复制代码
解决:

  • 高风险领域(医疗、法律、金融等)必须进行事实性幻觉定期评估
  • 限定上下文范围:通过系统提示词让模型明确只能在指定背景或文档内容中作答,禁止引用未检索到的信息。
  • "回答不确定"机制
  • 调整分数、定义精确RAG相似性搜索能力
RAG幻觉评测

当我们发现大模型回答的内容并没有按照检索的documents进行有效回答, 就可以通过这种方式进行测试,评估 AI 生成的响应的事实准确性。该评估器通过验证给定的语句(responseContent)是否在逻辑上得到提供的上下文(文档)的支持,帮助检测并减少 AI 输出中的错觉。
“responseContent”和“document”将提交给人工智能模型进行评估。目前已有更小、更高效的人工智能模型专门用于此目的,例如 Bespoke 的 Minicheck,与 GPT-4 等旗舰模型相比,它有助于降低执行这些检查的成本。Minicheck 也可通过 Ollama 使用。
什么时候需要用到:

  • 验证已构建的RAG系统的响应质量
  • 在集成测试中自动化质量检查
  • 调试和优化RAG配置时评估效果
  1. @SpringBootTest
  2. public class RagEvalTest {
  3.     @Test
  4.     public void testRag(
  5.             @Autowired VectorStore vectorStore,
  6.     @Autowired DashScopeChatModel dashScopeChatModel) {
  7.         List<Document> documents = List.of(
  8.                 new Document("""
  9.                         1. 预订航班
  10.                         - 通过我们的网站或移动应用程序预订。
  11.                         - 预订时需要全额付款。
  12.                         - 确保个人信息(姓名、ID 等)的准确性,因为更正可能会产生 25 的费用。
  13.                         """),
  14.                 new Document("""
  15.                         2. 更改预订
  16.                         - 允许在航班起飞前 24 小时更改。
  17.                         - 通过在线更改或联系我们的支持人员。
  18.                         - 改签费:经济舱 50,豪华经济舱 30,商务舱免费。
  19.                         """),
  20.                 new Document("""
  21.                         3. 取消预订
  22.                         - 最晚在航班起飞前 48 小时取消。
  23.                         - 取消费用:经济舱 75 美元,豪华经济舱50美元,商务舱25美元。
  24.                         - 退款将在 7 个工作日内处理。
  25.                         """));
  26.         vectorStore.add(documents);
  27.         RetrievalAugmentationAdvisor retrievalAugmentationAdvisor = RetrievalAugmentationAdvisor.builder()
  28.                 .documentRetriever(VectorStoreDocumentRetriever.builder()
  29.                         .vectorStore(vectorStore)
  30.                         .build())
  31.                 .build();
  32.         String query = "退票费用";
  33.         ChatResponse chatResponse = ChatClient.builder(dashScopeChatModel)
  34.                 .build().prompt(query).advisors(retrievalAugmentationAdvisor).call().chatResponse();
  35.         EvaluationRequest evaluationRequest = new EvaluationRequest(
  36.                 // The original user question
  37.                 query,
  38.                 // The retrieved context from the RAG flow
  39.                 chatResponse.getMetadata().get(RetrievalAugmentationAdvisor.DOCUMENT_CONTEXT),
  40.                 // The AI model's response
  41.                 chatResponse.getResult().getOutput().getText()
  42.         );
  43.         RelevancyEvaluator evaluator = new RelevancyEvaluator(ChatClient.builder(dashScopeChatModel));
  44.         EvaluationResponse evaluationResponse = evaluator.evaluate(evaluationRequest);
  45.         System.out.println(evaluationResponse);
  46.         System.out.println(chatResponse.getResult().getOutput().getText());
  47.     }
  48. }
复制代码
1.png

query = "我叫什么名字";
2.png

最后:

“在这个最后的篇章中,我要表达我对每一位读者的感激之情。你们的关注和回复是我创作的动力源泉,我从你们身上吸取了无尽的灵感与勇气。我会将你们的鼓励留在心底,继续在其他的领域奋斗。感谢你们,我们总会在某个时刻再次相遇。”
3.gif


来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册