
Argilla Server 后端服务开发与运维指南源码结构、CLI 命令与数据库迁移实战【免费下载链接】argillaArgilla is a collaboration tool for AI engineers and domain experts to build high-quality datasets项目地址: https://gitcode.com/GitHub_Trending/ar/argillaArgilla Server 是 Argilla 协作标注平台的后端服务为 AI 工程师与领域专家构建高质量数据集提供 REST API、数据库存储、全文搜索与后台任务调度能力。本文以 argilla-server/README.md 为核心骨架结合仓库源码深入讲解源码目录组织、本地开发环境、PDM 开发命令、CLI 管理命令、数据库迁移与 RQ 后台任务帮助你在本仓库中完成从源码启动到日常运维的完整流程。Argilla Server 在项目中的定位Argilla 是一个面向 AI 工程师和领域专家、用于构建高质量数据集的协作工具。本仓库argilla-server仅承载后端服务器的开发者信息它负责数据集、字段、问题、记录、标注响应、建议、元数据属性、向量设置与 Webhook 等核心实体的持久化与 API 暴露同时为前端提供数据接口。若需了解整体上手流程可阅读仓库根目录的 README.md前端服务的运行说明位于 argilla-frontend/README.md。从源码结构看服务端采用版本化 API 层 非版本化业务层的分层设计对外暴露的 HTTP API 按版本当前仅 v1组织而业务逻辑与数据库模型不直接暴露给 API因此不受版本化约束。源码目录结构解析argilla-server的核心源码位于argilla-server/src/argilla_serverREADME 给出了以下高层级概览/argilla_server /api # Including all the API endpoints and related code /errors # Custom exceptions and error handlers /v1 /handlers # Request FastAPI handlers /v1 /policies # Authorization policies for resources /v1 /schemas # Pydantic schemas for request and response bodies /v1 /contexts # Domain contexts for the application including business logic accounts.py datasets.py search.py ... /models # SQLAlchemy ORM models for the database database.py对照实际仓库各目录职责如下api/API 层包含全部 API 端点及相关代码。其中api/handlers/v1/存放 FastAPI 路由处理器覆盖数据集、记录、字段、问题、响应、建议、元数据属性、向量设置、用户、工作区、Webhook、OAuth2 与认证等资源api/errors/存放自定义异常与错误处理器api/policies/实现资源的授权策略api/schemas/定义请求与响应体的 Pydantic 模型api/routes.py负责汇总挂载 v1 路由。contexts/业务层承载应用领域上下文与业务逻辑如accounts.py账户、datasets.py数据集、search.py搜索等。该目录不按 API 版本划分因为业务逻辑不直接暴露给 API。models/数据层models/database.py定义全部 SQLAlchemy ORM 模型。从源码可见的核心实体包括User、Workspace、Dataset、Record、Field、Question、Response、Suggestion、MetadataProperty、VectorSettings、Webhook以及关联表WorkspaceUser、DatasetUser参见 models/database.py。alembic/迁移脚本存放数据库迁移版本脚本见下文数据库迁移章节。search_engine/搜索引擎适配提供 Elasticsearch/OpenSearch 的索引与查询实现。jobs/后台任务定义 RQ 队列与任务security/提供认证与授权支持telemetry/负责遥测上报webhooks/实现 Webhook 的签名与推送逻辑。值得注意的设计原则contexts与models不进行版本化而api内部按 API 版本组织当前只有 v1这正是因为业务逻辑和规范化的数据库模型不直接暴露给 API不受版本兼容性约束。本地开发环境准备README 明确说明默认情况下所有通过pdm run执行的命令都会从.env.dev文件读取环境变量唯一例外是pdm test——它会用.env.test文件中的值覆盖部分环境变量。这些环境变量都可以按需自行覆盖。从 pyproject.toml 的[tool.pdm.scripts]配置可以验证这一点_.env_file .env.dev test { cmd pytest, env_file .env.test }也就是说开发与测试使用两套相互隔离的环境配置避免测试过程污染开发环境。建议先确认本机已安装 PDM 并执行依赖安装如pdm install再继续后续命令。PDM 开发命令速查README 提供了一组自定义 PDM 命令覆盖开发全流程命令作用pdm server-dev一条命令完成开发服务器启动准备迁移数据库、创建默认用户、在正确端口启动服务pdm test运行完整测试套件自动使用~/.argilla/argilla-test.db作为 SQLite 测试库pdm cli运行 Argilla CLI 入口pdm migrate创建数据库并执行迁移pdm server以 uvicorn 启动 FastAPI 服务器--port 6900 --reloadpdm worker启动 RQ 后台任务 worker启动开发服务器pdm server-dev这是开发时最常用的命令它通过链式组合完成三项工作迁移数据库、创建默认用户、启动服务器。对应 pyproject.toml 中的 composite 脚本server-dev.composite [ migrate, cli database users create_default, server, ]其中migrate等价于alembic upgrade headcli database users create_default会创建默认用户与工作区server则等价于uvicorn argilla_server:app --port 6900 --reload。运行测试pdm test测试使用 SQLite 数据库路径为~/.argilla/argilla-test.db执行时会自动创建。运行整个测试套件pdm test仓库测试分为单元测试argilla-server/tests/unit与集成测试argilla-server/tests/integration覆盖 API、CLI、数据库、安全、搜索、Webhook 等模块。其余开发命令pdm cli # 运行 CLI pdm migrate # 创建数据库并执行迁移默认 SQLite 数据库位于 ~/.argilla/argilla.db pdm server # 以 uvicorn 启动 FastAPI 服务器端口 6900热重载 pdm worker # 启动 RQ 后台任务 worker启动 Argilla Serverpython -m argilla_server start命令会启动 Argilla 服务器并阻塞当前终端。命令入口位于 cli/start.py其实现本质是封装 uvicorndef start( host: str typer.Option(0.0.0.0, helpThe host where the Argilla server will be binded), port: int typer.Option(6900, helpThe port where the Argilla server will be binded), access_log: bool typer.Option(True, helpWhether to enable or disable the Argilla server access log), ) - None: import uvicorn uvicorn.run( argilla_server:app, portport, hosthost, access_logaccess_log, )可用参数如下--host服务器绑定的主机地址默认0.0.0.0。--port服务器绑定的端口默认6900。--access-log/--no-access-log启用/禁用服务器访问日志默认启用True。使用 uvicorn 直接启动也可以跳过 CLI 封装直接用 uvicorn 启动uvicorn argilla_server:app --port 6900两种方式等价start命令只是为 uvicorn 提供了默认参数。FastAPI 应用对象argilla_server:app在 _app.py 中创建其 lifespan 阶段会依次配置数据库、搜索引擎与 Redis 连接然后挂载 CORS、Brotli 压缩等中间件以及 v1 API 路由。CLI 命令总览argilla_serverPython 包提供了一组基于 Typer 中组装包含四个子命令组app.add_typer(database_app, namedatabase) # 数据库管理 app.add_typer(search_engine_app, namesearch-engine) # 搜索引擎管理 app.command(nameworker, ...)(worker) # 启动 RQ worker app.command(namestart, ...)(start) # 启动服务器查看全部可用命令python -m argilla_server --help查看某个具体命令的详细帮助以数据库组为例python -m argilla_server database --help--help同样适用于更深的子命令层级如python -m argilla_server database users --help。启动服务器命令python -m argilla_server start参数与默认值已在上文启动 Argilla Server一节说明。数据库命令组argilla_server database命令组用于管理 Argilla 服务器的数据库包含两个核心命令python -m argilla_server database migrate执行数据库迁移。python -m argilla_server database revisions列出数据库可迁移到的各个版本。搜索引擎命令组argilla_server search-engine命令组用于操作 Argilla 使用的搜索引擎python -m argilla_server search-engine reindex将全部 Argilla 实体重新索引到搜索引擎中。后台任务 workerpython -m argilla_server worker启动 RQ 后台任务 worker详见下文后台任务与 RQ Worker。数据库迁移实战自 Argilla 1.6.0 起用户、工作区信息以及Dataset的数据都存储在 SQL 数据库SQLite 或 PostgreSQL中。因此每个 Argilla 版本发布都可能需要执行数据库迁移以更新 Schema。迁移的前提条件执行迁移需要先建立数据库连接使用 SQLite 时只能在 Argilla 服务器运行所在机器上执行迁移命令。使用 PostgreSQL 时可以在任意能访问 PostgreSQL 数据库的机器上执行只需设置ARGILLA_DATABASE_URL环境变量为数据库 URL。数据库 URL 的解析逻辑位于 settings.py未配置ARGILLA_DATABASE_URL时默认使用sqliteaiosqlite:///~/.argilla/argilla.db?check_same_threadFalse若 URL 为sqlite前缀会被自动替换为sqliteaiosqlite驱动postgresql前缀则替换为postgresqlasyncpg驱动。查看数据库版本database revisions列出可用的数据库迁移版本python -m argilla_server database revisions该命令会输出三部分信息以下为 README 记录的示例输出Tagged revisions按 Argilla 版本号标记的迁移版本Alembic revisions完整的迁移链每个迁移的父版本 → 当前版本、描述与脚本文件名Current revision当前数据库所处的迁移版本。INFO [alembic.runtime.migration] Context impl SQLiteImpl. INFO [alembic.runtime.migration] Will assume non-transactional DDL. Tagged revisions ----------------- • 1.7 (revision: 1769ee58fbb4) • 1.8 (revision: ae5522b4c674) • 1.11 (revision: 3ff6484f8b37) • 1.13 (revision: 1e629a913727) • 1.17 (revision: 84f6b9ff6076) • 1.18 (revision: bda6fe24314e) • 1.28 (revision: ca7293c38970) • 2.0 (revision: 237f7c674d74) Alembic revisions ----------------- 45a12f74448b - 237f7c674d74 (head), add status column to records table d00f819ccc67 - 45a12f74448b, add distribution column to datasets table ca7293c38970 - d00f819ccc67, update responses user_id foreign key bda6fe24314e - ca7293c38970, change suggestions score column to json 7850ab5b42d9 - bda6fe24314e, create vectors table 84f6b9ff6076 - 7850ab5b42d9, create vectors settings table b8458008b60e - 84f6b9ff6076, add last_activity_at to datasets table 7cbcccf8b57a - b8458008b60e, add allow_extra_metadata column to datasets table 1e629a913727 - 7cbcccf8b57a, create metadata_properties table 3fc3c0839959 - 1e629a913727, fix suggestions type enum values 8c574ada5e5f - 3fc3c0839959, create suggestions table 3ff6484f8b37 - 8c574ada5e5f, update_enum_columns ae5522b4c674 - 3ff6484f8b37, add metadata column to records table e402e9d9245e - ae5522b4c674, create fields table 8be56284dac0 - e402e9d9245e, create responses table 3a8e2f9b5dea - 8be56284dac0, create records table b9099dc08489 - 3a8e2f9b5dea, create questions table 1769ee58fbb4 - b9099dc08489, create datasets table 82a5a88a3fa5 - 1769ee58fbb4, create workspaces_users table 74694870197c - 82a5a88a3fa5, create workspaces table base - 74694870197c, create users table Current revision ---------------- Current revision(s) for sqlite:////Users/root/.argilla/argilla.db?check_same_threadFalse: Rev: 237f7c674d74 (head) Parent: 45a12f74448b Path: /Users/root/argilla/argilla-server/src/argilla_server/alembic/versions/237f7c674d74_add_status_column_to_records_table.py add status column to records table Revision ID: 237f7c674d74 Revises: 45a12f74448b Create Date: 2024-06-18 17:59:36.992165需要说明的是上述示例输出记录于 README 撰写时点仅反映截至 2.0 的迁移状态。当前仓库源码中的版本标记已经进一步扩展database.py 中的TAGGED_REVISIONS已包含2.4revision660d6c6b3360与2.5revision580a6553186f对应 alembic/versions 目录中的660d6c6b3360_add_metadata_column_to_datasets_table.py、580a6553186f_add_datasets_users_table.py以及6ed1b8bf8e08_create_webhooks_table.py等新迁移脚本实际输出请以你本机命令运行结果为准。应用全部迁移database migrate不带任何参数调用时会应用所有未执行的迁移python -m argilla_server database migrate迁移到指定版本--revisiondatabase migrate也支持通过--revision选项迁移到指定版本参数可以是 revision 名称哈希也可以是 Argilla 版本号python -m argilla_server database migrate --revision 2.0从 cli/database/migrate.py 的源码可以理解其内部逻辑命令会先读取当前数据库版本再通过TAGGED_REVISIONS将版本号映射为具体的 revision 哈希随后比较目标 revision 与当前版本的关系自动决定执行alembic upgrade向前迁移还是downgrade回退。[!WARNING] 将数据库迁移到比当前版本更旧的 revision 会把数据库回退到该版本的状态可能导致数据丢失。回退操作需要格外谨慎务必提前备份。用户管理命令argilla_server database users命令组用于管理 Argilla 服务器数据库中的用户实现见 cli/database/userspython -m argilla_server database users create在数据库中创建新用户。python -m argilla_server database users create_default创建默认用户。python -m argilla_server database users migrate将旧YAML文件中的用户迁移到数据库。python -m argilla_server database users update更新数据库中的用户。其中create_default对应的默认凭据定义在 constants.pyDEFAULT_USERNAME argilla DEFAULT_PASSWORD 1234 DEFAULT_API_KEY argilla.apikeycreate命令见 create.py支持指定用户名、密码、API Key最小长度 8与工作区update命令用于修改用户角色。这套默认用户机制也是pdm server-dev组合命令中创建默认用户步骤的实现基础。搜索引擎管理与重索引argilla_server search-engine命令组用于管理 Argilla 使用的搜索引擎默认是 Elasticsearch见 settings.py 中search_engine elasticsearch与elasticsearch http://localhost:9200的默认配置也支持 OpenSearchpython -m argilla_server search-engine reindex该命令会把所有 Argilla 实体数据集、记录等重新索引进搜索引擎通常用于搜索引擎数据丢失或索引损坏后的恢复场景。后台任务与 RQ WorkerArgilla 使用 RQ 作为后台任务管理器RQ 依赖 Redis 来存储和检索待处理任务的信息。Redis 连接默认地址为redis://localhost:6379/0见 settings.py。确保系统已正确安装并运行 Redis 后启动 RQ workerpython -m argilla_server worker从 cli/worker.py 源码可以看到该命令底层使用 RQ 的WorkerPool并支持两个可选参数--queues要监听的队列名称列表默认监听default与high两个队列定义于 jobs/queues.py 的DEFAULT_QUEUE与HIGH_QUEUE。--num-workers启动的 worker 数量默认2。后台任务机制用于处理耗时操作例如数据集记录的批量导入与导出接口POST /api/v1/datasets/{dataset_id}/import、POST /api/v1/datasets/{dataset_id}/export均返回202 Accepted与JobSchema参见 api/handlers/v1/datasets/datasets.py。服务依赖与服务端整体架构小结综合上述内容可以勾勒出 Argilla Server 的运行时依赖与架构全貌数据库必需默认 SQLite~/.argilla/argilla.db生产环境可改用 PostgreSQL通过ARGILLA_DATABASE_URL配置。搜索引擎默认 Elasticsearch可切换 OpenSearch承载记录检索、语义搜索与排序默认http://localhost:9200。Redis RQ后台任务处理导入导出等异步任务默认redis://localhost:6379/0。HTTP 层FastAPI 应用argilla_server:app暴露/api/v1路由覆盖数据集、记录、字段、问题、响应、建议、元数据、向量设置、用户、工作区、Webhook、OAuth2 与令牌认证等资源路由定义见 api/handlers/v1。开发阶段建议按pdm migrate→pdm server-dev的顺序初始化数据库并启动服务版本升级时先执行python -m argilla_server database revisions确认目标版本再执行python -m argilla_server database migrate完成 Schema 升级生产环境则需额外部署 Elasticsearch 与 Redis并配套启动python -m argilla_server worker处理异步任务。【免费下载链接】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),仅供参考