12. 模型RAG评测
@
目录
模型理解力评测
RAG 之所以广受欢迎,是因为它(基于检索到的真实资料)能够减少幻觉。然而, RAG 并不一定意味着幻觉会被完全消除。
现实中出现事实性幻觉的常见场景
- 上下文提供了明确事实,但模型未读取或匹配,凭常识胡乱生成。
- 模型“看”到的背景信息有限,但它仍然自信地“虚构”细节回答问题。
问:马云在阿里巴巴创办初期遇到了哪些具体困难?
RAG:马云,著名企业家,阿里巴巴创始人。
答A(幻觉):
马云在阿里巴巴创立初期曾因办公楼失火导致数据全部丢失,团队一度陷入危机。
- 多个相似案例混淆,模型输出了正确格式但内容错误的事实
怎么你确定是否有这些问题:
事实性的评估
评估器主要用于以下场景:
- 开发和测试阶段:在集成测试中验证 RAG 系统的质量
- 批量质量检查:对一批历史对话进行离线评估
- 系统监控:定期抽样评估生产环境中的对话质量,比如每100次对话评估1次
- 模型验证:当更换 AI 模型或调整 RAG 配置时,用于验证新配置的效果
- @SpringBootTest
- public class FactCheckingTest {
- @Test
- void testFactChecking(@Autowired OllamaChatModel chatModel) {
- // 创建 FactCheckingEvaluator
- var factCheckingEvaluator = new FactCheckingEvaluator(ChatClient.builder(chatModel));
- // 示例上下文和声明
- String context = "地球是仅次于太阳的第三颗行星,也是已知唯一孕育生命的天文物体。";
- String claim = "地球是距离太阳第三大行星。";
- // 创建 EvaluationRequest
- EvaluationRequest evaluationRequest = new EvaluationRequest(context, Collections.emptyList(), claim);
- // 执行评估
- EvaluationResponse evaluationResponse = factCheckingEvaluator.evaluate(evaluationRequest);
- Assertions.assertTrue(evaluationResponse.isPass(), "The claim should not be supported by the context");
- }
- }
复制代码 解决:
- 高风险领域(医疗、法律、金融等)必须进行事实性幻觉定期评估
- 限定上下文范围:通过系统提示词让模型明确只能在指定背景或文档内容中作答,禁止引用未检索到的信息。
- "回答不确定"机制
- 调整分数、定义精确RAG相似性搜索能力
RAG幻觉评测
当我们发现大模型回答的内容并没有按照检索的documents进行有效回答, 就可以通过这种方式进行测试,评估 AI 生成的响应的事实准确性。该评估器通过验证给定的语句(responseContent)是否在逻辑上得到提供的上下文(文档)的支持,帮助检测并减少 AI 输出中的错觉。
“responseContent”和“document”将提交给人工智能模型进行评估。目前已有更小、更高效的人工智能模型专门用于此目的,例如 Bespoke 的 Minicheck,与 GPT-4 等旗舰模型相比,它有助于降低执行这些检查的成本。Minicheck 也可通过 Ollama 使用。
什么时候需要用到:
- 验证已构建的RAG系统的响应质量
- 在集成测试中自动化质量检查
- 调试和优化RAG配置时评估效果
- @SpringBootTest
- public class RagEvalTest {
- @Test
- public void testRag(
- @Autowired VectorStore vectorStore,
- @Autowired DashScopeChatModel dashScopeChatModel) {
- List<Document> documents = List.of(
- new Document("""
- 1. 预订航班
- - 通过我们的网站或移动应用程序预订。
- - 预订时需要全额付款。
- - 确保个人信息(姓名、ID 等)的准确性,因为更正可能会产生 25 的费用。
- """),
- new Document("""
- 2. 更改预订
- - 允许在航班起飞前 24 小时更改。
- - 通过在线更改或联系我们的支持人员。
- - 改签费:经济舱 50,豪华经济舱 30,商务舱免费。
- """),
- new Document("""
- 3. 取消预订
- - 最晚在航班起飞前 48 小时取消。
- - 取消费用:经济舱 75 美元,豪华经济舱50美元,商务舱25美元。
- - 退款将在 7 个工作日内处理。
- """));
- vectorStore.add(documents);
- RetrievalAugmentationAdvisor retrievalAugmentationAdvisor = RetrievalAugmentationAdvisor.builder()
- .documentRetriever(VectorStoreDocumentRetriever.builder()
- .vectorStore(vectorStore)
- .build())
- .build();
- String query = "退票费用";
- ChatResponse chatResponse = ChatClient.builder(dashScopeChatModel)
- .build().prompt(query).advisors(retrievalAugmentationAdvisor).call().chatResponse();
- EvaluationRequest evaluationRequest = new EvaluationRequest(
- // The original user question
- query,
- // The retrieved context from the RAG flow
- chatResponse.getMetadata().get(RetrievalAugmentationAdvisor.DOCUMENT_CONTEXT),
- // The AI model's response
- chatResponse.getResult().getOutput().getText()
- );
- RelevancyEvaluator evaluator = new RelevancyEvaluator(ChatClient.builder(dashScopeChatModel));
- EvaluationResponse evaluationResponse = evaluator.evaluate(evaluationRequest);
- System.out.println(evaluationResponse);
- System.out.println(chatResponse.getResult().getOutput().getText());
- }
- }
复制代码
query = "我叫什么名字";
最后:
“在这个最后的篇章中,我要表达我对每一位读者的感激之情。你们的关注和回复是我创作的动力源泉,我从你们身上吸取了无尽的灵感与勇气。我会将你们的鼓励留在心底,继续在其他的领域奋斗。感谢你们,我们总会在某个时刻再次相遇。”
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |