开发指南

AxData 数据源、采集器、数据集与 UI 开发规范

本文说明 AxData 数据源接口、采集器、数据集声明、Parquet/DuckDB 分工和 Web UI 的开发规范。新增接口、采集器、数据集或页面改版时,应先对照本文确认能力边界、命名、页面口径和验证规则。

最后更新:2026-07-04。

一句话边界

能力边界

当前 AxData 已经形成三类能力:

能力当前入口是否请求源端是否写数据说明
数据源接口接口页、client.call(...)POST /v1/request/{interface}默认否展示输入参数、输出字段、静态真实示例;适合临时查询和调试。
采集器采集页、Collector API、Collector CLI创建 task、run、写 Parquet、记录 run history 和 quality。
数据查询数据页、client.query(...)POST /v1/query只读已入库 Parquet/DuckDB 视图,不临时请求源端;数据页只列已有本地输出的数据集。

当前约束:

命名规范

页面与文档名称

代码标识

名称用途示例
provider_id数据源 Provider 身份axdata.source.eastmoney
source_code数据源短代码eastmoney
interface_name源端接口名eastmoney_limit_up_pool
collector_plugin_id采集器插件身份axdata.collector.tdx
collector_id / collector_name采集器能力名stock_kline_daily_tdx
task_id用户创建的采集任务daily_refresh
dataset_id采集产出的数据集daily
table查询层表名daily

原则:

数据源 Provider 开发规范

数据源 Provider 负责把一个上游源接入 AxData 的接口目录。它的核心成果是“可调用接口”,不是本地数据文件。

必须声明

每个数据源接口必须声明:

运行时接口目录当前使用单个 example。插件 manifest 协议如果写 examples 数组,必须选择一个主样例同步为运行时 example,避免接口页不知道展示哪份样例。

Web 左侧接口目录以 Provider manifest / Registry 返回的 menu_path 为事实源。插件必须声明完整路径;Web 不为具体数据源硬编码接口树。小源可以用 ["巨潮", "公告数据"],大源应声明完整源内分层,例如 ["通达信", "股票数据", "基础数据"]

接口页中文内容也以插件 / Provider manifest / Registry 为事实源。Web request 接口页只做通用渲染,不再用旧静态 catalog 为具体接口补标题、说明、参数示例、真实样例或参考表。summary_zhdescription_zhparams_note_zhparams_example_zh 负责页面文案;parametersfieldsexample.responsereference_sections 负责事实数据。

输入参数

参数必须写清楚:

示例:

RequestParameter(
    "trade_date",
    "string",
    False,
    "Trade date.",
    "交易日期,YYYYMMDD 或 YYYY-MM-DD,默认今天。",
)

输出字段

字段必须写清楚:

特别注意:

静态真实示例

接口页示例必须是“已经真实请求过的静态快照”,页面打开时不应为了展示示例再实时请求源端。

规范:

当静态样例生成失败时:

本地与远程调用

本地 SDK:

远程 SDK/API:

接口页 UI 只应在远程调用说明里提示 token,不要让用户误以为本地 SDK 也必须传 token。

采集器开发规范

采集器负责把数据生产成本地资产。只要叫采集,就必须有 task/run 元数据、输出文件和质量结果。

独立性

新采集器必须独立:

采集器可以复用公共工具库、字段定义和存储 writer,但不能把接口 Provider 当作采集器身份。

必须声明

每个采集器必须声明:

字段说明
collector_id采集器能力名。
collector_plugin_id采集器所属插件。
display_name_zh用户看到的中文名。
dataset_id默认产出的数据集。
runner_entry运行入口。
resource_group资源组,例如 tdxhttp
params_schema创建任务时可配置的输入参数。
output输出层、格式、路径、写入策略。
quality主键、必填列、日期字段、数值检查等质量规则。
required_datasets运行前必须存在的基础数据,例如交易日历。

任务参数

采集页应区分三类参数:

参数区作用例子
基本参数任务名、输出格式、路径、并发档位、资源配置task name、formats、server_count
输入参数采集范围和源端请求参数code、start_date、end_date、period
输出参数字段、写入策略、数据集说明fields、dataset_id、write_mode、partition_by

