跳转至

Argilla 数据反馈

为什么要学

Argilla 是专为 AI/LLM 时代设计的数据标注和反馈平台:

  • LLM 对齐:为 RLHF/DPO 收集人类偏好反馈
  • 数据质量:对 AI 生成的数据做质量审核
  • 灵活标注:支持评分、排序、纠正、分类等多种反馈
  • 集成丰富:与 HuggingFace、LangChain、LlamaIndex 深度集成
  • 开源:完全开源,可自托管
  • 协作:多人标注和审核流程

AI 时代数据标注的重点从"创建数据"转向"验证和改进 AI 生成的数据",Argilla 正是为此设计。

核心概念

概念说明传统标注对比
Dataset数据集(含schema定义)项目
Record一条数据记录一个标注任务
Field展示给标注者的内容输入
Question标注者需要回答的问题标注选项
SuggestionAI预填的建议答案预标注
Response人工标注的回答标注结果
Feedback Task收集人类反馈的任务RLHF数据收集

安装配置

pip install argilla

# 使用Docker启动服务端
docker run -d --name argilla \
  -p 6900:6900 \
  argilla/argilla-quickstart:latest
# 访问 http://localhost:6900 (admin/12345678)

# 或使用HuggingFace Spaces(免费)
# https://huggingface.co/spaces 搜索argilla
import argilla as rg

# 连接服务端
client = rg.Argilla(
    api_url="http://localhost:6900",
    api_key="admin.apikey"
)

快速上手

LLM 响应评估

import argilla as rg

# 创建数据集
dataset = rg.Dataset(
    name="llm-evaluation",
    workspace="admin",
    settings=rg.Settings(
        fields=[
            rg.TextField(name="prompt", title="用户提问"),
            rg.TextField(name="response", title="AI回答"),
        ],
        questions=[
            rg.RatingQuestion(name="quality", title="回答质量", values=[1,2,3,4,5]),
            rg.TextQuestion(name="correction", title="修正建议", required=False),
            rg.LabelQuestion(name="category", title="问题类别",
                           labels=["事实", "推理", "创意", "代码"]),
        ]
    )
)
dataset.create()

# 添加记录
records = [
    rg.Record(
        fields={
            "prompt": "什么是量子计算?",
            "response": "量子计算是利用量子力学原理进行计算..."
        },
        suggestions=[
            rg.Suggestion(question_name="quality", value=4),
            rg.Suggestion(question_name="category", value="事实")
        ]
    )
]
dataset.records.log(records)

RLHF 偏好收集

dataset = rg.Dataset(
    name="rlhf-preferences",
    settings=rg.Settings(
        fields=[
            rg.TextField(name="prompt"),
            rg.TextField(name="response_a", title="回答A"),
            rg.TextField(name="response_b", title="回答B"),
        ],
        questions=[
            rg.LabelQuestion(
                name="preference",
                title="哪个回答更好?",
                labels=["A更好", "B更好", "差不多"]
            ),
            rg.RatingQuestion(name="helpfulness", title="有帮助程度", values=[1,2,3,4,5])
        ]
    )
)

与 LangChain/LlamaIndex 集成

# 自动收集RAG系统的反馈
from argilla.integrations.langchain import ArgillaCallbackHandler

callback = ArgillaCallbackHandler(
    dataset_name="rag-feedback",
    api_url="http://localhost:6900",
    api_key="admin.apikey"
)

# LangChain调用时自动记录
chain.invoke({"question": "..."}, config={"callbacks": [callback]})

导出训练数据

# 获取已标注数据
dataset = client.datasets("llm-evaluation")
records = dataset.records.to_list()

# 转为HuggingFace Dataset
hf_dataset = dataset.records.to_datasets()

# 用于DPO训练
from trl import DPOTrainer
# 将偏好数据格式化后用于训练

进阶用法

多步骤标注工作流

# 第一步: AI预标注
suggestions = model.predict(data)
dataset.records.log(records_with_suggestions)

# 第二步: 人工审核(在UI中)
# ...

# 第三步: 导出审核通过的数据
approved = dataset.records(query="status:submitted").to_list()

数据质量分析

# 查看标注一致性
from argilla.metrics import agreement

scores = agreement(dataset, question="quality")
print(f"标注者一致性: {scores}")

常见问题

Q1: vs Label Studio?

方面ArgillaLabel Studio
定位LLM反馈/质量控制通用数据标注
RLHF专门支持需要定制
AI预标注一等公民通过ML Backend
HuggingFace深度集成有限
适合LLM对齐/数据质量传统CV/NLP标注

Q2: 和 RLHF 的关系?

Argilla 是收集 RLHF/DPO 训练数据的工具。它帮你高效收集人类偏好数据,然后导出给 TRL/DeepSpeed 等框架训练。

参考资源