0 个算子

Executor 工具算子参考手册#

基于 executor 服务代码(executor/executor/tools/)与 executor/docs/API.md 整理。
整理日期:2026-09-23。算子真值以运行时 GET /tools 为准,本文档为静态快照,共 112 个算子。
本文档已经过自动化对账(reconcile_docs.py 对照注册表运行时导出的 tools-truth.json)与多路人工复核。

一、API 总览#

1.1 服务信息#

1.2 HTTP 端点#

端点用途
GET /healthz存活检查,返回 {"ok": true}
GET /readyz就绪检查(runtime / 工具注册表 / DB 连通性 / 必需 schema),失败返回 503
GET /tools返回已注册工具目录与契约元数据(name / argument_schema / reads_global / reads_session / writes_session 等)
POST /execute统一算子调用入口
POST /audit/traces、GET /audit/traces/{trace_id}Manager audit trace 存取(非工具端点)
GET /renders/{filename}读取渲染/报告产物(非工具端点)
POST /uploadtoken-gated 文件上传入口(非工具端点);响应只含 ok / filename / session_id / size_bytes,不暴露服务端本地路径

1.3 调用约定(POST /execute)#

请求体:

{
  "request_id": "req_demo_001",
  "session_id": "11111111-1111-4111-8111-111111111111",
  "tool_name": "io.load_layer",
  "arguments": { "source": "admin.divisions" }
}

请求头:配置 EXECUTOR_EXECUTE_TOKEN 后必须携带 X-Execute-Token;公共部署应设 EXECUTOR_EXECUTE_ALLOW_UNAUTHENTICATED=0。客户端前端不要直接调用 /execute,应经 ai-core/网关编排。

响应外壳(成功):

{ "request_id": "...", "tool_name": "...", "ok": true, "result": {}, "error": null, "meta": {} }

响应外壳(失败):

{ "request_id": "...", "tool_name": "...", "ok": false, "result": null,
  "error": { "code": "INVALID_ARGUMENT", "message": "..." }, "meta": null }

1.4 统一错误码#

错误码常见场景
INVALID_ARGUMENTsource 未带 schema、过滤列不存在、layer_id 不存在、参数越界
TOOL_NOT_FOUND调用了未注册算子
PERMISSION_DENIED越权访问其他 session schema
DB_ERROR数据库连接或查询失败
INTERNAL_ERROR服务内部错误
EXTERNAL_DEPENDENCY_ERROR外部依赖失败(HTTP 502),如语义检索的 embedding 服务不可用

1.5 通用规则#

1.6 文档结构约定#


二、算子总目录(112)#

类别算子前缀数量
系统与数据加载system. / schema.columns / io.load_layer / stats.row_count / rows.preview6
模糊检索与地标io.fuzzy_search_poi / geo.locate_landmark / schema.semantic_search / tools.semantic_search4
行级排序rows.rank_*2
无状态几何计算geo.*(geometry_tools)9
会话空间叠加geo.*(vector spatial)+ vector.aggregate_geometry8
矢量几何分析vector.*(无状态)5
Phase8 固定样本vector.extract_* / vector.join_* / vector.split_* / topo.snap_* / topo.delete_holes5
坐标转换coord.*7
格式转换convert.*2
测量measure.*6
几何生成gen.*7
拓扑检查修复topo.*(topology)5
聚类cluster.*2
密度 / 插值 / 热点density.* / interp.* / hotspot.*5
扩散模拟与代理模型diffusion.* / surrogate.*3
选址适宜性suitability.*1
网络分析network.*6
空间统计与回归spatial.* / regression.* / residual.*5
统计工具stats.*(其余)6
渲染render.*8
栅格与地形raster.* / terrain.* / overlay.*6
数据摄取ingest.*3
时序知识图谱tkg.*1

三、系统与数据加载算子#

3.1 system.echo#

{ "message": "ok", "arguments": { "...": "原样回显" } }

3.2 system.cleanup_session#

{
  "session_id": "11111111-1111-4111-8111-111111111111",
  "target_schema": "session_11111111-1111-4111-8111-111111111111",
  "dropped_tables": 1,
  "dropped_rasters": 2,
  "dropped_uploads": 3
}

3.3 schema.columns#

