Skip to main content
Label Studio 是一个开源数据标注平台,在为大型语言模型(LLM)标注微调数据方面为 LangChain 提供了极大的灵活性。它还支持准备自定义训练数据,以及通过人工反馈收集和评估响应。
在本指南中,您将学习如何将 LangChain 流水线连接到 Label Studio,以实现:
  • 将所有输入提示、对话和响应汇总到一个 Label Studio 项目中。这样所有数据集中在一处,便于标注和分析。
  • 精炼提示和响应,为监督式微调(SFT)和基于人类反馈的强化学习(RLHF)场景创建数据集。标注后的数据可用于进一步训练 LLM,提升其性能。
  • 通过人工反馈评估模型响应。Label Studio 提供界面供人工审查模型响应并给出反馈,从而进行评估和迭代。

安装与配置

首先安装最新版本的 Label Studio 和 Label Studio API 客户端:
pip install -qU langchain label-studio label-studio-sdk langchain-openai langchain-community
接下来,在命令行中运行 label-studio,在 http://localhost:8080 启动本地 LabelStudio 实例。更多选项请参阅 Label Studio 安装指南 您需要一个 Token 来调用 API。 在浏览器中打开您的 LabelStudio 实例,前往 Account & Settings > Access Token,复制密钥。 设置环境变量,包含您的 LabelStudio URL、API Key 和 OpenAI API Key:
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 中点击”Create”按钮创建项目。
  2. 在”Project Name”字段中输入项目名称,例如 My Project
  3. 导航至 Labeling Setup > Custom Template,粘贴上面提供的 XML 配置。
您可以通过 LabelStudioCallbackHandler 将 LLM 输入提示和输出响应收集到 LabelStudio 项目中:
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"))
在 Label Studio 中打开 My Project,您将看到提示、响应及模型名称等元数据。

收集聊天模型对话

您还可以在 LabelStudio 中追踪和展示完整的聊天对话,并能对最后的响应进行评分和修改:
  1. 打开 Label Studio,点击”Create”按钮。
  2. 在”Project Name”字段中输入项目名称,例如 New Project with Chat
  3. 导航至 Labeling Setup > Custom Template,粘贴以下 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.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 中打开”New Project with Chat”,点击已创建的任务可查看对话历史记录,并对响应进行编辑/标注。

自定义标注配置

您可以在 LabelStudio 中修改默认标注配置,以添加更多目标标签,例如响应情感、相关性,以及其他多种类型的标注员反馈 可通过界面添加新的标注配置:前往 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 Key,覆盖环境变量 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 - 自定义标注配置
  • mode:使用此快捷方式从头创建目标配置:
    • "prompt" - 单提示,单响应。默认值。
    • "chat" - 多轮聊天模式。