微信扫码
与创始人交个朋友
我要投稿
本文带你了解如下知识:
• 评估RAG程序的三要素、
• RAG评估的详细流程、
• LLM评估的方式有哪些、
• 反馈函数的构成和使用
RAG 的评估围绕 RAG 的三要素展开: 输入、上下文、输出。
形成了三个主要的指标:
• 问题相关性、
• 上下文相关性、
• 事实度(植地性
怪怪的,我翻译成事实度,表示结果是否终于上下文和提问)。
详细信息参考「数翼」其他文章,这里不做深入。
上一篇文章,我们提到了 TruLens 的评估流程,今天详细看看。
第一步当然是构建 LLM 应用程序,也是我们要评估的主体。
应用程序可以你问答程序、AI助手等等,你也可以用你任何喜欢的 API。
第二步就是将您的 LLM 应用程序连接到 TruLens,同时记录LLM的输入和响应。
前面已经演示过,这个步骤非常简单。
第三步就是通过针对应用程序的提示和响应运行反馈函数并记录结果并评估质量。
衡量 LLM 应用的性能是从开发到生产过程中的关键一步。如果没有先在代表性测试集上衡量其准确性,就不会将传统 ML 系统投入生产。
然而与传统机器学习不同的是,基本事实是稀疏的,而且通常完全不可用。
由于没有基本事实来计算我们的 LLM 应用程序的指标,因此可以使用反馈函数来计算 LLM 应用程序的指标。
反馈函数提供了一种在应用程序运行时生成评估的编程方法,可以衡量应用程序在数据上的表现,以及用户的表现。
评估可以有多种方式,传统NLP、人工、大模型等等,我们这里使用 LLM。
下图展示了反馈函数的结构。
反馈提供者是运行给定反馈功能的后端。每个提供程序都提供多个底层模型, 例如 GPT-4 或 Llama-2。在许多情况下(但并非所有情况下), 反馈实现是跨提供程序共享的(例如基于 LLM 的评估)。
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)
)
使用 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+中大型企业
2024-07-18
2024-05-05
2024-07-09
2024-07-09
2024-05-19
2024-06-20
2024-07-07
2024-07-07
2024-07-08
2024-07-09
2024-11-06
2024-11-06
2024-11-05
2024-11-04
2024-10-27
2024-10-25
2024-10-21
2024-10-21