参数类型必填默认说明
sourcestring是—必须是 schema.table 形式,且属于只读核心 schema

3.4 io.load_layer#

参数类型必填默认说明
sourcestring是—schema.table,仅只读核心 schema(如 admin.divisions、admin.shapes、poi.categories);不允许裸表名或 session schema
filtersobject否—等值过滤 column = value;key 为真实列名,value 为标量(string/int/float/bool)
contains_filtersobject否—模糊包含过滤;value 必须是非空字符串
in_filtersobject否—标量列多值匹配;value 为非空标量数组
array_contains_filtersobject否—数组列重叠匹配(overlap,&&,任一共同元素即命中);value 为非空标量数组;列必须是数组列

3.5 stats.row_count#

参数类型必填默认说明
layer_idstring是—必须来自同一 session_id 下成功产出的图层句柄

3.6 rows.preview#

参数类型必填默认说明
layer_idstring是—同会话 layer 句柄
limitint否20范围 1–100
offsetint否0≥0;配合 limit 分页,建议搭配 order_by 保证确定性
columnsstring[]否—不传默认返回非几何列;显式请求几何列时返回 GeoJSON 结构
order_bystring否—排序列名
order_descbool否false仅 order_by 提供时生效

四、模糊检索与地标算子#

4.1 io.fuzzy_search_poi#

参数类型必填默认说明
sourcestring是—schema.table,表需有 name 文本列(有 pg_trgm 索引最佳)
name_querystring是—自由文本,容错匹配
similarity_thresholdfloat否0.30–1,越低召回越宽
filtersobject否—等值过滤,同 io.load_layer.filters
array_contains_filtersobject否—数组列重叠过滤,空数组非法
limitint否201–100,按相似度降序

4.2 geo.locate_landmark#

参数类型必填默认说明
sourcestring否poi.facilities表需暴露 name/geom,可选 adcode/address/typecodes
name_querystring是—地标名(pg_trgm 容错)
region_hintobject否—等值过滤缩小范围,如 {"adcode": "410102"}
prefer_categoriesstring[]否—typecode 前缀(作用于 typecodes 数组列),提供时非空
similarity_thresholdfloat否0.30–1
candidate_limitint否101–100,返回的候选数
参数类型必填默认说明
querystring是—意图文本,如"咖啡厅""中原区",非空
sourceenum是—仅 poi.categories 或 admin.divisions
top_kint否5返回 Top-K(服务端 cap 到 20)
参数类型必填默认说明
querystring是—非空,自然语言意图,如"找密集奶茶店"
top_kint否5cap 1–20

五、行级排序算子#

5.1 rows.rank_by_distance#

参数类型必填默认说明
layer_idstring是—源点图层(通常来自 io.load_layer)
centerfloat[2]是—[lon, lat],WGS-84;lon∈[-180,180],lat∈[-90,90]
max_distance_metersfloat否2000>0,超出丢弃
limitint否101–100
include_columnsstring[]否—缺省携带全部非几何列;提供时非空;含未知列报 INVALID_ARGUMENT

5.2 rows.rank_layer_by_distance#

参数类型必填默认说明
source_layer_idstring是—源点图层
target_layer_idstring是—目标点图层
source_id_columnstring是—源要素标识列
target_id_columnstring是—目标要素标识列
kint否11–100
max_distance_metersfloat否100000>0
aggregateenum否nonenone:返回 K 对最近邻;avg:每源返回 K 近邻平均距离

六、无状态几何算子(geo.*)#

共同特点:直接使用坐标值或 GeoJSON geometry;不读写数据库;失败统一 INVALID_ARGUMENT。共同限制:geo.transform_crs v1 仅支持 EPSG:4326 ↔ EPSG:3857;不支持 GeometryCollection;几何输入必须是合法 GeoJSON geometry 对象。

6.1 geo.calculate_distance#

参数类型必填默认说明
lat1float是—起点纬度,-90–90
lon1float是—起点经度,-180–180
lat2float是—终点纬度,-90–90
lon2float是—终点经度,-180–180

6.2 geo.calculate_bearing#

参数类型必填默认说明
lat1float是—-90–90
lon1float是—-180–180
lat2float是—-90–90
lon2float是—-180–180

