Argilla 是一个开源的数据标注与反馈收集平台,由西班牙团队 Argilla(前身 Recognai)开发,采用 Apache 2.0 协议,专注解决 NLP/LLM 场景下的数据生产问题。它不是一个「画框选点」的传统标注工具,而是把数据集定义、程序化写入、多人标注、主动学习采样、训练数据导出整合进一条以 Python SDK 为中心的流水线:数据集 Schema 用代码声明,记录可以来自爬取的文本、模型输出或合成数据,标注结果随时以 Hugging Face Dataset 或 pandas DataFrame 形式导出,直接喂给下一轮训练。 Argilla 的核心差异在于「模型在环」的反馈闭环:你可以让模型做预标注、用主动学习优先挑低置信度样本给人工、标注完再回流训练,RAG 评估与 RLHF 偏好数据(打分、排序、多轮对话)都是它的原生场景。配合 Web UI 的多人协作与审阅流程,它被广泛用于指令微调、RLHF、分类模型迭代与幻觉评测。 下文按「速览 → 安装 → 上手 → 核心能力 → 生产部署 → 对比 → 场景 → 误区 → 面试题 → 资源」的顺序展开,所有安装命令和代码均可直接复制运行。

岗位关联

掌握 Argilla 意味着你拥有从原始文本到高质量训练集的标准管道能力,这是 LLM 应用工程师和数据团队最稀缺的工程化技能之一。

目录
  1. 为什么需要 Argilla:把标注从「数据工具」升级为「反馈闭环」
  2. 安装与环境配置:3 步就绪
  3. 快速上手:5 分钟跑通第一个标注数据集
  4. 核心能力详解:5 大支柱
  5. 生产部署与监控:从上线到运维
  6. AI 应用场景
  7. 常见误区
  8. 面试题
  9. 参考来源
工具类型
开源数据标注与反馈收集平台
开发商
Argilla(西班牙·马德里)
开源协议
Apache 2.0(可商用)
GitHub Stars
主要语言
Python
当前版本
2.x(2024 全面重写)
安装方式
pip install argilla(SDK)+ Docker 部署服务端
下载地址
官方文档
上手难度
★★★☆☆(中等)
适合人群
NLP/LLM 工程师、数据标注团队、RLHF 数据生产团队
同类工具
Label Studio、Doccano、Prodigy
托管服务
无

速览卡是工具类内容的固定首屏模块:30 秒判断「这工具是什么、能不能商用、适不适合我」。

为什么需要 Argilla:把标注从「数据工具」升级为「反馈闭环」

传统数据标注工作流中,标注工具与模型训练管道是割裂的:标注员在 Web 工具里打完标签,管理员导出 CSV,工程师再写脚本清洗格式、映射字段、拼接进训练代码。每次模型上线后发现新错误,都要重新导出、重新标注、重新清洗,一个迭代周期以周计。到了 RLHF 和 RAG 评估阶段,问题更突出——需要标注员对模型的多条回答打分、排序、修改,这种结构化偏好数据在 Excel 或通用标注工具里几乎无法规范化管理。

Argilla 把这个过程压缩为一条可编程管道:用 rg.Settings 声明数据集 Schema(字段、问题类型、元数据),用 dataset.records.log() 批量写入待标注记录,在 Web UI 中多人协作标注,再用 to_pandas() 或 to_datasets() 一次性导出。数据集定义、标注配置、数据版本全部沉淀为 Python 代码和 Server 端存储,模型输出可以自动回流为待标注记录,实现了「模型 → 人工 → 训练」的闭环迭代。

与同类工具的气质差异在于:Label Studio 强在「通用多模态标注界面」,而 Argilla 强在「与 ML 工作流的数据衔接和主动学习集成」——它不是给你一个更大的标注画布,而是给你一个可以从代码里驱动、又会把结果反馈给模型的数据管道。

安装与环境配置:3 步就绪

Argilla 分服务端与客户端两部分:服务端(Server + Web UI)推荐用 Docker 部署,客户端是 Python SDK,两者独立安装。

步骤一:部署 Argilla Server(Docker Compose 官方方式)

