export export READER_JSONL_FILE_PATH='./data/eval.jsonl'
export OPENAI_API_KEY=
export OPENAI_BASE_URL=
python cli.py --reader=jsonl --metrics=context_recall
参数参考:
-
--reader
读取数据集的Reader,非必选,默认为jsonl
; -
--metrics
评测数据集的指标,非必选,默认为context_recall
,可选值有:
context_recall
answer_relevance
context_utilization
context_entities_recall
answer_semantic_similarity
指标解释见:https://docs.ragas.io/en/latest/concepts/metrics/index.html
- FinLongEval数据集中的数据结构
{
'question': '问答对中的问题',
'reference_answer': '问答对中的参考答案',
'document_name': '回答问题可参考的文档'
}
- 评测时所需的数据
以单个 sample 为例
{
'question': '问答对中的问题',
'context': ['RAG检索器根据问题检索得到的 chunks'],
'answer': 'LLM 生成的答案',
'ground_truth': '问答对中的参考答案'
}
- RAG生成答案时所需的结构
{
'question': '问答对中的问题',
'document_name': '回答问题可供参考的文档'
}
- 选择部分问答对,并上传其对应文档到 lobechat 知识库中,选中知识库,输入数据集中的问题。此部分用到的文件:
fintocsv.py
将 FinLongEval 数据集转为 csv 格式,方便复制粘贴进 lobechat 的文本框中;
- 使用 SQL 从数据库中选择对应问题的回复、Retrieve chunks,构建数据集
createDataSet.py
从数据集中读取问题,并从messages
表中读取问题的query_id
,从而读取chunks
;
- 问题
- 手动上传文件并分块、指定问题回答的知识库、输入问题的手动操作导致无法扩增;
- 构建数据集时依赖数据库字符串对比功能对同一问题进行匹配,即匹配问题的评测结果和数据集的
ground_truth
。该办法对问题的输入有高要求,必须每个字符都对应,否则数据库可能检索不出对应的历史;
- 是否存在一个 API 能够:
- 对文件进行RAG,完成上传、分块、向量化,并返回知识库的标识符;
function UploadFileToRAGPipeline(fileUrl: string[]){
// some logics
return {} as {
knowledgeBaseIdentifiers: string[]
}
}
- 提供一种这样的 completion 方法:
以下只是必要的变量,日后可以继续增加
function Completion(
knowledgeBaseIdentifier: string, // 知识库的标识符
question: string,
ground_truth: string, // 只是为了透传
){
return {
// 以下参数应该直接将原来的入参的变量传回
question,
ground_truth,
} as {
question: string; // 直接读取入参
ground_truth: string; // 直接读取入参
answer: string; // Lobe 生成的回复
contexts: string[]; // Lobe 检索器检索的chunks内容
}
}
使用 RAGAS 对生成的数据集进行评测,指标可以在 evaluate.ipnb
中进行增减。