6.3 geo.get_bounding_box#

6.4 geo.get_centroid#

6.5 geo.is_point_in_polygon#

6.6 geo.transform_crs#

参数类型必填默认说明
geometryobject是—合法 GeoJSON geometry
target_epsgint是—目标 EPSG,正整数
source_epsgint否4326源 EPSG,正整数

6.7 geo.simplify_geometry#

6.8 geo.line_interpolate_point#

6.9 geo.line_substring#


七、会话空间叠加算子(geo.* / vector.aggregate_geometry)#

共同特点:读会话 + 写会话——读会话图层,结果物化为新会话图层,返回 {layer_id, source, rows, operation, ...参数回显} + meta(rows/columns/geom_type/crs)。所有 layer_id 必须属于当前会话。

7.1 geo.buffer#

7.2 geo.clip#

7.3 geo.intersects#

7.4 geo.spatial_join#

7.5 geo.difference#

7.6 geo.union#

7.7 geo.dissolve#

7.8 vector.aggregate_geometry#

参数类型必填默认说明
layer_idstring是—待聚合图层
group_by_columnstring是—分组列
statsenum[]是—子集 ["area", "length"];area=平方米(面),length=米(线)
mask_layer_idstring否—提供时先 ST_Intersection(layer, mask),再按 mask 的 group_by_column 分组(overlay 模式)

八、矢量几何分析算子(vector.*)#

8.1 vector.convex_hull#

8.2 vector.area_calculate#

8.3 vector.length_calculate#

8.4 vector.multi_to_single#

8.5 vector.merge_layers#


九、Phase8 固定样本算子#

这组算子面向固定数据样本的确定性核验流程,参数中携带的 profile/版本字段由服务端核验,不代表审批或身份依据。均为读会话 + 写会话,输出含 input_validation 证据块。

9.1 vector.extract_by_location#

9.2 vector.join_attributes_by_location#

参数类型必填默认说明
target_layer_idstring是—目标图层
join_layer_idstring是—固定行政区图层
join_fieldsstring[]是—≥1,固定字段 name、level、adcode
prefixstring否admin_连接字段前缀
predicateenum—within固定
methodenum—first_match固定
discard_nonmatchingbool否false是否从主输出移除未匹配要素
emit_unmatched_layerbool否false是否另存未匹配图层

9.3 topo.snap_geometries_to_layer#

9.4 topo.delete_holes#

9.5 vector.split_with_lines#


十、坐标转换算子(coord.*)#

10.1 coord.utm_zone#

10.2 coord.dms_to_decimal#

参数类型必填默认说明
degreesint是—0–180,度分量
minutesint是—0–59,分分量
secondsfloat是—0–<60,秒分量
directionenum是—N/S/E/W(大小写不敏感,自动去空白转大写)

10.3 coord.decimal_to_dms#

10.4 coord.wgs84_to_gcj02 / 10.5 coord.gcj02_to_wgs84 / 10.6 coord.gcj02_to_bd09 / 10.7 coord.bd09_to_gcj02#


十一、格式转换算子(convert.*)#

11.1 convert.geojson_to_wkt#

11.2 convert.wkt_to_geojson#


十二、测量算子(measure.*)#

注意单位约定:输出键以 _meters 结尾的使用 Haversine 大圆距离(米);以 _degrees 结尾的为坐标空间平面欧氏距离(度)。

12.1 measure.perimeter#

12.2 measure.compactness#

12.3 measure.hausdorff_distance#

12.4 measure.frechet_distance#

12.5 measure.point_to_line_distance#

12.6 measure.angle_at_vertex#


十三、几何生成算子(gen.*)#

13.1 gen.regular_grid#

参数类型必填默认说明
boundsobject是—{min_x, min_y, max_x, max_y} 四 float(度或投影单位)
cell_widthfloat是—>0,坐标单位
cell_heightfloat是—>0,坐标单位
grid_typeenum否polygonpolygon / point / line;非法值报 INVALID_ARGUMENT

13.2 gen.random_points#

13.3 gen.circle#

13.4 gen.ellipse#

13.5 gen.line_from_points#

13.6 gen.polygon_from_points#

13.7 gen.points_along_line#