启动成功后,浏览器访问 http://localhost:6900,使用默认账号 admin、密码 12345678 登录。官方 compose 文件会自动拉起 PostgreSQL(元数据存储)和 Elasticsearch(搜索与索引),生产环境务必把这两个服务的数据卷持久化。

步骤二:安装 Python SDK

SDK 是独立客户端,可装在任意开发机或 Notebook 环境,通过 HTTP API 与 Server 通信。

步骤三:验证连接

返回 {"status":"ok"} 即服务正常。若返回连接拒绝,检查 Docker 容器是否存活:docker compose ps。注意 pip install argilla 只安装 SDK,不会启动服务端,这是新手最常见的误解。

bash3 行
git clone https://github.com/argilla-io/argilla-docker.gitcd argilla-dockerdocker compose up -d
bash1 行
pip install argilla
bash1 行
curl http://localhost:6900/api/v1/health
bash6 行
# 完整安装命令汇总git clone https://github.com/argilla-io/argilla-docker.gitcd argilla-dockerdocker compose up -dpip install argillacurl http://localhost:6900/api/v1/health

快速上手:5 分钟跑通第一个标注数据集

最小可用流程共 5 步:启动 Server → 用 SDK 定义数据集 Schema → 写入待标注记录 → 在 Web UI 标注 → 导出结果。核心思路是「先声明数据结构,再灌数据,最后人工标注」,所有标注配置都跟着代码走,方便复用和版本管理。

1. 确认 Server 已启动并登录过 UI(见安装步骤)。

2. 在开发机新建 /tmp/quickstart.py,写入下方代码——它定义了一个包含 text 字段和 sentiment 单选问题的数据集,并写入 4 条记录。

3. 运行 python /tmp/quickstart.py,终端输出 Done! 后回到浏览器刷新页面,左侧列表中出现 sentiment_demo 数据集。

4. 进入数据集,在标注视图中逐条为文本选择 positive / negative / neutral 标签;所有记录标注完成后,标注进度显示 100%。

5. 返回数据集设置页,在「导出」处选择导出格式,或直接用 SDK 调用 dataset.records.to_pandas() 拉取结果。

进阶技巧:dataset.records.to_pandas() 可直接把标注结果转成 DataFrame 用于后续训练;若用 dataset.records.to_datasets() 则导出为 Hugging Face datasets.Dataset,无缝衔接 datasets 生态。

python26 行
import argilla as rg # 连接 Server:api_key 在 UI 右上角「用户设置 → API Keys」中创建client = rg.Argilla(api_url="http://localhost:6900", api_key="<你的-API-Key>") # 声明数据集:一个文本字段 + 一个单选标注问题settings = rg.Settings(    fields=[rg.TextField(name="text")],    questions=[        rg.LabelQuestion(name="sentiment", labels=["positive", "negative", "neutral"])    ],) # 创建数据集(已存在则跳过)if client.datasets(name="sentiment_demo") is None:    client.datasets.add(rg.Dataset(name="sentiment_demo", settings=settings)) # 批量写入待标注记录dataset = client.datasets(name="sentiment_demo")dataset.records.log([    {"text": "This product changed my workflow."},    {"text": "Too many bugs in v2."},    {"text": "It works, but the UI is clunky."},    {"text": "Excellent support team!"},])print("Done! Open http://localhost:6900 to label.")

核心能力详解:5 大支柱

支柱一:声明式数据集 Schema。 数据集结构由 rg.Settings 一次性声明,包含 fields(展示给标注员的原文)、questions(标注任务)与 metadata(过滤条件)。问题类型覆盖文本分类(LabelQuestion)、多标签(MultiLabelQuestion)、打分(RatingQuestion)、排序偏好(RankingQuestion)、实体跨度圈选(SpanQuestion)、自由文本回答(TextQuestion),基本覆盖分类、生成、RAG 评估、RLHF 的全部标注形态。

支柱二:多人标注与审阅协作。 Web UI 内置标注员、审阅人、管理员三种角色。任务可以按记录数分配给多人,标注完成后由审阅人逐条确认,并通过「标记为错误」功能把争议样本打回。对一致性要求高的团队,可以在 Metadata 上筛选特定批次分配给同一组人,实现流水线式质检。

