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)
逻辑:
- 让 LLM 从生成的“答案”中提取所有的“陈述 (Statements)”。
- 让 LLM 逐一判断每个“陈述”是否能从“上下文”中推导出来。
- 分数 = 支持的陈述数量 / 总陈述数量。
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(防漏查)。
