news 2026/9/12 1:18:04

使用 Hugging Face LLM 构建 Label Studio 文本生成 ML 后端:部署、配置与自定义实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
使用 Hugging Face LLM 构建 Label Studio 文本生成 ML 后端:部署、配置与自定义实战

使用 Hugging Face LLM 构建 Label Studio 文本生成 ML 后端:部署、配置与自定义实战

【免费下载链接】label-studioLabel Studio is a multi-type data labeling and annotation tool with standardized output format项目地址: https://gitcode.com/GitHub_Trending/la/label-studio

Label Studio 通过ML 后端(Machine Learning Backend)机制,将大语言模型无缝接入数据标注工作流:模型以独立的 Web 服务形式运行,Label Studio 在标注时自动向该服务请求预测结果,并在标注界面中展示。本文以官方示例后端huggingface_llm为蓝本,完整讲解如何基于 Hugging Facetransformers预训练模型搭建文本生成后端,覆盖 Docker / 源码 / 纯 Python 三种启动方式、全部配置参数、与 Label Studio 的对接认证,以及在其基础上扩展自定义模型的方法,让你能直接照做,跑通"提示词 → LLM 生成文本 → 人工标注"的完整链路。

一、这个 ML 后端能做什么

huggingface_llm是一个专为 Label Studio 设计的机器学习后端(ML backend),核心职责是文本生成(text generation)。它基于 Hugging Face 的transformers库,加载一个预训练的语言模型,接收标注任务中的文本输入(通常是一段带指令的提示词,例如"Summarize the following text: ..."),生成对应的输出文本,并作为预测结果(prediction)回传给 Label Studio 展示给标注人员。

在 Label Studio 的 ML 后端体系中,该示例属于预标注/自动标注(pre-annotation)类型的后端:模型先行产出结果,人工再核对、修改或确认。根据官方示例模型清单(见 docs/source/guide/ml.md 中的 "Example models" 表格),huggingface_llm的能力标注为:支持预标注(Pre-annotation ✅),不支持交互式标注与训练,且无必填参数——这意味着拿到示例仓库后,不做任何额外配置即可启动。

其预测链路可以概括为(参照 ml.md 中对 ML 后端工作方式的描述):

  1. 标注人员打开一个任务;
  2. Label Studio 将任务数据发送给 ML 后端;
  3. ML 后端调用模型推理并返回预测结果;
  4. 预测结果被加载进标注界面,展示给标注人员审阅。

二、前置条件:安装 Label Studio ML backend

在动手之前,需要先安装Label Studio ML backend(SDK 与示例合集所在的仓库)。该 SDK 的作用是把机器学习代码包装成一个标准 Web 服务器:服务器端使用 uWSGI 与 supervisord 管理进程,后台训练任务由 RQ 队列处理(参见 docs/source/guide/ml_create.md)。安装后即可获得本文所需的huggingface_llm示例目录,以及label-studio-ml命令行工具。

本教程使用的huggingface_llm示例位于 label-studio-ml-backend 仓库的label_studio_ml/examples/huggingface_llm目录下,克隆并安装该仓库即可获得。具体安装方式以该仓库 README 的 quickstart 为准。

另外还需要准备:

  • 一套可用的Label Studio实例(用于创建项目并连接模型,安装方式见 docs/source/guide/install.md);
  • Docker Compose(若采用推荐的后端启动方式)。

三、Label Studio XML 标注配置

huggingface_llm后端与使用<TextArea>标签的标注配置兼容。下面是一份可直接使用的标注配置示例:

<View> <Text name="input_text" value="$text"/> <TextArea name="generated_text" toName="input_text"/> </View>

配置要点说明:

  • <Text name="input_text" value="$text"/>:从任务数据中读取$text字段作为提示词输入。要获得有意义的结果,提示词中应包含明确指令,例如"Summarize the following text: ...",这样模型才能理解任务意图并产出对应文本。
  • <TextArea name="generated_text" toName="input_text"/>toName将文本区域关联到输入文本,标注界面中的文本框会展示后端生成的文本。TextArea标签本身支持转录、转述、字幕等场景(详见 docs/source/tags/textarea.md),此处用于承接模型输出,标注人员可以在生成结果基础上直接编辑确认。

当你在 Label Studio 中打开任务时,后端会基于<Text>中定义的提示词生成文本并填入文本框,人工只需审阅、修正并提交即可完成标注。

四、启动 ML 后端(三种方式)

方式一:Docker 启动(推荐)

进入huggingface_llm示例目录后,使用 Docker Compose 一键启动:

docker-compose up

启动完成后,后端默认运行在http://localhost:9090。用 curl 验证服务是否健康:

$ curl http://localhost:9090/ {"status":"UP"}

返回{"status":"UP"}即表示后端已就绪,可以连接到 Label Studio 了。

方式二:从源码构建 Docker 镜像(进阶)

如果你想基于当前源码重新构建镜像(例如修改了模型逻辑或依赖后),执行:

docker-compose build

构建完成后再通过docker-compose up启动即可。适合需要定制镜像内容或离线交付的场景。