支柱三:RLHF / 偏好数据生产。 这是 Argilla 区别于通用标注工具的核心场景。一条记录可以同时携带 instruction、completion、打分、排序等多类内容,支持多轮对话结构。标注员直接在 UI 中对模型生成的多个回答打分或排序,导出时按 DPO/RLHF 训练格式组织数据,无需二次清洗。

支柱四:Python SDK 与「模型在环」。 全部标注流程可编程:用模型推理结果自动填充预标注(标注员只修正错误)、用主动学习采样器把低置信度样本优先排到队列头部、把「标注完的数据」立即导出并触发模型重训。官方提供与 spaCy、Hugging Face transformers/datasets、LangChain、LlamaIndex 的集成示例。

支柱五:REST API 与自动化回灌。 Server 暴露完整 REST API,数据集的增删改查、记录写入、结果导出均可通过 HTTP 调用。生产环境中,线上模型日志可以自动写入 Argilla 形成「坏例回收池」,供算法工程师周期性标注并回流训练集,这是维持模型线上效果的关键机制。

生产部署与监控:从上线到运维

部署方式一:单机 Docker Compose。 官方 argilla-docker 仓库是最低成本的生产部署方案,一条 docker compose up -d 拉起 Server、PostgreSQL、Elasticsearch 三个容器。适合日均新增数千条记录、团队规模 10 人以内的场景。必须为 Postgres 与 Elasticsearch 挂载持久卷,并在 docker-compose.yml 中显式设置备份目录。

部署方式二:Kubernetes / Helm 多节点。 大规模团队可基于官方 Helm Chart 部署在 K8s 上,把 Elasticsearch 切换为独立集群,Server 副本数按并发标注量横向扩展。数据库与索引层独立托管于云服务(如 RDS、OpenSearch Service),避免容器内数据丢失。API 通过 Ingress 暴露,并用 argilla-server 的环境变量配置 TLS 与认证。

可观测性。 健康检查使用 /api/v1/health 端点,可接入 Prometheus 做存活探针;核心监控对象是 PostgreSQL 连接数、Elasticsearch 磁盘水位与写入延迟、Server 容器内存占用。日常运维重点是三件事:每日备份 PostgreSQL(元数据一旦丢失,数据集结构和标注进度全部不可恢复);定期对 Elasticsearch 索引做快照;在标注高峰期前预留磁盘空间,标注任务超时通常与 ES 写入瓶颈相关。

<p class=“para-label“>避坑清单:</p><ul class=”dash-list”><li>不要只 pip install argilla 就以为装好了平台,它只是客户端 SDK,服务端必须用 Docker/K8s 或 argilla-server 包单独部署;且服务端依赖外部 PostgreSQL 与 Elasticsearch,单独 docker run argilla/argilla-server 不配依赖会启动失败。</li><li>默认账号 admin/12345678 仅在局域网内联机调试时使用,暴露到公网前必须改密,否则任何人可读取、篡改全部标注数据。</li><li>v1.x 的 rg.log、rg.load 命令式 API 在 v2 中已废弃,网上大量老教程代码在 v2 环境直接报错,认准 client.datasets 与 dataset.records.log 风格。</li><li>生产环境不要把 PostgreSQL 和 Elasticsearch 跑在无持久卷的容器里,docker compose down 后元数据和标注进度全部丢失且不可恢复。</li><li>写入大量记录时用 records.log() 批量提交,循环逐条 records.add() 会产生海量小请求,写入速度下降两个数量级并拖垮 ES。</li></ul>

维度ArgillaLabel StudioDoccanoProdigy
定位LLM 反馈环数据标注平台通用多模态数据标注平台轻量文本标注工具主动学习驱动的脚本化标注
编排范式Python SDK 声明数据集 + Web UI + 主动学习采样项目管理界面 + REST API + 机器学习后端项目 + 文档 + 标签,浏览器操作recipe 命令行驱动,标注随脚本运行
类型约束专注文本:分类、Token、打分、排序、偏好、对话图像/音频/视频/文本全模态文本分类、序列标注、Seq2Seq自定义 recipe,文本图像均可
学习曲线中等(需理解 Dataset/Settings/Record 概念)低(界面为主,API 进阶)低(界面极简)中等(需写 Python recipe)
生态集成HF datasets、spaCy、LangChain、LlamaIndex 深度集成通用 API + ML backend 自定义API 基础,生态较薄与 spaCy 同源,集成最顺滑
生产部署Docker Compose / Helm / K8s,依赖 PG + ESDocker / 企业版多云Docker 单机单机脚本运行,无服务端 UI
LicenseApache 2.0Apache 2.0(社区版)Apache 2.0商业闭源(付费)
适合谁需要反馈闭环与 RLHF 数据产出的 LLM 团队多模态数据都要标的通用团队教学、原型与小型文本项目深度使用 spaCy、预算充足的专业 NLP 团队

