总览
概述
相关源文件
本章引用的主要源码文件:
README.mdargilla-frontend/CHANGELOG.mdargilla-frontend/components/features/annotation/container/questions/form/span/EntityLabelSelection.component.vueargilla-frontend/components/features/annotation/settings/Validation.vueargilla-frontend/components/features/dataset-creation/configuration/DatasetConfigurationForm.vueargilla-frontend/components/features/dataset-creation/configuration/questions/DatasetConfigurationFieldSelector.vueargilla-frontend/components/features/dataset-creation/configuration/questions/DatasetConfigurationLabels.vueargilla-frontend/components/features/dataset-creation/configuration/questions/DatasetConfigurationQuestion.vueargilla-frontend/components/features/dataset-creation/configuration/questions/DatasetConfigurationRating.vueargilla-frontend/components/features/dataset-creation/configuration/questions/DatasetConfigurationSpan.vueargilla-frontend/package.jsonargilla-frontend/translation/de.jsargilla-frontend/translation/en.jsargilla-frontend/translation/es.jsargilla-frontend/v1/domain/entities/hub/DatasetCreation.test.tsargilla-frontend/v1/domain/entities/hub/QuestionCreation.tsargilla-frontend/v1/domain/entities/hub/Subset.tsargilla-server/CHANGELOG.mdargilla-server/src/argilla_server/_version.pyargilla-server/src/argilla_server/api/schemas/v1/suggestions.pyargilla-v1/src/argilla_v1/_version.pyargilla/CHANGELOG.mdargilla/README.mdargilla/docs/assets/images/getting_started/dataset_configurator.pngargilla/docs/assets/images/how_to_guides/custom_field/3d_object_viewer.pngargilla/docs/assets/images/how_to_guides/custom_field/images_in_two_columns.pngargilla/docs/assets/images/how_to_guides/custom_field/metadata_table.pngargilla/docs/getting_started/faq.mdargilla/docs/getting_started/how-to-configure-argilla-on-huggingface.mdargilla/docs/getting_started/how-to-deploy-argilla-with-docker.mdargilla/docs/getting_started/quickstart.mdargilla/docs/how_to_guides/annotate.mdargilla/docs/how_to_guides/custom_fields.mdargilla/docs/how_to_guides/distribution.mdargilla/docs/how_to_guides/query.mdargilla/docs/index.mdargilla/docs/reference/argilla/client.mdargilla/docs/reference/argilla/search.mdargilla/src/argilla/__init__.pyargilla/src/argilla/_models/_dataset_progress.pyargilla/src/argilla/_version.pyargilla/src/argilla/settings/_question.py
Argilla 是一个开源协作平台,专为 AI 工程师和领域专家设计,用于为 AI 模型构建高质量数据集。本文档提供了 Argilla 仓库架构、组件和关键概念的技术概述,以帮助开发者理解该系统。
系统架构
Argilla 采用客户端-服务器架构,由不同的组件处理数据标注工作流的各个方面。
来源:README.md:35-49, argilla-server/CHANGELOG.md:28-48
该架构包含以下部分:
- 客户端组件:
- Argilla SDK:用于以编程方式与服务器交互的 Python 库
- CLI:用于服务器管理的命令行界面
- 服务端组件:
- Argilla 服务器:基于 FastAPI 的服务器,处理 API 请求
- 数据库:存储数据集、记录和用户信息(PostgreSQL 或 SQLite)
- 搜索引擎:提供搜索和过滤功能(Elasticsearch 或 OpenSearch)
- Redis 队列:管理后台任务和作业处理
- 前端:
- Argilla UI:基于 Vue.js/Nuxt 的 Web 界面,用于数据集管理和标注
- 部署选项:
- Docker Compose 用于本地或服务器部署
- Kubernetes 用于云部署
- Hugging Face Spaces 用于快速设置和共享
核心数据模型
核心数据模型围绕数据集、记录和标注展开:
来源:argilla/src/argilla/__init__.py:14-24, argilla/src/argilla/settings/_question.py:1-10
数据模型的关键组件:
- 数据集:数据和标注设置的核心容器
- 设置:字段、问题和其他数据集属性的配置
- 字段:包含待标注的数据(例如文本、图片、聊天消息)
- 问题:定义要收集的标注内容(例如标签、评分、跨度)
- 记录:单个数据点,包含关联的字段、元数据和标注
- 响应:用户对记录上特定问题提供的标注
- 建议:模型对问题的预测,可以包含置信度分数
字段和问题类型
Argilla 支持多种字段和问题类型,以满足不同的标注需求:
| 字段类型 | 描述 | 类 |
|---|---|---|
| 文本字段 | 纯文本内容 | rg.TextField |
| 图片字段 | 图片内容(URL 或 Data URL) | rg.ImageField |
| 聊天字段 | 带角色的聊天对话 | rg.ChatField |
| 自定义字段 | 用户定义的 HTML/JS 模板 | rg.CustomField |
| 问题类型 | 描述 | 类 |
|---|---|---|
| 标签问题 | 单标签分类 | rg.LabelQuestion |
| 多标签问题 | 多标签分类 | rg.MultiLabelQuestion |
| 评分问题 | 数值评分 | rg.RatingQuestion |
| 排序问题 | 选项的排序 | rg.RankingQuestion |
| 文本问题 | 自由文本响应 | rg.TextQuestion |
| 跨度问题 | 文本跨度高亮/选择 | rg.SpanQuestion |
来源:argilla-frontend/components/features/dataset-creation/configuration/questions/DatasetConfigurationQuestion.vue:1-96, argilla-frontend/v1/domain/entities/hub/QuestionCreation.ts:1-50
标注工作流
Argilla 中的典型标注工作流遵循以下顺序:
来源:argilla/docs/getting_started/quickstart.md:84-110, argilla/docs/how_to_guides/annotate.md:1-30
创建和管理数据集
可以使用 Python SDK 创建和管理数据集:
import argilla as rg
# 连接到 Argilla 服务器
client = rg.Argilla(
api_url="https://your-argilla-server.com",
api_key="your-api-key"
)
# 创建设置的数据集
settings = rg.Settings(
guidelines="将评论分类为正面或负面。",
fields=[
rg.TextField(
name="review",
title="评论文本",
required=True,
),
],
questions=[
rg.LabelQuestion(
name="sentiment",
title="这条评论的情感是什么?",
labels=["positive", "negative"],
required=True,
)
],
)
dataset = rg.Dataset(
name="sentiment_analysis",
settings=settings,
client=client,
)
dataset.create()
# 向数据集记录日志
dataset.records.log(
records=[{"text": "I love this product!"}, {"text": "This is terrible."}],
mapping={"text": "review"}
)
来源:README.md:96-137, argilla/docs/reference/argilla/client.md:1-45
UI 组件和数据集创建
Argilla UI 提供了用户友好的界面,用于数据集创建、管理和标注。UI 包括:
- 数据集创建界面:
- 从 Hugging Face Hub 导入数据
- 配置字段和问题
- 预览和自定义字段映射
- 标注界面:
- 聚焦视图,用于一次详细标注一条记录
- 批量视图,用于同时标注多条记录
- 高级过滤、搜索和排序功能
- 键盘快捷键,用于高效标注
- 数据集设置:
- 管理字段、问题和元数据属性
- 更新标注指南
- 控制任务分配设置
来源:argilla-frontend/components/features/dataset-creation/configuration/DatasetConfigurationForm.vue:1-50, argilla-frontend/translation/en.js:1-50, argilla/docs/getting_started/quickstart.md:86-100
部署选项
Argilla 可以通过多种方式部署:
- Hugging Face Spaces(推荐用于入门):
- 设置简单,配置最少
- 内置 OAuth 认证
- 可选的持久化存储
- 可以通过 Python SDK 使用
rg.Argilla.deploy_on_spaces()部署
- Docker Compose(用于本地或服务器部署):
- 对配置有更多控制
- 服务器、数据库、搜索引擎的独立容器
- 适用于生产环境
- Kubernetes(用于云部署):
- 使用 Helm 图表进行可扩展部署
- 资源管理和高可用性
- 适用于大规模生产使用
来源:argilla/docs/getting_started/quickstart.md:7-62, argilla/docs/getting_started/how-to-configure-argilla-on-huggingface.md:1-30, argilla/docs/getting_started/how-to-deploy-argilla-with-docker.md:1-15
搜索和过滤
Argilla 提供了强大的搜索和过滤功能,帮助用户查找和处理特定记录:
- 文本搜索:
- 跨文本字段的基本关键词搜索
- 带布尔运算符的高级查询语法
- 过滤:
- 按元数据属性过滤
- 按响应状态过滤(待处理、已提交、已丢弃等)
- 按建议属性过滤(代理、分数)
- 相似性搜索:
- 使用向量嵌入查找语义相似的记录
- 与向量数据库集成
来源:argilla/docs/how_to_guides/query.md:1-10, argilla/docs/reference/argilla/search.md:1-5
自定义字段
Argilla 支持自定义字段,允许用户为数据创建专门的显示模板:
# 带 HTML 模板的自定义字段示例
custom_field = rg.CustomField(
name="custom_display",
title="自定义显示",
template="""
<style>
.container {
display: flex;
gap: 10px;
}
.column {
flex: 1;
}
</style>
<div class="container">
<div class="column">
<h3>原始文本</h3>
<p>{{record.fields.text}}</p>
</div>
<div class="column">
<h3>翻译</h3>
<p>{{record.fields.translation}}</p>
</div>
</div>
""",
advanced_mode=False,
required=True,
)
来源:argilla/docs/how_to_guides/custom_fields.md:1-40
版本和发布
Argilla 遵循语义化版本控制,定期发布新功能和错误修复。当前版本可以在以下位置找到:
- Argilla SDK:
argilla/src/argilla/_version.py:15 - Argilla 服务器:
argilla-server/src/argilla_server/_version.py:18 - Argilla 前端:
argilla-frontend/package.json:3
有关变更的详细历史记录,请参阅变更日志:
- SDK:
argilla/CHANGELOG.md - 服务器:
argilla-server/CHANGELOG.md - 前端:
argilla-frontend/CHANGELOG.md
后续步骤
有关特定组件或功能的更多信息,请参阅以下页面:
- 有关 Argilla SDK 的详细信息,请参阅 Argilla SDK
- 有关 Argilla 服务器的详细信息,请参阅 Argilla 服务器
- 有关 Argilla 前端的信息,请参阅 Argilla 前端
- 要了解数据模型,请参阅 数据模型
- 有关用户指南和教程,请参阅 用户指南