十四、拓扑检查与修复算子(topo.*)#

14.1 topo.check_validity#

14.2 topo.check_layer_validity#

14.3 topo.find_overlaps#

14.4 topo.repair_layer#

14.5 topo.fix_winding#

topo.snap_geometries_to_layer 与 topo.delete_holes 属于 Phase8 固定样本组,见 §九。

十五、聚类算子(cluster.*)#

15.1 cluster.dbscan#

15.2 cluster.kmeans#


十六、密度 / 插值 / 热点算子#

16.1 density.grid_count#

16.2 density.kde#

16.3 hotspot.getis_ord_gi_star#

16.4 interp.idw#

16.5 interp.tin#


十七、扩散模拟与代理模型#

17.1 diffusion.gaussian_plume#

参数类型必填默认说明
source_layer_idstring二选一—点图层句柄,取第一个点为排放源
source_lonfloat二选一—沙箱模式经度(-180–180),须与 source_lat 成对
source_latfloat二选一—沙箱模式纬度(-90–90)
emission_rate_g_sfloat是—>0,排放速率 Q(g/s)
wind_speed_10mfloat是—>0,10 m 参考风速(m/s)
wind_direction_degfloat是—0–360,气象风向(来风方向,0=N,90=E)
molar_mass_g_molfloat是—>0,气体摩尔质量(SO2=64.07,Cl2=70.90)
cell_size_metersfloat是—>0,浓度网格边长
stability_classstring否DPasquill 稳定度 A–F(非法值静默归一为 D)
urbanbool否false城市下垫面
release_height_mfloat否0.0≥0,有效源高 H
receptor_height_mfloat否0.0≥0,受体高度 z
temperature_kfloat否293.15>0,环境温度
pressure_pafloat否101325.0>0,环境气压
extent_metersfloat否2000.0>0,以源为中心的正方形网格半宽
max_cellsint否5000>0,网格硬上限
release_duration_sfloat否0.0≥0,总释放时长(瞬态模式)
observation_times_sfloat[]否—观测时刻列表(秒);提供时每时刻出一帧,否则单帧稳态
observation_time_sfloat否—≥0,单一观测时刻(TemporalDriver 注入;observation_times_s 设置时被忽略)
frame_step_sfloat否60.0>0,动画帧间隔(驱动 puff 发射步长)
max_framesint否60>0,瞬态帧数硬上限

17.2 surrogate.delivery_plume_eval#

17.3 surrogate.delivery_plume_predict#

参数类型必填默认说明
filenamestring是—上传的 surrogate zip 文件名
sample_idsstring[]否—显式样本 ID 列表(来自 test_data/index.csv)
max_samplesint否—>0 且 ≤500,预测前 N 个选中样本
output_prefixstring否delivery_plume_predictions1–64 字符,^[A-Za-z0-9_.-]+$,产物 zip 的安全文件名前缀
tolerancefloat否1e-3>0,对照包内报告预测的最大绝对漂移容差

十八、选址适宜性#

18.1 suitability.opportunity_score#

参数类型必填默认说明
demand_layer_idstring是—需求网格(典型:居住人口代理 KDE)
competition_layer_idstring是—竞争网格(典型:现有目标门店 KDE)
accessibility_layer_idstring否—可达性网格(如路网密度)
demand_columnstring否density—
competition_columnstring否density—
accessibility_columnstring否—缺省时依次推断 count、density
weightsobject否见说明{demand: 0.55, accessibility: 0.10, competition: -0.25},各项 ∈ [-1, 1]
top_kint否5≤50

十九、网络分析算子(network.*)#

基于 pgRouting。所有 graph_layer_id 来自 network.build_graph。均为读会话 + 写会话。

19.1 network.build_graph#

19.2 network.shortest_path#

19.3 network.service_area#

19.4 network.connectivity#

19.5 network.od_matrix#

参数类型必填默认说明
graph_layer_idstring是—build_graph 输出
originsobject[]至少其一—[{id?, lon, lat}],1–50 个
destinationsobject[]至少其一—同上
origins_layer_idstring至少其一—起点图层
destinations_layer_idstring至少其一—终点图层
origin_id_columnstring否—起点标识列
destination_id_columnstring否—终点标识列
max_originsint否50≤50
max_destinationsint否50≤50

