RAG检索
此模板为您提供了一个工作流程,用于评估大型语言模型(LLM)响应的质量。
使用此模板将使您能够比较不同大语言模型(LLM)的响应质量,并通过便捷的拖放界面动态排序项目集。
这支持以下使用场景:
- 将LLM响应按不同类型分类:相关、不相关、有偏见、冒犯性等。
- 比较并排序不同模型生成响应的质量。
- 为基于检索增强生成的聊天机器人和上下文学习排序上下文项。
- 构建RLHF的偏好模型
- 评估语义搜索结果
- LLM路由
正在寻找一个模型来开始微调过程?查看Label Studio博客上的指南。
如何创建数据集
收集一个提示和您希望在每项任务中显示的项目列表,采用以下JSON格式:
{
"prompt": "What caused the ancient library of Alexandria to be destroyed?",
"items": [
{ "id": "llm_1", "title": "LLM 1", "body": "Wars led to library's ruin." },
{ "id": "llm_2", "title": "LLM 2", "body": "Library's end through various wars." },
{ "id": "llm_3", "title": "LLM 3", "body": "Ruin resulted from library wars." }
]
}
收集数据集示例并将其存储在dataset.json文件中。
如何配置标注界面
LLM Ranker 模板包含以下XML格式的标注界面:
<View>
<Style>
.htx-text { white-space: pre-wrap; }
.search-query {
font-size: 120%;
width: 800px;
margin-bottom: 0.5em;
border: 1px solid #eee;
padding: 0 1em 1em 1em;
background: #fefefe;
}
.question {
font-size: 100%;
width: 800px;
background: #fff !important;
padding: 1em;
}
.answer {
font-size: 100%;
width: 800px;
background: #fff !important;
padding: 1em;
}
.doc-body {
white-space: pre-wrap;
overflow-wrap: break-word;
word-break: keep-all;
}
.doc-footer {
font-size: 85%;
overflow-wrap: break-word;
word-break: keep-all;
}
h3 + p + p { font-size: 85%; } /* doc id */
</Style>
<View className="search-query">
<Header value="Search query"/>
<Text name="query" value="$query" />
</View>
<Collapse>
<Panel value="Full question">
<View className="question">
<Text name="question" value="$question" />
</View>
</Panel>
</Collapse>
<Collapse>
<Panel value="Answer">
<View className="answer">
<Text name="answer" value="$answer" />
</View>
</Panel>
</Collapse>
<View style="margin-top: 2em">
<List name="results" value="$similar_docs" title="Search results" />
<Ranker name="rank" toName="results">
<Bucket name="positives" title="Positives" />
<Bucket name="hard_negatives" title="Hard Negatives" />
</Ranker>
</View>
</View>
配置包含以下元素:
- 该标签用于显示提示信息。value属性应设置为提示元素的名称,本例中即为prompt。- 该标签用于指示显示项目列表。value属性应设置为列表元素的名称(本例中为items)。- 该标签用于指示对列表中的项目进行排序。toName属性应设置为列表元素的名称。- 该标签指示为排序项创建一个桶。每个桶代表待排序项的高级类别,排序将在该类别内部进行。name属性应设置为桶的名称。
可以通过使用.htx-ranker-item类在Style标签中对项目进行样式设置。
启动您的标注项目
提示
需要帮助开始使用Label Studio吗?查看我们的从零到一教程。
- 在Label Studio中创建新项目
- 前往设置 > 标注界面 > 浏览模板 > 生成式AI > LLM排序器。
- 保存项目
或者,您可以使用我们的Python SDK创建项目:
import label_studio_sdk
ls = label_studio_sdk.Client('YOUR_LABEL_STUDIO_URL', 'YOUR_API_KEY')
project = ls.create_project(title='LLM Ranker', label_config='<View>...</View>')
导入数据集
要导入您的数据集,请在项目设置中前往Import并上传数据集文件dataset.json。
使用Python SDK,通过刚创建的项目的PROJECT_ID将包含输入提示的数据集导入Label Studio。
运行以下代码:
from label_studio_sdk import Client
ls = Client(url='<YOUR-LABEL-STUDIO-URL>', api_key='<YOUR-API_KEY>')
project = ls.get_project(id=PROJECT_ID)
project.import_tasks('dataset.json')
如果您想创建预标注数据(例如由LLM生成的项目的排序顺序),可以导入带有预标注的数据集:
project.import_tasks([{
"data": {"prompt": "...", "items": [...]},
"predictions": [{
"type": "ranker",
"value": {
"ranker": {
"_": [
"llm_2",
"llm_1"
],
"biased_results": ["llm_3"],
"relevant_results": []
}
},
"to_name": "prompt",
"from_name": "rank"
}]
}])
在"value"分组下,您可以指定不同的存储桶名称。请注意"_"用作特殊键,表示原始的未分类列表。
导出数据集
标注结果可以导出为JSON格式。要导出数据集,请前往项目设置中的Export并下载文件。
使用Python SDK,您可以从Label Studio导出带注释的数据集
annotations = project.export_tasks(format='JSON')
注释在"value"中的输出预期包含以下结构:
"value": {
"ranker": {
"_": [
"llm_2",
"llm_1"
],
"biased_results": ["llm_3"],
"relevant_results": []
}
}
其中:
"_"是一个特殊键,表示原始的未分类列表(与上面导入预标注示例中的用法相同)。"biased_results"和"relevant_results"是在标注界面中定义的桶名称。