方式三:不使用 Docker 直接运行(进阶)

若本机环境没有 Docker,可以克隆 label-studio-ml-backend 仓库后,用 Python 虚拟环境安装依赖:

python -m venv ml-backend source ml-backend/bin/activate pip install -r requirements.txt

然后启动 ML 后端,./huggingface_llm指向示例模型目录:

label-studio-ml start ./huggingface_llm

label-studio-ml start是 ML backend SDK 提供的标准启动命令,它会读取模型目录下的_wsgi.py与模型类定义,把推理逻辑包装为可被 Label Studio 调用的 HTTP 服务(uWSGI + supervisord 架构)。

五、配置参数详解

所有参数都可以在运行容器前,通过docker-compose.yml的环境变量(environment段)进行设置。常用参数如下:

参数默认值说明
MODEL_NAMEfacebook/opt-125m用于文本生成的预训练模型名称(Hugging Face 模型 ID)
MAX_LENGTH50生成文本的最大长度
BASIC_AUTH_USER模型服务器的 Basic Auth 用户名
BASIC_AUTH_PASS模型服务器的 Basic Auth 密码
LOG_LEVEL模型服务器的日志级别
WORKERS模型服务器的工作进程(worker)数
THREADS模型服务器的线程数

将这些参数补充进docker-compose.ymlenvironment段即可,例如:

services: ml-backend: environment: - MODEL_NAME=facebook/opt-125m - MAX_LENGTH=50 - LOG_LEVEL=INFO - WORKERS=2 - THREADS=4

源码层面的佐证:Basic Auth 参数并非装饰性配置。Label Studio 侧在 label_studio/ml/models.py 中定义了 ML 后端的认证模型:MLBackendAuth枚举包含NONEBASIC_AUTH两种方式,同时模型字段basic_auth_userbasic_auth_pass与这里的BASIC_AUTH_USERBASIC_AUTH_PASS一一对应;当选择 Basic Auth 认证后,Label Studio 在发起预测请求时会把凭据通过 HTTP Basic Auth 注入请求头(参见 label_studio/ml/api_connector.py 中_prepare_kwargsHTTPBasicAuth的使用)。因此,如果你在生产环境给模型服务器加了 Basic Auth 保护,务必在 Label Studio 连接模型时填写相同的用户名与密码。

另外,WORKERS/THREADS/LOG_LEVEL对应 ML backend SDK 启动服务器时的进程、线程与日志配置,属于服务运行层面的调优参数。

六、将模型连接到 Label Studio

后端跑起来后,需要在 Label Studio 中完成对接:

  1. 在 Label Studio 中创建一个项目;
  2. 进入项目设置的Model页面(参见 docs/source/guide/project_settings.md 中 "Model" 一节);
  3. 点击Connect Model,按以下字段填写(详细字段说明见 ml.md 的 "Connect the model to Label Studio" 一节):
字段填写内容
Name为模型取一个名字,例如HuggingFace LLM
Backend URL模型服务地址,默认http://localhost:9090
Select authentication method若模型服务器启用了 Basic Auth,选择Basic Authentication并填写用户名密码
Extra params传递给模型的附加参数(可选)
Interactive preannotations是否开启交互式预标注;本示例后端不支持交互模式,保持关闭即可

对接成功后,打开任务即可看到模型基于提示词生成的文本预测。