19.6 network.batch_shortest_path#


二十、空间统计与回归#

20.1 spatial.morans_i#

20.2 spatial.lisa_clusters#

20.3 regression.ols#

20.4 regression.gwr#

20.5 residual.morans#


二十一、统计工具算子(stats.*)#

21.1 stats.layer_extent#

21.2 stats.basic_stats#

21.3 stats.histogram#

21.4 stats.classify_jenks#

21.5 stats.percentile#

21.6 stats.per_capita#

参数类型必填默认说明
layer_idstring是—计数所在会话图层
value_columnstring是—待归一化的计数/密度列
population_columnstring否—人口列(优先来源)
population_totalfloat否—人口总数(次要来源)
perfloat否10000每单位基数(如每万人)

二十二、渲染算子(render.*)#

产物经 GET /renders/{filename} 读取。静态图产物信息键:{path, filename, url, size_bytes, width_px, height_px, base64_thumbnail};HTML/GIF 产物相应返回 {path, filename, url, format, ...}。

22.1 render.map#

参数类型必填默认说明
layer_idsstring[]是—≥1,会话图层
titlestring否——
width_pxint否1024>0(可被服务配置覆盖)
height_pxint否768>0
basemapbool否false叠加 CartoDB Positron 底图(contextily)
hide_axisbool否true—
show_legendbool否false显式请求时显示简单图例

22.2 render.choropleth#

22.3 render.heatmap#

22.4 render.contour#

22.5 render.webmap#

22.6 render.time_slider#

参数类型必填默认说明
framesobject[]是—≥1,每项 {t: float 秒, layer_id: string}
value_columnstring否concentration_ppm每帧着色数值列;全局 vmax 保证帧间可比
min_valuefloat否0.0≤此值的格元被丢弃
titlestring否——
tilesstring否CartoDB positron—
zoom_startint否12≤20
periodstring否PT1MISO-8601 帧间隔
transition_msint否400帧过渡毫秒

22.7 render.frame_sequence#

22.8 render.analysis_report#


二十三、栅格与地形算子(raster.* / terrain.* / overlay.*)#

23.1 raster.load#

23.2 raster.zonal_stats#

23.3 raster.resample#

23.4 raster.reclassify#

23.5 terrain.slope#

23.6 overlay.weighted#


二十四、数据摄取算子(ingest.*)#

24.1 ingest.load_vector#

参数类型必填默认说明
filenamestring是—经 POST /upload 保存的会话文件名,不允许路径分隔符
source_crsstring否—仅在文件缺少内置 CRS 时使用;不覆盖文件自带定义
coordinate_systemstring否wgs84源坐标语义:wgs84/gcj02/bd09;后两者纠偏至 WGS84
layerstring否—容器内精确图层名;GPKG 必须显式选择
preserve_source_crsbool否false保留文件原始 CRS;默认转 EPSG:4326;不能与 gcj02/bd09 纠偏同用(冲突报 VECTOR_CRS_MODE_CONFLICT)

24.2 ingest.load_raster#

24.3 ingest.load_table#

参数类型必填默认说明
filenamestring是—上传的会话文件名(禁止路径分隔符)
delimiterstring否—(自动)自动探测:.txt/.dat 空白、.csv 逗号、.tsv 制表符;Excel 忽略
header_rowint否—(自动推断)0 基表头行;-1 表示无表头(此时列名为 "0", "1", ...)
skip_rowsint否0≥0,解析前跳过的前导行数(banner)
origin_lonfloat四件套—-180–180,源点经度(WGS-84)
origin_latfloat四件套—-90–90,源点纬度
distance_columnstring四件套—距源点距离列(米,如 Dist)
azimuth_columnstring四件套—方位角列(北起顺时针度,如 PHIC,负值会被归一化)

二十五、时序知识图谱#

25.1 tkg.query_events#

