Label Studio
Label Studio 是一個開放原始碼的資料標註平台,在為大型語言模型 (LLM) 微調資料標註時,為 LangChain 提供彈性。它還可以準備自訂訓練資料,並透過人工回饋收集和評估回應。
在本指南中,您將學習如何將 LangChain 管線連接到 Label Studio
以:
- 將所有輸入提示、對話和回應匯總到單一
Label Studio
專案中。這將所有資料整合在一個位置,以便更輕鬆地進行標註和分析。 - 精簡提示和回應,以建立用於監督式微調 (SFT) 和透過人工回饋強化學習 (RLHF) 情境的資料集。標註資料可用於進一步訓練 LLM,以提升其效能。
- 透過人工回饋評估模型回應。
Label Studio
提供介面讓人們審閱模型回應並提供回饋,從而實現評估和迭代。
安裝與設定
首先安裝最新版本的 Label Studio 和 Label Studio API 用戶端
%pip install --upgrade --quiet langchain label-studio label-studio-sdk langchain-openai langchain-community
接下來,在命令列上執行 label-studio
,以在 https://127.0.0.1:8080
啟動本機 Label Studio 執行個體。請參閱 Label Studio 安裝指南 以取得更多選項。
您需要權杖才能進行 API 呼叫。
在瀏覽器中開啟您的 Label Studio 執行個體,前往 帳戶與設定 > 存取權杖
並複製金鑰。
使用您的 Label Studio URL、API 金鑰和 OpenAI API 金鑰設定環境變數
import os
os.environ["LABEL_STUDIO_URL"] = "<YOUR-LABEL-STUDIO-URL>" # e.g. https://127.0.0.1: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>
- 若要在 Label Studio 中建立專案,請按一下「建立」按鈕。
- 在「專案名稱」欄位中輸入專案名稱,例如
我的專案
。 - 導覽至
標註設定 > 自訂範本
並貼上上方提供的 XML 組態。
您可以在 Label Studio 專案中收集輸入 LLM 提示和輸出回應,並透過 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"))
在 Label Studio 中,開啟 我的專案
。您將看到提示、回應和中繼資料,例如模型名稱。
收集聊天模型對話
您也可以在 Label Studio 中追蹤和顯示完整聊天對話,並能夠評分和修改最後的回應
- 開啟 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>
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 中,開啟「具有聊天的新專案」。按一下建立的工作以檢視對話歷史記錄並編輯/註解回應。
自訂標註組態
您可以修改 Label Studio 中的預設標註組態,以新增更多目標標籤,例如回應情感、相關性以及許多其他類型的註解器回饋。
可以從 UI 新增新的標註組態:前往 設定 > 標註介面
並設定具有其他標籤的自訂組態,例如情感的 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
,預設為https://127.0.0.1:8080
。 - project_id - 現有的 Label Studio 專案 ID。覆寫
LABEL_STUDIO_PROJECT_ID
。將資料儲存在此專案中。 - project_name - 如果未指定專案 ID,則為專案名稱。建立新專案。預設值為使用目前日期格式化的
"LangChain-%Y-%m-%d"
。 - project_config - 自訂標註組態
- mode:使用此捷徑從頭開始建立目標組態
"prompt"
- 單一提示、單一回應。預設值。"chat"
- 多回合聊天模式。