创建任务按钮应位于输入/输出配置之后。用户先配置参数,再创建任务。手动采集和定时采集应在任务列表中操作。

调度语义

采集器定时任务必须写清楚是自然日还是交易日。

建议:

并发与长连接

并发配置应有默认档位,也支持自定义。

推荐 UI:

说明:

运行记录

采集器 run history 必须展示:

删除 run history 只删除历史记录,不删除任务配置和已采集数据。删除数据集才删除对应本地数据目录。

数据集声明规范

数据集声明是采集器和数据页之间的契约。没有数据集声明,数据页只能靠猜目录和猜字段,采集器变多后会不可控。

必须声明的字段

每个采集器产出的数据集应声明:

字段说明
dataset_id稳定数据集 ID,例如 daily
display_name_zh中文名。
layerrawstagingcorefactorsnapshot
table查询表名。
schema字段名、类型、中文说明、单位。
primary_key主键字段。
date_field日期字段。
partition_by分区字段。
write_modesnapshotappendoverwrite_partitionreplace_rangeupsert_by_key
formats输出格式,parquet 必选。
storage_path预期输出路径。
queryable是否允许进入查询层;不能单独决定数据页展示。
duckdb_cache是否支持 DuckDB 查询缓存。

数据集声明只是“应该怎么产出”的契约,不是“本机已经有数据”的证明。Data Browser / 数据页只能从 CollectorRun.output_paths、写入 metadata、Downloader 日志或真实存在的 Parquet 路径发现 dataset;插件 manifest 或 CollectorSpec 里只声明了 dataset_idqueryablestorage_path,但本地没有输出路径或文件时,不应进入数据页列表,也不应暴露删除 dataset 操作。

多表与多文件形态

采集器可以产出不同形态的数据:

形态例子推荐声明
单表单文件小型主数据 latestdataset_id + table + snapshot
一天一个文件日线、复权、榜单partition_by=["trade_date"],路径下 YYYYMMDD.parquet
一只股票一个文件个股大历史或高频数据partition_by=["instrument_id"] 或明确 symbol layout
多张表财务报表、复杂专题一个 collector 可以声明多个 dataset outputs
多格式导出Parquet + CSV + DuckDBParquet 是主数据,其他是导出/缓存

标准路径:

data/core/table=daily/parquet/20260703.parquet
data/core/table=adj_factor/parquet/20260703.parquet
data/snapshot/table=tdx.stock_codes/parquet/latest.parquet

当前标准优先采用“格式目录下按天文件”的方式,例如:

data/core/table=adj_factor/parquet/20260703.parquet

