continuous-eval 项目介绍
概述
continuous-eval
是一个开源包,专为支持大语言模型(LLM)的应用程序而开发,帮助进行数据驱动的评估。它的设计旨在通过模块化的方法对应用程序的各个部分进行测评,以确保全面的性能分析。
continuous-eval 的独特之处
- 模块化评估:通过为流水线中的每一个模块设置专属的评估指标,确保对每个部分的准确测量。
- 全面的指标库:涵盖了检索增强生成(RAG)、代码生成、代理工具使用、分类以及其他各种LLM应用场景。用户可以自由组合确定性、语义以及LLM基础的评估指标。
- 利用用户反馈进行评估:能够轻松建立一个接近人类评估的集成管道,并具备数学上的保证。
- 合成数据集生成:生成大规模的合成数据集,以测试您的流水线。
开始使用
continuous-eval
可以作为 PyPi 包来安装。只需运行以下命令:
python3 -m pip install continuous-eval
若想从源码安装:
git clone https://github.com/relari-ai/continuous-eval.git && cd continuous-eval
poetry install --all-extras
要运行基于LLM的指标,代码需要至少一个在 .env
文件中的 LLM API 密钥。参考示例文件 .env.example
。
运行单个指标
Example 使用一个数据项运行单个指标:
from continuous_eval.metrics.retrieval import PrecisionRecallF1
datum = {
"question": "What is the capital of France?",
"retrieved_context": [
"Paris is the capital of France and its largest city.",
"Lyon is a major city in France.",
],
"ground_truth_context": ["Paris is the capital of France."],
"answer": "Paris",
"ground_truths": ["Paris"],
}
metric = PrecisionRecallF1()
print(metric(**datum))
可用指标
continuous-eval
提供了丰富的指标类别:
- 检索:包括确定性和基于LLM的指标,如 PrecisionRecallF1, RankedRetrievalMetrics 等。
- 文本生成:包括确定性、语义和基于LLM的指标,如 FleschKincaidReadability, LLMBasedAnswerCorrectness 等。
- 分类:有 ClassificationAccuracy 指标。
- 代码生成:包括 CodeStringMatch, LLMBasedCodeGeneration 等。
- 代理工具:如 ToolSelectionAccuracy。
- 可自定义指标:用户可以自行扩展。
在流水线上运行评估
可以定义流水线中的模块,并选择相应的指标进行评估:
from continuous_eval.eval import Module, ModuleOutput, Pipeline, Dataset, EvaluationRunner
from continuous_eval.eval.logger import PipelineLogger
from continuous_eval.metrics.retrieval import PrecisionRecallF1, RankedRetrievalMetrics
from continuous_eval.metrics.generation.text import DeterministicAnswerCorrectness
from typing import List, Dict
dataset = Dataset("dataset_folder")
# 一个简单的3步RAG流水线:Retriever->Reranker->Generation
retriever = Module(
name="Retriever",
input=dataset.question,
output=List[str],
eval=[
PrecisionRecallF1().use(
retrieved_context=ModuleOutput(),
ground_truth_context=dataset.ground_truth_context,
),
],
)
reranker = Module(
name="reranker",
input=retriever,
output=List[Dict[str, str]],
eval=[
RankedRetrievalMetrics().use(
retrieved_context=ModuleOutput(),
ground_truth_context=dataset.ground_truth_context,
),
],
)
llm = Module(
name="answer_generator",
input=reranker,
output=str,
eval=[
FleschKincaidReadability().use(answer=ModuleOutput()),
DeterministicAnswerCorrectness().use(
answer=ModuleOutput(), ground_truth_answers=dataset.ground_truths
),
],
)
pipeline = Pipeline([retriever, reranker, llm], dataset=dataset)
print(pipeline.graph_repr()) # 可视化流水线
运行评估后,可使用 EvaluationRunner
来评估记录的数据。
合成数据生成
合成数据生成管道可以定制生成用户交互数据,适用于如RAG、代理、协作等场景。这些数据可以作为评估或其他训练用途的开始点。
贡献与资源
如果有兴趣参与 continuous-eval
项目的开发,可以查看贡献指南,并访问相关的文档、示例及博客。
- 文档:提供详细的使用指南与示例。
- 社区:加入LLM开发者社区,分享交流经验。
这个项目采用 Apache 2.0 许可证,任何人都可以查看和使用代码。