Skip to content

RAG 系统评估 (Evaluation)

构建 RAG 系统很容易,但评估它是否有效却很难。 我们不能仅凭“感觉”说这个回答好不好,需要量化的指标。

1. 评估的核心维度 (RAGAS 框架)

业界主流的评估框架是 RAGAS (Retrieval Augmented Generation Assessment)。虽然它是 Python 库,但其核心思想(LLM-as-a-Judge)可以轻松迁移到 Golang。

核心指标分为两类:

1.1 生成质量 (Generation Quality)

  • 信实度 (Faithfulness): 答案是否完全基于检索到的上下文?(检查幻觉)
  • 答案相关性 (Answer Relevance): 答案是否直接回答了用户的问题?

1.2 检索质量 (Retrieval Quality)

  • 上下文精确度 (Context Precision): 检索到的文档中,有用信息的占比是多少?(噪音多少)
  • 上下文召回率 (Context Recall): 检索到的文档是否覆盖了回答问题所需的所有信息?

2. Golang 实现 LLM-as-a-Judge

我们不需要复杂的 Python 库,只需要写好 Prompt,让 GPT-4 当裁判。

示例:评估“信实度” (Faithfulness)

逻辑

  1. 让 LLM 从生成的“答案”中提取所有的“陈述 (Statements)”。
  2. 让 LLM 逐一判断每个“陈述”是否能从“上下文”中推导出来。
  3. 分数 = 支持的陈述数量 / 总陈述数量。

Golang 代码实现

go
package main

import (
	"context"
	"fmt"
	"strings"

	"github.com/tmc/langchaingo/llms"
	"github.com/tmc/langchaingo/llms/openai"
)

const faithfulnessPrompt = `
你是一个公正的法官。请根据【上下文】判断【答案】中的每一句话是否都有事实依据。
如果一句话能从上下文中推导出来,输出 1;否则输出 0。
最后返回 JSON 格式:{"score": 0.x, "reason": "..."}

【上下文】:
{{.Context}}

【答案】:
{{.Answer}}
`

func EvaluateFaithfulness(ctx context.Context, llm llms.Model, contextStr, answerStr string) {
	// 简单演示:直接构造 Prompt 发送给 LLM
	// 实际工程中需使用 Template 替换变量
	prompt := strings.ReplaceAll(faithfulnessPrompt, "{{.Context}}", contextStr)
	prompt = strings.ReplaceAll(prompt, "{{.Answer}}", answerStr)

	resp, err := llm.Call(ctx, prompt)
	if err != nil {
		fmt.Println("Evaluation failed:", err)
		return
	}

	fmt.Println("=== 评估结果 ===")
	fmt.Println(resp)
}

func main() {
	llm, _ := openai.New()
	
	context := "Golang 是 Google 开发的。它发布于 2009 年。"
	answer := "Golang 是 Google 在 2009 年发布的,它是世界上最好的语言。" // 后半句是幻觉
	
	EvaluateFaithfulness(context.Background(), llm, context, answer)
}

3. 构建评估数据集 (Golden Dataset)

要进行评估,你需要一个“测试集”。通常包含:

  • Question: 问题
  • Ground Truth: 标准答案(人工撰写)

如何自动生成测试集? 使用 LLM!你可以把文档喂给 LLM,让它自动生成 (Question, Answer) 对。

go
const qgPrompt = `
请根据以下文档片段,生成 3 个由浅入深的问题,并给出对应的标准答案。
格式:
Q1: ...
A1: ...
`
// 调用 LLM 生成 QA 对,存入 JSON 文件作为测试集

4. 持续评估 (CI/CD)

在企业级项目中,评估不应该是一次性的。

  • Regression Test: 每次修改 Prompt 或检索策略后,跑一遍测试集。
  • Online Monitoring: 随机抽取线上用户的问答,后台异步进行打分。

总结

  • 不要盲目上线 RAG。
  • LLM-as-a-Judge 是目前最可行的评估方案。
  • 重点关注 Faithfulness(防幻觉)和 Context Recall(防漏查)。

🚀 学习遇到瓶颈?想进大厂?

看完这篇技术文章,如果还是觉得不够系统,或者想在实战中快速提升?
王中阳的就业陪跑训练营,提供定制化学习路线 + 企业级实战项目 + 简历优化 + 模拟面试。

了解训练营详情