Skip to main content
Open In ColabOpen on GitHub

Label Studio

Label Studio is an open-source data labeling platform that provides LangChain with flexibility when it comes to labeling data for fine-tuning large language models (LLMs). It also enables the preparation of custom training data and the collection and evaluation of responses through human feedback.

在本指南中,您将学习如何将 LangChain 管道连接到 Label Studio,以实现以下功能:

  • 将所有输入提示、对话和响应聚合到一个Label Studio项目中。这将所有数据集中在一个地方,以便于标记和分析。
  • 优化提示和响应,以创建用于监督微调(SFT)和基于人类反馈的强化学习(RLHF)场景的数据集。标注数据可用于进一步训练大型语言模型,以提升其性能。
  • 通过人类反馈评估模型响应。Label Studio 提供了一个界面,供人类审查并提供对模型响应的反馈,从而实现评估和迭代。

安装与设置

首先安装最新版本的 Label Studio 和 Label Studio API 客户端:

%pip install --upgrade --quiet langchain label-studio label-studio-sdk langchain-openai langchain-community

接下来,在命令行中运行 label-studio 以在 http://localhost:8080 启动本地 LabelStudio 实例。有关更多选项,请参阅 Label Studio 安装指南

你需要一个令牌来进行API调用。

在浏览器中打开您的 LabelStudio 实例,前往 Account & Settings > Access Token 并复制密钥。

设置环境变量,包括你的 LabelStudio URL、API 密钥和 OpenAI API 密钥:

import os

os.environ["LABEL_STUDIO_URL"] = "<YOUR-LABEL-STUDIO-URL>" # e.g. http://localhost:8080
os.environ["LABEL_STUDIO_API_KEY"] = "<YOUR-LABEL-STUDIO-API-KEY>"
os.environ["OPENAI_API_KEY"] = "<YOUR-OPENAI-API-KEY>"

收集LLM提示和响应

用于标注的数据存储在Label Studio中的项目里。每个项目都由一个XML配置文件标识,该文件详细说明了输入和输出数据的规范。

创建一个项目,该程序以文本格式接收人类输入,并在文本区域中输出可编辑的大语言模型(LLM)响应。

<View>
<Style>
.prompt-box {
background-color: white;
border-radius: 10px;
box-shadow: 0px 4px 6px rgba(0, 0, 0, 0.1);
padding: 20px;
}
</Style>
<View className="root">
<View className="prompt-box">
<Text name="prompt" value="$prompt"/>
</View>
<TextArea name="response" toName="prompt"
maxSubmissions="1" editable="true"
required="true"/>
</View>
<Header value="Rate the response:"/>
<Rating name="rating" toName="prompt"/>
</View>
  1. 要在 Label Studio 中创建一个项目,请点击“创建”按钮。
  2. 在“项目名称”字段中输入项目的名称,例如 My Project
  3. 导航到 Labeling Setup > Custom Template 并粘贴上面提供的 XML 配置。

您可以将输入的LLM提示和输出的响应收集到一个LabelStudio项目中,并通过LabelStudioCallbackHandler连接:

from langchain_community.callbacks.labelstudio_callback import (
LabelStudioCallbackHandler,
)
from langchain_openai import OpenAI

llm = OpenAI(
temperature=0, callbacks=[LabelStudioCallbackHandler(project_name="My Project")]
)
print(llm.invoke("Tell me a joke"))
API 参考:OpenAI

在 Label Studio 中,打开 My Project。您将看到提示、响应以及模型名称等元数据。

收集聊天模型对话

您还可以在 LabelStudio 中跟踪和显示完整的聊天对话,并能够对最后一个回复进行评分和修改:

  1. 打开 Label Studio 并点击“创建”按钮。
  2. 在“项目名称”字段中输入项目的名称,例如 New Project with Chat
  3. 导航至标注设置 > 自定义模板,并粘贴以下 XML 配置:
<View>
<View className="root">
<Paragraphs name="dialogue"
value="$prompt"
layout="dialogue"
textKey="content"
nameKey="role"
granularity="sentence"/>
<Header value="Final response:"/>
<TextArea name="response" toName="dialogue"
maxSubmissions="1" editable="true"
required="true"/>
</View>
<Header value="Rate the response:"/>
<Rating name="rating" toName="dialogue"/>
</View>
from langchain_core.messages import HumanMessage, SystemMessage
from langchain_openai import ChatOpenAI

chat_llm = ChatOpenAI(
callbacks=[
LabelStudioCallbackHandler(
mode="chat",
project_name="New Project with Chat",
)
]
)
llm_results = chat_llm.invoke(
[
SystemMessage(content="Always use a lot of emojis"),
HumanMessage(content="Tell me a joke"),
]
)

在 Label Studio 中,打开“带聊天的新项目”。点击一个已创建的任务以查看对话历史并编辑/标注回复。

自定义标注配置

您可以修改 LabelStudio 中的默认标注配置,添加更多目标标签,例如响应情感、相关性以及许多其他类型的标注者反馈

新的标注配置可以从UI中添加:转到 Settings > Labeling Interface 并设置一个自定义配置,添加额外的标签,例如 Choices 用于情感分析或 Rating 用于相关性。请记住,在任何配置中都应包含 TextArea 标签,以便显示LLM的响应。

或者,您可以在项目创建之前,在首次调用时指定标注配置:

ls = LabelStudioCallbackHandler(
project_config="""
<View>
<Text name="prompt" value="$prompt"/>
<TextArea name="response" toName="prompt"/>
<TextArea name="user_feedback" toName="prompt"/>
<Rating name="rating" toName="prompt"/>
<Choices name="sentiment" toName="prompt">
<Choice value="Positive"/>
<Choice value="Negative"/>
</Choices>
</View>
"""
)

请注意,如果项目不存在,将根据指定的标注配置创建该项目。

其他参数

LabelStudioCallbackHandler 接受多个可选参数:

  • api_key - Label Studio API 密钥。覆盖环境变量 LABEL_STUDIO_API_KEY
  • url - Label Studio 的 URL。覆盖 LABEL_STUDIO_URL,默认为 http://localhost:8080
  • project_id - 已存在的 Label Studio 项目 ID。覆盖 LABEL_STUDIO_PROJECT_ID。将数据存储在此项目中。
  • project_name - 如果未指定项目ID,则为项目名称。将创建一个新项目。默认值为 "LangChain-%Y-%m-%d",格式化为当前日期。
  • project_config - 自定义标注配置
  • 模式: 使用此快捷方式从头开始创建目标配置:
    • "prompt" - 单个提示,单个响应。默认。
    • "chat" - 多轮对话模式。