几个容易踩坑的注意点

  • localhost 语义localhost会回环到发出请求的机器本身。如果 Label Studio 运行在 Docker 容器中,localhost指向的是容器自身而非宿主机。此时应改用host.docker.internal(例如http://host.docker.internal:9090)或宿主机内网 IP 来访问 ML 后端。

  • 后端访问 Label Studio 数据:若任务数据来自上传文件、本地存储或云存储(S3/GCS/Azure),ML 后端需要借助get_local_path()工具函数(来自label_studio_tools包)把资源 URI 解析并下载为本地文件。使用该函数前,必须在 ML 后端的environment段配置两个环境变量:

    • LABEL_STUDIO_URL:Label Studio 实例地址,必须以http://https://开头;容器内运行时不能写localhost/0.0.0.0,应使用宿主机真实 IP(ifconfig/ipconfig可查);
    • LABEL_STUDIO_API_KEY:Label Studio 访问令牌,可在个人账户页面获取(见 docs/source/guide/user_account.md 中 "Access token" 一节)。

    由于huggingface_llm处理的是纯文本字段而非文件资源,常规文本生成场景无需这两项配置;但如果你把任务来源换成需要解析文件的存储类型,就需要补上。

七、自定义模型与推理逻辑

ML 后端天然支持定制:你可以在./huggingface_llm目录中添加自己的模型和逻辑。该目录即模型后端的主目录,包含model.pydocker-compose.yml_wsgi.pyrequirements.txt等文件(目录结构可参考label-studio-ml create生成的模板,见 docs/source/guide/ml_create.md)。

自定义的核心是修改model.py中继承自LabelStudioMLBase的模型类,重写predict方法实现自己的推理逻辑:

def predict(self, tasks, context, **kwargs): """Make predictions for the tasks.""" # tasks: Label Studio 任务 JSON 数组,例如 [{"data": {"text": "..."}}] # 在此处加载你的模型并生成文本 return predictions # 符合 Label Studio 预测格式的结果数组

predict方法各参数含义如下(见 ml_create.md):

  • tasks:Label Studio 任务数据(JSON 格式,结构参见 docs/source/guide/task_format.md);
  • context:交互式标注场景下的上下文信息(含annotation_iddraft_iduser_idresult等字段);
  • 返回值predictions:预测结果数组,需符合 Label Studio 预测格式。

huggingface_llm来说,替换MODEL_NAME即可切换为任意 Hugging Face 文本生成模型(如 OPT、GPT-2、Llama 系列等);你也可以在model.py中改造成支持批量提示词、加入 prompt 模板或接入本地微调模型。修改后重新docker-compose build && docker-compose up即可生效。

八、底层调用链:从界面点击到预测结果

从源码看,Label Studio 与 ML 后端之间通过一组固定的 HTTP 端点协作(定义于 label_studio/ml/api_connector.py):

  • health:健康检查,返回{"status":"UP"}即对应本文第一节的 curl 验证;
  • setup:连接模型时调用,用于交换项目与模型信息;
  • predict:核心推理端点,接收任务数据并返回{"results": [...]}
  • versions/job_status/webhook等:用于版本同步与训练任务跟踪。

Label Studio 侧在 label_studio/ml/models.py 中维护 ML 后端的生命周期状态机:DISCONNECTED(未连接)→CONNECTED(已连接)→ERROR(出错)/TRAINING(训练中)/PREDICTING(预测中)。连接模型时会先执行健康检查与setup,通过后状态置为CONNECTED;预测时predict_tasks会把任务批量序列化后 POST 到predict端点,并对返回的results做校验(要求为列表、且每个预测项必须包含result字段),最终以 Prediction 形式持久化并展示给标注人员。

这套协议对所有 ML 后端统一生效,huggingface_llm只是其中一种实现。理解调用链后,你排查"模型连不上""预测不显示"等问题时就能有的放矢:先curl健康检查,再看setup是否成功,最后检查predict的返回格式是否符合协议要求。

九、小结与延伸阅读

本文完整覆盖了huggingface_llm后端的定位、标注配置、三种启动方式、环境变量参数、与 Label Studio 的连接认证,以及自定义模型的方法。核心要点回顾:

  • 该后端解决的是"LLM 文本生成 + 人工标注"的预标注场景,基于 Hugging Facetransformers预训练模型;
  • 推荐 Docker 方式启动,默认地址http://localhost:9090,健康检查返回{"status":"UP"}
  • 通过MODEL_NAME/MAX_LENGTH等环境变量即可调整模型与生成行为,BASIC_AUTH_USER/BASIC_AUTH_PASS与 Label Studio 侧的 Basic Auth 认证严格对应;
  • 自定义能力集中在./huggingface_llm目录内的model.py,重写predict方法即可接入自己的模型。

若想深入了解 ML 后端的通用机制,推荐继续阅读:

  • ML 后端集成总览:预测工作流、连接模型、训练、交互式预标注
  • 编写自己的 ML 后端:predict/fit方法与self.set/self.get存储机制
  • ML 后端示例合集:GPT、Hugging Face NER、Llama 交互式标注等其他大模型相关后端
  • ML 后端故障排查:常见连接与预测问题定位

【免费下载链接】label-studioLabel Studio is a multi-type data labeling and annotation tool with standardized output format项目地址: https://gitcode.com/GitHub_Trending/la/label-studio

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/12 1:17:52

Makefile中wildcard函数使用方法

Makefile中wildcard函数使用方法Makefile用于管理工程编译&#xff0c;作为一种管理工具&#xff0c;内部包含相关处理函数&#xff0c;其中wildcard就是makefile文件中的一个函数。1 Wildcard函数1.1 wildcard作用显示指定路径下指定文件类型的所有文件。1.2 格式$(wildcard p…

作者头像 李华
网站建设 2026/9/12 1:14:56

高可靠车载芯片EDL恢复指南:QCN校验与Secure Boot避坑实战

1. 这不是教程&#xff0c;是踩过17次变砖后整理的“保命清单”车载芯片平台调试这件事&#xff0c;外人看着是插根USB线、点几下鼠标的事&#xff0c;实际干过的人都知道——它更像在雷区里拆弹。我从2019年接手第一台SA8155样机开始&#xff0c;到去年把SA8295量产车机刷进第…

作者头像 李华
网站建设 2026/9/12 1:13:29

双指针技术在数组分块问题中的高效应用

1. 数组分块问题的本质与双指针解法数组分块&#xff08;Partitioning&#xff09;是算法领域一个经典问题&#xff0c;它要求我们按照特定条件将数组划分为若干区域。最常见的场景包括&#xff1a;将奇数偶数分离、把负数移到正数前面、或者按基准值划分&#xff08;快速排序的…

作者头像 李华