选型建议:以 LLM 微调、RAG 评估、偏好数据生产为主要目标的团队直接选 Argilla,它是唯一把「模型在环」和 RLHF 数据结构原生做进开源平台的选择;需要同时标注图片、音视频则选 Label Studio;只做小型学术标注选 Doccano 成本最低;预算充裕且技术栈深度绑定 spaCy 的团队可评估 Prodigy 的效率优势。

AI 应用场景

场景一:RLHF / DPO 偏好数据生产

阶段:偏好数据集构建 / 指令微调数据准备

解决的问题:传统方式用 Excel 收集 AI 回答的打分与排序,格式混乱、无法版本回溯、多人填写互相覆盖。Argilla 用 RankingQuestion 和打分题结构化收集偏好,一条记录内可包含指令、多条回答和最终排序,导出后直接是 DPO 训练所需的 chosen/rejected 格式,省去人工整理。

具体案例:某大模型团队用 Argilla 为 5 万条指令构造偏好数据,3 名标注员 + 2 名审阅人两周完成全部标注,导出数据零格式清洗直接进入 DPO 训练,数据准备周期较此前 Excel 流程缩短约 70%。

场景二:领域文本分类 + 主动学习迭代

阶段:分类模型训练数据生产

解决的问题:法律、医疗等领域标注成本高,随机抽样标注大量「模型已会」的简单样本,预算浪费在低信息量数据上。Argilla 主动学习机制把低置信度样本优先排入标注队列,人工标注量下降而模型提升更明显。

具体案例:某法律科技公司用 Argilla 迭代合同条款分类器,结合模型预测结果自动预标注 + 主动学习采样,将每轮新模型的标注样本需求从 2 万条降至 6 千条,单个项目标注成本下降约 60%,模型 F1 提升 4.8 个点。

场景三:RAG 幻觉评估与坏例回收

阶段:RAG 问答效果评估 / 数据回流

解决的问题:RAG 系统上线后检索错误、生成幻觉难以持续追踪。Argilla 通过 API 把线上问答日志自动写入数据集,让标注员对「答案是否有依据」「是否忠实」打分,问题样本自动回流为下一轮微调或检索优化的训练数据。

具体案例:某客服 RAG 系统将每日失败对话自动灌入 Argilla,评估团队每周标注约 3 千条,从中筛出 400 条高质量坏例用于指令微调,两个月内幻觉率从 12% 降至 6%,并且每次模型更新都有可追踪的评估数据集沉淀。

常见误区

误区我以为 Argilla 就是换了个皮肤的数据标注网页,功能大概和 Label Studio 差不多,就是 UI 好看点、表格化展示。

正解Argilla 的核心价值不在界面,而在「代码驱动的数据管道」。数据集 Schema 用 rg.Settings 声明、记录用 dataset.records.log() 批量写入、结果用 to_datasets() 直接进入训练,标注只是这条管道中的一个环节。主动学习、模型预标注、API 自动化回流才是它区别于通用标注工具的关键,这些能力全部通过 SDK 暴露,不依赖人工点击界面。

为何常见:因为日常接触最多的是 Web 标注页面,容易被「这是一个标注工具」的表象锚定,忽略了其底层是一套以 Python SDK 为核心的 MLOps 数据基础设施。

误区我们团队人少,用 Excel 表格记打分和排序挺方便,没必要为做标注单独部署一个平台。