参数类型必填默认说明
entitystring否—实体名(如"台风利奇马"),匹配 entity1 或 entity2
relationstring否—关系过滤,合法值(区分大小写):Act、A-kind-of、Cause、Has-a、Is-a、Located-in;非法值报 INVALID_ARGUMENT
time_startstring否—时间起点(YYYY-MM-DD,含)
time_endstring否—时间终点(YYYY-MM-DD,含)
limitint否501–500
count_onlybool否false仅返回总数(COUNT(*)),用于健康探针
{
  "events": [
    { "entity1": "...", "relation": "...", "entity2": "...",
      "event_time": "2019-08-10", "source": "...", "pack_id": "..." }
  ],
  "count": 1,
  "filters": { "entity": null, "relation": null, "time_start": null, "time_end": null, "limit": 50 }
}

附录 A:算子索引(按名称排序)#

cluster.dbscan · cluster.kmeans · convert.geojson_to_wkt · convert.wkt_to_geojson · coord.bd09_to_gcj02 · coord.decimal_to_dms · coord.dms_to_decimal · coord.gcj02_to_bd09 · coord.gcj02_to_wgs84 · coord.utm_zone · coord.wgs84_to_gcj02 · density.grid_count · density.kde · diffusion.gaussian_plume · gen.circle · gen.ellipse · gen.line_from_points · gen.points_along_line · gen.polygon_from_points · gen.random_points · gen.regular_grid · geo.buffer · geo.calculate_bearing · geo.calculate_distance · geo.clip · geo.difference · geo.dissolve · geo.get_bounding_box · geo.get_centroid · geo.intersects · geo.is_point_in_polygon · geo.line_interpolate_point · geo.line_substring · geo.locate_landmark · geo.simplify_geometry · geo.spatial_join · geo.transform_crs · geo.union · hotspot.getis_ord_gi_star · ingest.load_raster · ingest.load_table · ingest.load_vector · interp.idw · interp.tin · io.fuzzy_search_poi · io.load_layer · measure.angle_at_vertex · measure.compactness · measure.frechet_distance · measure.hausdorff_distance · measure.perimeter · measure.point_to_line_distance · network.batch_shortest_path · network.build_graph · network.connectivity · network.od_matrix · network.service_area · network.shortest_path · overlay.weighted · raster.load · raster.reclassify · raster.resample · raster.zonal_stats · regression.gwr · regression.ols · render.analysis_report · render.choropleth · render.contour · render.frame_sequence · render.heatmap · render.map · render.time_slider · render.webmap · residual.morans · rows.preview · rows.rank_by_distance · rows.rank_layer_by_distance · schema.columns · schema.semantic_search · spatial.lisa_clusters · spatial.morans_i · stats.basic_stats · stats.classify_jenks · stats.histogram · stats.layer_extent · stats.per_capita · stats.percentile · stats.row_count · suitability.opportunity_score · surrogate.delivery_plume_eval · surrogate.delivery_plume_predict · system.cleanup_session · system.echo · terrain.slope · tkg.query_events · tools.semantic_search · topo.check_layer_validity · topo.check_validity · topo.delete_holes · topo.find_overlaps · topo.fix_winding · topo.repair_layer · topo.snap_geometries_to_layer · vector.aggregate_geometry · vector.area_calculate · vector.convex_hull · vector.extract_by_location · vector.join_attributes_by_location · vector.length_calculate · vector.merge_layers · vector.multi_to_single · vector.split_with_lines


附录 B:校验与对账#

本文档的正确性通过两条独立途径验证:

1. 自动对账:export_tool_truth.py 以与服务启动完全相同的方式实例化工具注册表,导出 112 个算子的权威 JSON Schema(tools-truth.json);reconcile_docs.py 逐算子比对文档中的参数名、必填性、默认值、会话属性与 schema 的一致性。 2. 多路人工复核:4 组独立校验(基础与几何 / 矢量与拓扑 / 分析与统计 / 渲染与摄取)逐字段对照 handler 实现核实输出结构。

复核过程中同步修正了 executor/docs/API.md 的 7 处问题:失效的权威文档引用、§5.6 小节编号错误(5.5.x→5.6.x)、rows.preview 参数过时(补 offset/order_by/order_desc 与 dropped_columns 行为)、无状态几何清单遗漏 2 个算子、array_contains_filters 语义描述(现行 overlap &&)、只读 schema 清单补 tkg、错误码补 EXTERNAL_DEPENDENCY_ERROR。

没有匹配的内容,换个关键词试试。