AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


《构建和评估高级RAG》: RAG评估要素和方法
发布日期:2024-06-16 07:48:15 浏览次数: 1871


本文带你了解如下知识:

  • • 评估RAG程序的三要素

  • • RAG评估的详细流程

  • • LLM评估的方式有哪些、

  • • 反馈函数的构成和使用

RAG评估要素

RAG 的评估围绕 RAG 的三要素展开: 输入上下文输出

形成了三个主要的指标:

  • • 问题相关性、

  • • 上下文相关性、

  • • 事实度(植地性怪怪的,我翻译成事实度,表示结果是否终于上下文和提问)。

详细信息参考「数翼」其他文章,这里不做深入。

评估流程

上一篇文章,我们提到了 TruLens 的评估流程,今天详细看看。

1. 构建 LLM 程序

第一步当然是构建 LLM 应用程序,也是我们要评估的主体。

应用程序可以你问答程序、AI助手等等,你也可以用你任何喜欢的 API。

2. TruLens 连接 LLM 程序

第二步就是将您的 LLM 应用程序连接到 TruLens,同时记录LLM的输入和响应。

前面已经演示过,这个步骤非常简单。

3. 使用反馈函数评估和记录结果

第三步就是通过针对应用程序的提示和响应运行反馈函数记录结果评估质量

为什么需要反馈函数

衡量 LLM 应用的性能是从开发到生产过程中的关键一步。如果没有先在代表性测试集上衡量其准确性,就不会将传统 ML 系统投入生产。

然而与传统机器学习不同的是,基本事实是稀疏的,而且通常完全不可用。

由于没有基本事实来计算我们的 LLM 应用程序的指标,因此可以使用反馈函数来计算 LLM 应用程序的指标。

什么是反馈函数

反馈函数提供了一种在应用程序运行时生成评估的编程方法,可以衡量应用程序在数据上的表现,以及用户的表现

评估方式

评估可以有多种方式,传统NLP、人工、大模型等等,我们这里使用 LLM。

反馈函数的结构

下图展示了反馈函数的结构。

反馈提供者

反馈提供者是运行给定反馈功能的后端。每个提供程序都提供多个底层模型, 例如 GPT-4 或 Llama-2。在许多情况下(但并非所有情况下), 反馈实现是跨提供程序共享的(例如基于 LLM 的评估)。

4. 创建反馈函数

from trulens_eval import OpenAI as fOpenAI

provider = fOpenAI()

问题相关性反馈函数

from trulens_eval import Feedback

f_qa_relevance = Feedback(
    provider.relevance_with_cot_reasons,
    name="Answer Relevance"
).on_input_output()

上下文相关性反馈函数

使用 TruLlama 获取上下文,

from trulens_eval import TruLlama

context_selection = TruLlama.select_source_nodes().node.text

创建上下文相关性评估函数:

import numpy as np

f_qs_relevance = (
    Feedback(provider.qs_relevance,
             name="Context Relevance")
    .on_input()
    .on(context_selection)
    .aggregate(np.mean)
)

事实度反馈函数

from trulens_eval.feedback import Groundedness

grounded = Groundedness(groundedness_provider=provider)

f_groundedness = (
    Feedback(grounded.groundedness_measure_with_cot_reasons,
             name="Groundedness"
            )
    .on(context_selection)
    .on_output()
    .aggregate(grounded.grounded_statements_aggregator)
)

5. 评估应用程序

使用 TruLlama 创建记录器来连接应用程序,传入前面我们创建的三个反馈函数:

  • • f_qa_relevance,

  • • f_qs_relevance,

  • • f_groundedness

from trulens_eval import TruLlama
from trulens_eval import FeedbackMode

tru_recorder = TruLlama(
    sentence_window_engine,
    app_id="App_1",
    feedbacks=[
        f_qa_relevance,
        f_qs_relevance,
        f_groundedness
    ]
)

从文件获取和手动添加要评估的问题,

eval_questions = []
with open('eval_questions.txt''r'as file:
    for line in file:
        # Remove newline character and convert to integer
        item = line.strip()
        eval_questions.append(item)
eval_questions.append("How can I be successful in AI?")

使用查询引擎进行提问,同时使用 TruLens 进行记录,

for question in eval_questions:
    with tru_recorder as recording:
        sentence_window_engine.query(question)

获取评估结果:

records, feedback = tru.get_records_and_feedback(app_ids=[])
records.head()

结果的可读性并不好,

使用 Pandas 显示一下,

import pandas as pd

pd.set_option("display.max_colwidth"None)
records[["input""output"] + feedback]

查看第一条记录,

tru.get_leaderboard(app_ids=[])

或者运行 Dashboard 查看,

tru.run_dashboard()

从下图可以看到,问题相关性挺高,但是其他两个指标不太好。

查看 11 条记录的评估数据:

点击任意一条记录查看详细结果,可以根据上下文、输入、输出来进行诊断。


--- END ---

《构建和评估高级RAG》001: 实现高级RAG管道



53AI,企业落地应用大模型首选服务商

产品:大模型应用平台+智能体定制开发+落地咨询服务

承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

与创始人交个朋友

回到顶部

 
扫码咨询