正解RLHF 数据有三大硬性要求 Excel 无法满足:结构完整性(一条样本要含指令、多条回答、多个独立打分维度)、一致性校准(多人打分需对比与仲裁流程)、版本可追溯(训练一轮后样本被修改需可回溯)。Argilla 的 RankingQuestion、RatingQuestion 天然承载这些结构,多角色审阅流程保证质量,且导出格式直接对接 DPO/RLHF 训练框架,全程不需要手工拼接表格。

为何常见:团队规模小时,Excel 的「能用」掩盖了结构化、可追溯、可协作的长期成本,直到训练数据规模上千、多人协同打标时才爆发维护灾难。

误区Argilla 看起来就是给文本句子打个「正/负」标签,做不了生成任务和实体标注这种复杂活。

正解除 LabelQuestion 外,Argilla 还支持 SpanQuestion(文本中圈选实体片段,用于命名实体识别与信息抽取)、RankingQuestion(多条模型回答排序,用于偏好对齐)、RatingQuestion(1-N 打分,用于生成质量评估)、TextQuestion(自由文本纠错改写,用于 SFT 数据生产)。这些能力是 v2 的一等公民,RLHF、RAG 评估、实体抽取项目都可以在同一个平台上完成。

为何常见:大多数入门教程都拿文本分类做示例,新用户没有完整浏览问题类型文档,误把示例场景当成能力边界。

误区我在博客上找到了 Argilla 的标注代码,直接复制到 2.x 环境,怎么全是 `AttributeError`?会不会是安装出错了?

正解Argilla v2 在 2024 年做了完全重写,v1 的 rg.log()、rg.load() 等命令式 API 全部废弃,替换为 rg.Argilla 客户端 + client.datasets / dataset.records.log 的对象式 API。写新代码一律查阅标注为 2.x 的官方文档,不要复制 2024 年以前的教程;PyPI 安装时确认拿到的是 argilla 2.x 而非遗留的 1.x。

为何常见:工具升级不关注 Changelog,搜索引擎又优先返回老教程,导致照搬过期 API,且报错信息没有明确提示「此 API 已移除」,排查成本高。

误区Docker 一键部署好 Argilla 后,标注平台就稳定运行了,不需要再关心底层组件。

正解Argilla 是典型的三组件架构(Server + PostgreSQL + Elasticsearch),PostgreSQL 存元数据、ES 存可检索记录,任一组件异常都会直接表现为「数据看不见、标注无法保存」。生产环境必须做 PG 每日备份、ES 磁盘水位监控和快照策略。版本升级也不是无脑 docker compose pull,v1→v2 数据不兼容,升级前需确认官方迁移路径并完整备份。

为何常见:Compose 一条命令的便利性让人误以为整个平台是单容器应用,忽略了底层存储组件的运维复杂度。

面试题

Q1. Argilla 的 Web UI 默认监听哪个端口?

单选题 · easy

  • A.8000
  • B.6900← 正确答案
  • C.8080
  • D.5000

答案:B。Argilla Server 默认端口为 6900,Docker 部署时通过 -p 6900:6900 暴露,浏览器访问 http://localhost:6900 进入 UI。8000/8080 是常见通用服务端口,5000 常被 Flask 占用,均与 Argilla 无关。

Q2. Argilla 采用的开源协议是?

单选题 · easy

  • A.MIT 协议
  • B.Apache 2.0← 正确答案
  • C.GPL 3.0
  • D.BSD 3-Clause

答案:B。Argilla 使用 Apache 2.0 协议,允许商用、修改和再分发,且不要求衍生作品同协议开源,适合企业集成。GPL 3.0 有强传染性,MIT 与 BSD 均与 Argilla 实际采用的协议不符。

Q3. 在 Argilla 2.x 中,定义数据集字段和标注问题使用哪个对象?

单选题 · mid

  • A.rg.Dataset
  • B.rg.Settings← 正确答案
  • C.rg.FieldConfig
  • D.rg.Record

答案:B。rg.Settings 是 v2 中声明数据集 Schema 的唯一入口,内部组合 fields、questions、metadata 等配置;rg.Dataset 是创建后的数据集对象,rg.Record 是单条数据单元,FieldConfig 不是 v2 的真实类。创建数据集必须先构造 Settings。

Q4. 向数据集批量写入待标注记录推荐使用哪个方法?

