Argilla Server 版本演进与核心能力全景解析:从 v1.5 到 v2.7 的 API、配置、后台任务与 Webhooks 实战指南
【免费下载链接】argillaArgilla is a collaboration tool for AI engineers and domain experts to build high-quality datasets项目地址: https://gitcode.com/GitHub_Trending/ar/argilla
Argilla Server 是 Argilla 项目(面向 AI 工程师与领域专家的高质量数据集协作工具)的服务端核心。本文以 argilla-server/CHANGELOG.md 为骨架,结合 settings.py、routes.py 等源码,系统梳理 Argilla Server 从 v1.5 到 v2.7 的版本演进脉络,涵盖 API v1 端点体系、环境变量配置、数据集与字段类型、后台任务队列、Webhooks 事件模型以及破坏性变更与升级迁移要点。读完本文,你将能快速判断历史版本间的功能差异,掌握当前版本的核心配置项与运维关键动作,并能在升级前准确评估 reindex、端点替换等迁移成本。
一、版本脉络总览:从 SDK 内嵌到独立服务
Argilla Server 的版本历史可以划分为三个明显阶段:
- v1.5 ~ v1.23(SDK 内嵌阶段):服务端作为 Argilla SDK 的一部分发布,功能围绕 FeedbackDataset、标注工作流与 CLI 命令展开;
- v1.24(服务端独立里程碑):CHANGELOG 明确记载"这是 Argilla Server 的首个独立发布",服务端从此可作为独立包安装使用,与 SDK 解耦;
- v1.25 ~ v2.7(API v1 完善阶段):API v1 全面接管,引入向量检索、元数据属性、Webhooks、后台任务(RQ + Redis)、Hugging Face Hub 导入导出等能力,并在 v2.0 完成对旧 API 的清理。
当前仓库中服务端代码位于 argilla-server/src/argilla_server,其入口应用通过 routes.py 将 16 个 v1 路由模块挂载到/api前缀下,包括 datasets、fields、questions、metadata_properties、records、responses、suggestions、users、vectors_settings、workspaces、webhooks、jobs、oauth2、settings、authentication 与 info。
关键版本时间线如下:
| 版本 | 核心主题 | 代表性能力 |
|---|---|---|
| 1.6.0 | 用户与权限基础 | 引入 admin/annotator 角色、用户与工作区管理端点、ARGILLA_DATABASE_URL |
| 1.8.0 | API v1 诞生 | /api/v1/datasets系列端点、FeedbackDataset 客户端支持 |
| 1.11.0 | 三角色权限体系 | owner/admin/annotator 三级角色 |
| 1.18.0 | 元数据体系 | metadata-properties 端点、Term/Integer/Float 元数据属性 |
| 1.19.0 | 向量检索 | vectors-settings 端点、相似记录搜索(余弦相似度) |
| 1.24.0 | 服务独立 | Argilla Server 独立发布,修复ARGILLA_BASE_URL |
| 2.0.0 | 破坏性升级 | 移除全部 API v0 端点、新增 records.status 列、需要 reindex |
| 2.2.0 | 后台任务 | 引入 rq + Redis、chat 类型字段 |
| 2.3.0 | 自定义字段 | CustomField、Helm chart |
| 2.5.0 | 事件驱动 | Webhooks 全套端点与事件、Python 3.13、Pydantic v2 |
| 2.6.0 | Hub 导入导出 | 后台任务化的 HF Hub export/import 端点 |
| 2.7.0 | 预定义 ID | 支持按预定义 id 创建用户与工作区 |
二、API v1 端点体系:从 v1.8 奠基到 v2.x 完善
2.1 资源端点全家桶(v1.8.0 建立)
v1.8.0 一次性引入了 API v1 的完整资源骨架,此后几乎所有端点都在此基础上扩展:
- 数据集:
GET/POST /api/v1/datasets、GET/DELETE /api/v1/datasets/{dataset_id}、POST .../publish; - 字段与问题:
GET/POST /api/v1/datasets/{dataset_id}/fields、.../questions,以及对应的单资源删除端点; - 记录:
GET/POST /api/v1/datasets/{dataset_id}/records、GET /api/v1/me/datasets(当前用户可见数据集)、POST /api/v1/me/records/{record_id}/responses; - 工作区与用户:
GET /api/v1/workspaces/{workspace_id}、GET/POST /api/v1/workspaces/{workspace_id}/users; - 服务信息:
GET /api/v1/version、GET /api/v1/status。
从当前源码 records.py 可以看到记录列表端点GET /api/v1/datasets/{dataset_id}/records的完整签名:支持include参数(可携带 responses、suggestions、vectors)、offset/limit分页,其中limit被约束在ge=1, le=1000(与 v1.19.0 CHANGELOG 中"limit 只接受 1~1000"的破坏性变更一致),并返回Records(items, total)结构。
2.2 记录写入:从单条到 bulk,再到字段级更新
- v1.28.0新增
POST/PUT /api/v1/datasets/:dataset_id/records/bulk批量端点,同时将旧的单条POST/PATCH .../records标记为弃用; - v2.0.0正式移除弃用的
POST /api/v1/datasets/:dataset_id/records与PATCH /api/v1/datasets/:dataset_id/records,批量写入成为唯一途径; - v2.6.0允许在
PATCH /api/v1/records/:record_id与PUT /api/v1/datasets/:dataset_id/records/bulk中更新记录字段(fields)。
2.3 搜索体系:DSL、过滤、排序与向量
- v1.20.0起,搜索端点支持可选的
query属性以及filter、sort结构,记录搜索从简单关键词演进为结构化 DSL; - v2.1.0引入"advanced dsl for text searches"(高级文本搜索 DSL),对应源码中 records.py 的
POST /datasets/{dataset_id}/records/search与POST /me/datasets/{dataset_id}/records/search两个搜索端点,后者按当前用户上下文过滤响应; - 搜索端点同时支持
GET .../records/search/suggestions/options返回可检索的 suggestion 选项(按问题聚合 agent 列表),见 records.py; - 向量检索(v1.19.0):新增 vectors-settings 的增删改查端点,记录支持携带
vectors,检索时使用余弦相似度计算向量距离,并可用include参数按需返回向量。
2.4 数据集进度与指标
进度类端点经历了两次演进:v1.27.0 新增GET /api/v1/datasets/:dataset_id/progress返回单数据集进度指标;v2.1.0 新增GET /api/v1/datasets/:dataset_id/users/progress计算各用户进度;v2.0.0 将其改造为支持新的数据集分布任务(distribution task),并在 v2.5.0 的响应中增加users属性(源码见 datasets.py)。
2.5 从 Hub 导入导出:异步后台任务(v2.4.0 / v2.6.0)
两个端点将耗时操作从同步请求中剥离,全部走后台任务:
POST /api/v1/datasets/{dataset_id}/import(v2.4.0):从 Hugging Face 数据集导入,请求体包含name、subset、split与字段mapping;POST /api/v1/datasets/{dataset_id}/export(v2.6.0):将数据集导出到 Hugging Face Hub,额外支持private与token参数,并在导出前校验数据集非空。
两者均返回202 Accepted与JobSchema{id, status},实际工作由 hub_jobs.py 中的import_dataset_from_hub_job/export_dataset_to_hub_job异步执行,并配置了timeout=JOB_TIMEOUT_DISABLED(即 -1,不设超时)与最大 3 次重试,见 datasets.py。
三、配置体系:ARGILLA_前缀环境变量全解析
v1.13.0 起 Argilla 移除了所有无前缀环境变量,所有合法环境变量均以ARGILLA_开头。这一约束在当前 settings.py 中通过Config.env_prefix = "ARGILLA_"固化。以下按类别展开 CHANGELOG 中出现的核心配置项。
3.1 数据库连接与连接池
| 环境变量 | 版本引入 | 默认值 | 说明 |
|---|---|---|---|
ARGILLA_DATABASE_URL | 1.6.0 | ~/.argilla/argilla.db(SQLite) | 数据存储 URL。源码会自动将sqlite协议升级为sqlite+aiosqlite、将postgresql升级为postgresql+asyncpg,见 settings.py |
ARGILLA_DATABASE_SQLITE_TIMEOUT | 2.0.0 | 5(秒) | SQLite 事务超时,见 constants.py |
ARGILLA_DATABASE_POSTGRESQL_POOL_SIZE | 2.0.0 | 15 | 连接池中保持打开的连接数 |
ARGILLA_DATABASE_POSTGRESQL_MAX_OVERFLOW | 2.0.0 | 10 | 超出 pool_size 可额外打开的连接数 |
这些参数最终汇入database_engine_args属性:SQLite 使用connect_args.timeout,PostgreSQL 使用pool_size与max_overflow,见 settings.py。默认常量集中在 constants.py。
3.2 Redis 与后台任务
- v2.2.0引入
rq(Python RQ)库,以 Redis 为依赖处理后台任务(首个用例是数据集分布策略更新后刷新记录状态的后台任务); - Unreleased新增
ARGILLA_REDIS_USE_CLUSTER,用于切换 Redis 集群(Cluster)与单机(Standalone)模式。源码 queues.py 据此选择RedisCluster.from_url或redis.from_url; - 队列命名与优先级(v2.5.0 引入 high 队列):
DEFAULT_QUEUE = Queue("default", ...)、HIGH_QUEUE = Queue("high", ...),见 queues.py。Webhook 事件通知等对时效敏感的任务走 high 队列(见 webhook_jobs.py)。
3.3 搜索与索引
| 环境变量 | 版本引入 | 说明 |
|---|---|---|
ARGILLA_SEARCH_ENGINE | 1.19.0 | 取值elasticsearch或opensearch。OpenSearch 用户需>=2.4并显式设置该变量 |
ARGILLA_ES_MAPPING_TOTAL_FIELDS_LIMIT | 1.25.0 | 应对大规模标注流程的字段总量上限(默认 2000,见 settings.py) |
REINDEX_DATASETS | 1.25.0(quickstart)/ 2.0.0(server 镜像) | 启动时将数据集与记录重新索引进搜索引擎 |
注意 v1.25.0 与 v2.0.0 均声明索引映射发生变更,需要 reindex——这是两个必须规划迁移动作的版本。
3.4 认证与安全(ARGILLA_AUTH_*)
v1.23.0 引入新一代认证变量并弃用旧的ARGILLA_LOCAL_AUTH_*(后者在 v1.25.0 被移除):
ARGILLA_AUTH_SECRET_KEY:JWT 签名密钥(默认随机生成 uuid4,见 security/settings.py);ARGILLA_AUTH_ALGORITHM:默认HS256;ARGILLA_AUTH_TOKEN_EXPIRATION:会话令牌过期时间,默认86400秒(1 天);ARGILLA_AUTH_OAUTH_CFG:OAuth2 YAML 配置文件路径,默认.oauth.yaml。
上述默认值均可在 security/settings.py 中确认。v1.23.0 同期新增了对 Hugging Face Hub 的 OAuth2 支持。
3.5 问题(Question)选项数量上限
ARGILLA_LABEL_SELECTION_OPTIONS_MAX_ITEMS(v1.27.0):label 与 multi-label 选择题的最大选项数,默认500;ARGILLA_SPAN_OPTIONS_MAX_ITEMS(v1.27.0):span 题最大选项数,默认500。
两者默认值定义在 constants.py,并作为字段默认值接入 settings.py。其他问题类约束还包括:rating 题取值限定[1, 10](v1.14.0,v1.29.0 起允许0)、ranking 题最多 50 个选项(v1.18.0)、visible_options需介于 3 与选项总数之间(v1.16.0)。
3.6 Hugging Face 与遥测
ARGILLA_SHOW_HUGGINGFACE_SPACE_PERSISTENT_STORAGE_WARNING(v1.28.0):控制是否在 HF Spaces 持久化存储被禁用时展示警告;ARGILLA_ENABLE_SHARE_YOUR_PROGRESS(v2.6.0):启用/禁用"share your progress"社区进度分享功能,默认False(见 settings.py),并在GET /api/v1/settings中通过argilla.share_your_progress_enabled暴露;- 遥测在 v2.1.0 切换到 HuggingFace 遥测客户端,
HF_HUB_DISABLE_TELEMETRY=1或HF_HUB_OFFLINE=1会使其失效(见 settings.py)。
3.7 其他重要配置
ARGILLA_HOME_PATH(v1.6.0):Argilla 相关文件的存放目录,默认~/.argilla;ARGILLA_BASE_URL(v1.24.0 修复):服务部署的 base url,源码会规范化首尾斜杠(settings.py);Server-Timing响应头(v2.0.0):所有响应携带服务端生成响应耗时的毫秒数。
四、数据模型演进:字段、问题与数据集属性
4.1 字段类型:text → chat → image → CustomField
- v2.2.0新增
chat类型字段,支持聊天式对话内容(当前 SDK 侧对应 markdown/chat.py 的渲染支持); - v2.1.0新增
image类型字段,支持 URL 与 Data URL; - v2.3.0新增
CustomField,允许自定义字段渲染逻辑(参考 custom_fields.md); - v2.0.0为 records 表新增
status列,支撑记录完成度与分布策略。
4.2 问题类型:span、rating、ranking、label_selection
- v1.26.0新增
span问题(支持allow_overlapping允许重叠跨度设置,v1.27.0); - v1.12.0新增
RankingQuestion与对应的 Ranking 组件; - v1.9.0引入
LabelSelectionQuestionSettings与MultiLabelSelectionQuestionSettings,并支持字段/问题的use_markdown属性与响应draft状态; - v1.28.0为 multi-label 选择问题增加
options_order设置以指定选项顺序;v1.25.0起支持更新 label/multi-label 选择题的选项。
4.3 数据集分布策略(Distribution)
v2.0.0支持在创建与更新数据集时指定distribution属性(将记录分配给标注用户的分布任务),并将progress、metrics端点改造为适配新任务模型。这一变化对应 CHANGELOG 标记的两处[breaking]变更,升级到 2.x 后消费这两个端点的客户端必须同步适配。
五、Webhooks 事件体系(v2.5.0)
v2.5.0 为 Argilla Server 引入完整的事件驱动能力:
- 管理端点:
POST /api/v1/webhooks(创建)、PATCH /api/v1/webhooks/{webhook_id}(更新)、DELETE /api/v1/webhooks/{webhook_id}(删除)、GET /api/v1/webhooks(列表)、POST /api/v1/webhooks/{webhook_id}/ping(连通性测试),见 webhooks.py; - 事件枚举定义在 enums.py,涵盖三类:
| 类别 | 事件 |
|---|---|
| 数据集 | dataset.created、dataset.updated、dataset.deleted、dataset.published |
| 记录 | record.created、record.updated、record.deleted、record.completed |
| 响应 | response.created、response.updated、response.deleted |
事件的触发与通知逻辑位于 webhooks/v1 目录(datasets/records/responses 三组 build + notify 函数),并通过 contexts/datasets.py 在领域操作中调用。事件通知投递到high优先队列异步执行(webhook_jobs.py)。
六、CLI 与运维命令演进
服务端运维能力随版本逐步增强(v1.16.0 为 CLI 大版本):
- 用户管理:
users create、users list、users delete、users update(v1.11.0 起支持改角色); - 工作区管理:
workspaces list、workspaces create、workspaces add-user、workspaces delete-user; - 数据集管理:
datasets list、datasets delete、datasets push-to-hub; - 服务信息:
info、whoami、server_info; - 数据库:v1.16.0 将
database命令移入server组(argilla server database),v1.22.0 彻底移除旧的python -m argilla database;v1.21.0 新增 reindex CLI 任务,将数据集与记录重新索引到搜索引擎;v1.8.0 新增database revisions命令查看迁移信息,database migrate支持--revision参数指定目标版本。
注意:v2.0.0 移除了 argilla quickstart docker 镜像(旧版本仍可用),并使用新的argilla-hf-spaces镜像(v2.0.0 引入)在 HF Spaces 中运行服务端;v2.5.0 将默认 Python 版本升级到 3.13、Pydantic 升级到 v2——如果你在自己的镜像中二次构建,需同步这些基础依赖。
七、升级与迁移清单:破坏性变更速查
升级 Argilla Server 前,请对照以下 CHANGELOG 中标记为[breaking]或需注意的事项逐项检查:
- v1.25.0:搜索索引映射变更(响应索引用 user
id替代username),需要 reindex;移除ARGILLA_LOCAL_AUTH_*三个变量;ARGILLA_USERS_DB_FILE仅用于从 YAML 迁移用户。 - v1.28.0:废弃
POST /api/v1/datasets/:dataset_id/records与PATCH /api/v1/dataset/:dataset_id/records,改用 bulk 端点。 - v2.0.0(本仓库范围内最大的一次破坏性升级):移除全部 API v0 端点;移除废弃的
POST/PATCH .../records单条端点;移除GET /api/v1/me/datasets/:dataset_id/records;搜索端点不再支持response_status、metadata、sort_by查询参数(改为请求体内的结构化 DSL);progress与metrics端点适配新分布任务;搜索索引映射变更,需要 reindex。 - v2.5.0:Python 3.13 与 Pydantic v2——检查自定义扩展与依赖兼容性。
- 全局约定:所有环境变量必须以
ARGILLA_前缀(v1.13.0 起);记录列表与搜索的limit限制在1~1000(v1.19.0 起);PATCH /api/v1/records/:record_id在 v2.6.0 起可更新字段。
升级路径建议:小版本(2.4.x → 2.5.x)可平滑升级;跨大版本(1.x → 2.x)务必先在测试环境执行 reindex 演练,并用GET /api/v1/version、GET /api/v1/status验证服务健康后再切换流量。
八、源码参考路径
- 服务入口与路由挂载:argilla-server/src/argilla_server/api/routes.py
- 环境变量定义:argilla-server/src/argilla_server/settings.py、argilla-server/src/argilla_server/constants.py
- 认证配置(JWT/OAuth2):argilla-server/src/argilla_server/security/settings.py
- 记录端点实现:argilla-server/src/argilla_server/api/handlers/v1/datasets/records.py、records_bulk.py
- 数据集、导入导出端点:argilla-server/src/argilla_server/api/handlers/v1/datasets/datasets.py
- Webhooks 事件枚举与端点:argilla-server/src/argilla_server/webhooks/v1/enums.py、argilla-server/src/argilla_server/api/handlers/v1/webhooks.py
- 后台任务与队列:argilla-server/src/argilla_server/jobs/queues.py、hub_jobs.py、dataset_jobs.py
- 领域逻辑(数据集上下文、Webhook 触发):argilla-server/src/argilla_server/contexts/datasets.py
完整变更记录请查阅 argilla-server/CHANGELOG.md 原文,其中每个条目均保留了对应的 PR/Issue 编号,可作为深入某个具体功能时回溯的索引。
【免费下载链接】argillaArgilla is a collaboration tool for AI engineers and domain experts to build high-quality datasets项目地址: https://gitcode.com/GitHub_Trending/ar/argilla
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考