旧式 trade_date=20260703/*.parquet 目录可以继续读取兼容,但新采集器不应优先采用。

删除语义

删除必须说清楚范围:

删除动作删除什么不删除什么
删除 run history单条运行记录任务配置、数据文件
删除 task用户创建的任务配置已采集数据、run history 可按产品策略保留或标记
删除 datasetdataset 在 AxData 数据根下的本地数据目录、相关数据索引插件代码、接口、采集器定义
删除缓存缓存目录或 DuckDB 查询缓存Parquet 正式数据

删除数据集前必须弹窗确认,并显示将删除的根目录。

Parquet、CSV、JSON 与 DuckDB

Parquet

Parquet 是默认且必须支持的正式数据格式。

CSV

CSV 是可选导出格式。

JSON / JSONL

JSON/JSONL 只作为兼容或调试输出。

DuckDB

DuckDB 不是 Parquet 的备份,也不是另一种必须保存的数据格式。

DuckDB 在 AxData 里的角色:

如果页面展示 DuckDB,应命名为:

DuckDB 查询缓存

展示规则:

核心说明:

数据页规范

数据页回答的是:“本机已经有什么数据,可以怎么查?”

数据页不应请求源端,不应创建采集任务。

数据页列表只展示已经有本地数据实例的 dataset。所谓“本地数据实例”至少应能定位到 AxData 数据根下的输出路径、写入 metadata、run/downloader output 记录或真实 Parquet 文件;单纯的插件声明、CollectorSpec 输出契约或 queryable=true 不能让一个空 dataset 出现在数据页。

Dataset 列表

必须展示:

Dataset 详情

必须展示:

预览

预览必须说明:

接口页 UI 规范

接口页回答的是:“这个源端接口怎么临时调用,返回什么?”

必须包含:

输入参数:

输出字段:

真实样例:

远程 token:

采集页 UI 规范

采集页回答的是:“如何把数据保存到本机,并管理任务?”

页面结构:

  1. 基本参数。
  2. 输入参数。
  3. 输出参数。
  4. 创建任务。
  5. 任务列表。
  6. 运行进度。
  7. 最近记录。
  8. 日志/诊断。

基本参数

包含:

输入参数

输入参数默认展开。

输出参数

输出参数可以默认展开,尤其是页面视觉上需要和输入参数平衡时。

包含:

输出字段说明优先来自 CollectorSpec 的 output / quality / 数据集声明。采集器声明了关联接口时,可以复用 runtime interface catalog 的 fields,但不能由 Web 为某个采集器硬编码字段口径。

创建任务

任务列表

任务列表应是紧凑的一行式表格或列表,不应堆很多无意义卡片。

每行必须包含:

文案:

运行进度

采集进度适合放在任务列表下方或最近记录上方。

必须展示:

最近记录

默认展示最近 3 条即可。

每条记录应支持单独删除。删除前需要确认。删除 run history 不删除数据文件。

插件页 UI 规范

插件页回答的是:“当前安装了哪些能力,它们提供什么接口和采集器?”

必须区分:

插件卡片的“导出 AXP”只导出插件安装包。导出内容不得包含已采集数据、metadata 数据库、任务历史、run history、日志、缓存、AxData API token 或第三方数据源凭据;导入后仍按 manifest 的 Provider / Collector 能力声明进入对应 Registry。

所有诊断项都要有中文解释。不能只显示英文 key。

删除插件时必须弹窗说明:

开始页规范

开始页是开发文档入口,不是营销页。

建议栏目:

每个栏目要短,但能点进详细文档。长内容放下方或 Markdown 文档,不挤在左侧导航。

开始页术语必须和项目一致:

验证规范

改动不同层级后,应至少执行对应检查。

文档和 UI 文案

npm run build:web

Python 契约、API、采集和存储

.venv\Scripts\python.exe -m compileall -q libs\axdata_core apps\api packages\axdata-sdk services scripts tests

重点测试

.venv\Scripts\python.exe -m pytest tests\test_external_sources.py tests\test_builtin_providers.py tests\test_provider_catalog.py -q

如果已有历史测试因为未同步的旧断言失败,应在最终说明中明确失败原因,不能假装全绿。

手动验证

npm run dev:api
npm run dev:web
curl http://127.0.0.1:8666/health
curl http://127.0.0.1:8666/v1/config
curl http://127.0.0.1:8666/v1/request/interfaces
curl http://127.0.0.1:8666/v1/plugins/collectors
curl http://127.0.0.1:8666/v1/data/datasets

维护流程

开发规范用于约束已经进入 AxData 的产品能力。新增或调整功能时,按下面流程维护文档、页面和测试:

  1. 明确改动属于数据源接口、采集器、数据集、插件管理、数据浏览或 UI 文案中的哪一类。
  2. 更新对应专题文档,并保持开始页入口、接口页、采集页和插件页的术语一致。
  3. 接口变更需要同步参数、字段、中文说明、真实样例、SDK 示例和 source_request 路由测试。
  4. 采集器变更需要同步 CollectorSpec、runner_entry、任务参数、输出 dataset、质量规则和运行状态展示。
  5. 数据集变更需要说明 schema、Parquet 路径、DuckDB 查询缓存、预览来源和删除范围。
  6. UI 变更需要检查中文文案、空状态、错误状态、加载状态和移动/桌面布局。
  7. 完成后运行本页列出的相关验证命令,并在进度文档中记录结果。

开发规范不是任务清单;它只描述 AxData 已采用的边界、命名、页面口径和验证规则。