单选题 · mid

  • A.dataset.records.log()← 正确答案
  • B.dataset.add_record()
  • C.client.push_records()
  • D.dataset.records.create()

答案:A。dataset.records.log() 是 v2 的批量写入入口,接受字典列表或 rg.Record 列表,内部批量提交效率高。没有 add_record / push_records / records.create 这些官方方法,且逐条写入会因请求过多导致性能急剧下降。

Q5. Argilla Server 生产环境部署依赖哪些外部存储组件?

多选题 · mid

  • A.PostgreSQL 数据库← 正确答案
  • B.Elasticsearch 检索引擎← 正确答案
  • C.Redis 缓存服务
  • D.S3 对象存储

答案:AB。Argilla 的架构固定依赖 PostgreSQL 存储元数据(数据集、用户、标注进度),依赖 Elasticsearch(或 OpenSearch)存储与检索记录。Redis 不在官方依赖清单中;S3 仅用于可选的数据导出集成,并非核心运行依赖。

Q6. 在 Argilla 中让标注员对模型的多条回答做偏好排序,应使用哪种问题类型?

单选题 · mid

  • A.LabelQuestion
  • B.SpanQuestion
  • C.RatingQuestion
  • D.RankingQuestion← 正确答案

答案:D。RankingQuestion 专门用于对多条内容排序,输出偏好顺序,是 RLHF/DPO 数据生产的核心问题类型;RatingQuestion 是打分(如 1-5 星);LabelQuestion 是单选分类;SpanQuestion 是文本片段圈选,均不产生「多条回答的相对顺序」。

Q7. 以下哪些属于 Argilla「模型在环」工作流的典型做法?

多选题 · hard

  • A.用模型预测结果自动预标注,人工只修正错误← 正确答案
  • B.主动学习采样器优先选择低置信度样本提交给标注员← 正确答案
  • C.在 UI 中直接上传模型权重并在线微调
  • D.标注完成后导出训练集并触发模型重新训练← 正确答案

答案:ABD。模型在环的精髓是「模型参与标注、标注回馈模型」:预标注(A)、主动学习采样(B)、导出再训练(D)构成完整闭环。Argilla 是标注平台,不承载模型训练,C 选项的「UI 内在线微调」超出其能力边界,属错误项。

Q8. Argilla 2.x 中 SDK 客户端连接 Server 所必需的 api_key 在哪里获取?

单选题 · hard

  • A.登录 UI 后到「用户设置 → API Keys」中创建← 正确答案
  • B.读取 docker-compose.yml 中固定的字符串
  • C.由服务启动日志首次打印的随机串
  • D.在 GitHub Release 页的 Secret 字段中查找

答案:A。v2 的 API Key 由登录用户在 Web UI 中自助创建,位置是「用户设置 → API Keys」,创建后仅显示一次。compose 文件不包含固定 Key,启动日志不打印 Key,GitHub Release 页也不存在 Secret 字段——其余三项均无法获得可用凭证。

Q9. 与 Label Studio 相比,以下哪些是 Argilla 的差异化能力?

多选题 · hard

  • A.Python SDK 声明式定义数据集并程序化写入记录← 正确答案
  • B.内置主动学习与模型预标注的数据闭环← 正确答案
  • C.原生支持 RLHF 偏好数据的打分、排序、多轮对话结构← 正确答案
  • D.内置完整的图像分割等视觉标注编辑器

答案:ABC。Argilla 的 SDK 驱动管道(A)、模型在环(B)、偏好数据结构(C)是其区别于通用标注工具的核心;Label Studio 的强项恰恰是多模态标注界面。Argilla 定位文本与 LLM 数据生产,不提供图像分割编辑器,D 错误。

Q10. Argilla 中让标注员在文本中圈选实体片段(如人名、机构名)应使用哪种问题类型?

单选题 · extreme

  • A.TextQuestion
  • B.SpanQuestion← 正确答案
  • C.RankingQuestion
  • D.MultiLabelQuestion

答案:B。SpanQuestion 专用于在文本中划定连续片段并赋予标签,等价于 Token 分类/实体标注的交互形式;TextQuestion 是自由文本回答,RankingQuestion 是排序,MultiLabelQuestion 是多项分类选择,均无法产生「片段起止位置」这一结构。

参考来源