案例库/完整蓝皮书

ADPS 企业 Agent 系统蓝皮书 · 案例报告 02

玄宿科技 GIS 数据发布 Agent:把运行经验固化成可验收管线

模型参与新管线设计,已认证管线按规则运行,真实地图请求负责最终验收。

版本
v0.4
状态
公开评审稿
发布日期
2026-07-30
案例机构
玄宿科技
行业
GIS 软件与数据服务
案例提供
熊钰柯(Yuke Xiong)

证据边界:本文记录玄宿科技 GIS 数据发布系统的项目实践。流程、失败案例和架构取舍由案例方熊钰柯提供,尚未经过独立审计。页面截图来自案例运行环境;示例契约由 ADPS 根据公开机制整理,不代表案例方实际字段名。

案例速览

项目 现场信息
业务任务 将不同格式的 GIS 数据处理后发布到 GeoServer,并生成可供业务使用的地图服务
最难发现的失败 发布接口返回成功,真实 GetMap/GetTile 请求仍可能失败;部分 ServiceException 的 HTTP 状态也是 200
核心做法 模型参与新管线设计,已认证管线在运行期按规则执行;发布后必须用真实请求和截图验收
关键运行结构 六阶段管线、磁盘事实文件、错误规则、失败卡、draft/candidate/active 生命周期
当前证据 运行控制台、知识卡、实际地图结果和案例方失败复盘
适用范围 输入类型可枚举、处理链重复、错误代价高、外部结果可以自动探测的数据发布任务

1. 先认识这条 GIS 发布链

GIS 数据发布不等于上传一个文件。系统需要识别格式,确定坐标系,处理数据,生成样式,把数据注册到 GeoServer,配置缓存,最后验证地图服务。

几个常见字段可以先用业务语言理解。

字段 在流程中的含义
workspace GeoServer 中隔离一组资源的命名空间
store 指向 PostGIS、栅格文件等真实数据源的连接
layer 对外发布和请求的地图图层
SRS 数据使用的空间参考或坐标系
bbox 数据覆盖的地理边界,浏览器据此定位和缩放

这些值在前一步产生,后一步逐值引用。名称或坐标错一位,接口可能直接失败,也可能发布出位置错误的地图。

玄宿科技的流程还跨越桌面 GIS、GDAL、PostGIS、GeoServer 和 GWC。操作顺序长期依赖工程师记忆,重复发布后很难回答“哪一次运行的哪一步出了问题”。

2. 两个现场失败改变了设计

第一个失败来自 S-57 电子海图。一组海图导入 PostGIS 后会按物标类生成上百张表,随后逐表建立 store、发布图层并组成图层组。图层组配置为 OPAQUE_CONTAINER 后,成员图层可能从 WMS 列表消失。直接请求 GetMap 返回 LayerNotDefined,HTTP 状态仍是 200。只看状态码,系统会把错误结果登记成成功。

第二个失败出现在 WMTS 瓦片请求。GetTile 返回 400,响应含有 / by zero。排查后发现 metatile 尺寸被配置为 0×0。官方文档没有说明这个取值的后果,结论来自平台实测。

两个问题分别给出了明确要求。

  1. 发布接口自报成功不能作为最终验收。
  2. 平台实测经验必须进入下一次运行能读取的规则,不能只留在操作人员记忆里。

3. 为什么运行期没有调用模型

团队评估过将 GeoServer REST API 封装为工具,再让模型运行时选择接口和参数。这个方案没有进入主链。GIS 发布的 workspacestorelayerSRSbbox 都有严格来源,模型重新生成会增加参数漂移风险。

与此同时,输入意图可以从数据签名确定。目录中包含 .000 文件时进入 S-57 管线,包含 .tif 时进入栅格管线。未匹配签名就返回明确错误。这里不需要模型猜测用户意图。

团队把开放判断放到设计期:Coding Agent 起草新管线,工程师审阅并完成首次运行,系统验证通过后再认证为 active。运行期只使用已认证规则。

案例方把这项取舍称为推理资产化。这个名称指一件具体的事:一次开放推理的结论写成管线声明和错误规则,后续高频运行直接复用。

决策 发生位置 运行期动作
输入应进入哪条已有管线 设计期定义签名 accepts
某个已知错误如何处理 失败复盘后写规则 按 signature 选择 retry、abort 或 skip
新格式如何处理 设计期由模型和人员共同完成 未认证前拒绝自动运行

“运行期零 LLM”是当前输入空间下的结果,不是系统目标,也不适合被推广为通用准则。

4. 六个阶段怎样完成一次发布

主链固定为六个阶段。每个阶段在独立子进程中运行,编排器只读取返回码、结构化输出和错误签名。

阶段 主要动作 必须落下的结果 失败时
validate 识别格式并选择 active 管线 输入签名、管线 ID、原始文件清单 无匹配管线则拒绝
process 重投影、入库或归一数据 processed_crsprocessed_bbox、处理后路径 不猜缺失坐标系
generate_sld 生成或选择样式 可追溯的样式文件 样式契约失败则停止发布
publish 调用 GeoServer REST 并配置资源 workspace、store、layer 等发布回执 过最小事实检查后才调用
viewer 生成浏览页和访问配置 可复现的服务地址和视图配置 不把页面生成当作验收
verify 发送真实请求并截图 verify_report.json、截图、请求统计 失败签名进入规则或人工复盘
GIS Agent 控制台总览,展示管线目录、数据集和六阶段进度
控制台把六个阶段映射到真实状态文件。用户可以看到当前数据集停在哪一步,也能打开相应的 metadata、viewer 和验收报告。

这条链刻意没有并行。案例方记录过两个数据集并发发布时,其中一个 verify 短暂出现零个瓦片请求成功。当前规模下,团队选择排队执行,换取可复现性。吞吐要求超过排队能力时,这项取舍需要重新评估。

5. 状态为什么落在磁盘上

阶段之间不共享进程内对象,状态通过文件传递。

run/
  metadata.json       # 输入签名、管线、处理结果和发布坐标
  run-state.json      # 当前阶段、重试次数和状态迁移
  verify_report.json  # 真实请求、截图和验收结论

validate 写识别结果,process 追加坐标系和 bbox,下游阶段读取这些值,不重新计算。案例方称这套结构为磁盘事实平面。它遵守“一个事实一个写入者”:同一个 bbox 只有一个权威生产阶段。

文件方式带来四个直接收益:进程退出后仍可审计;重跑时可以跳过已完成阶段;前端、命令行和执行代理共享文件契约;新子进程会加载磁盘上的最新实现。

代价也很具体。状态文件需要 schema 版本,前端轮询与命令行时间精度必须一致,错误前缀若被规则表使用就不能随意改名。部署进入多机、多租户和高并发写入后,文件真源需要迁移到支持事务和隔离的存储。

6. 发布后怎样证明地图真的能用

verify 不读取 publish 阶段的“成功”字段来替代验收。它请求真实的 GetMap 或 GetTile 地址,至少核对下面三项。

  1. HTTP 状态符合预期。
  2. content-typeimage/*,响应体不是 XML ServiceException。
  3. 截图或图像分析能观察到有效地图内容。
S-57 电子海图 WMTS 服务在三维地球中的实际渲染
S-57 服务的最终验收对象是业务可以使用的地图结果。发布接口成功、图层已注册和地图可用是三个不同事实。

这项机制在 ADPS 中对应外部验收探针:系统离开自身状态,到真实消费端检查结果。它适用于数据库写入、文件交付、支付回执和网页发布等无法只靠内部调用结果判定的任务。

7. 一次失败怎样进入下一次运行

运行期只处理已经认识的错误签名,动作限定为 retry、abort 和 skip。缺少空间参考、海图更新链断号等问题不允许自动补猜,系统直接停止。

新的失败由人复盘,并写成五段式失败卡。

signature: "GetTile=400 and body contains '/ by zero'"
root_cause: "metatile size was configured as 0x0"
fallback: "disable the invalid metatile setting and rerun verify"
fixed_by: "set a safe SDK default"
related_rules: ["wmts-metatile-zero"]

这张卡同时保存现象、原因、当前处置、永久修复和运行规则。后续运行不需要重新阅读整篇复盘,只读取压缩后的错误签名与动作。原始事实仍可沿 source 字段回查。

知识卡图谱视图,卡片按管线分组并关联到来源
知识卡按管线关联。运行规则消费压缩结论,工程师仍能打开卡片核对故障经过和出处。

8. 新能力怎样取得自动运行资格

新管线经过三个状态。

状态 可以做什么 进入下一状态的条件
draft 生成、修改和人工检查 人员显式触发首次完整运行
candidate 保存首跑证据,等待认证 六阶段通过,真实请求和截图验收成功
active 自动匹配输入并运行 人员确认认证

活跃管线的当前版本与认证版本不一致时,系统自动退回 candidate。一次代码修改不会沿用旧认证继续自动运行。

模型在生长期生成脚手架,人员决定是否认证,运行时只接受 active 管线。这个生命周期比“生成后直接上线”多了首跑证据和明确责任人,也比每次运行都请人批准更适合重复任务。

9. 没有运行期模型,为什么仍把它作为 Agent 案例

名称并不由是否每次调用 LLM 决定。这个系统会感知输入签名,选择能力,修改外部环境,主动验收,按错误签名回退,并通过失败卡和管线生命周期扩展能力。

它的自主范围很窄。签名空间封闭,未知输入拒绝;已接受任务必须留下可验收结果和可查询状态。若只剩一条固定脚本,没有输入识别、能力选择、外部验收和生命周期管理,把它称为 Agent 就没有额外解释价值。

10. 复制这套做法时从哪里开始

  1. 选一条每周重复发生、输入类型有限、失败可以观察的发布流程。
  2. 把完整流程拆成阶段,为每个阶段定义唯一输出和错误签名。
  3. 标出必须由程序传递的机械参数,禁止下游重新计算或由模型生成。
  4. 设计一项离开系统内部的验收,例如真实请求、回读数据库或打开交付文件。
  5. 先记录三次真实失败,再决定哪些可以进入自动 retry,哪些必须 abort。
  6. 为能力设置 draft、candidate、active,代码变更后取消旧认证。
  7. 连续运行后再评估是否需要并行、动态规划或运行期模型。

这七步不依赖 GIS。数据导入、媒体转码、模型部署、报表发布和静态网站发布都可以使用同样的骨架。

11. 失效信号与迁移边界

当前取舍 成立条件 出现这些信号时重新设计
运行期查表 输入签名可枚举 用户意图转为开放语言,规则表持续膨胀
顺序执行 排队时间可接受 批量规模导致 SLA 无法满足
磁盘事实 单主机、低并发写 多机、多租户或多个写入者竞争同一状态
错误签名回退 失败模式可稳定识别 未知错误占比持续上升,规则误匹配增加
人工认证能力 新管线增长速度可控 认证队列成为主要交付瓶颈

错误规则和失败卡来自 GeoServer 与 GIS 领域,不能原样迁移。可复用的是阶段契约、单一事实生产者、外部验收、失败到规则的路径和能力认证过程。

12. 当前证据与下一步数据

主张 当前依据 状态
S-57 与栅格输入可按文件签名路由 管线 accepts 机制 架构与运行说明
HTTP 200 不能证明 WMS 结果可用 LayerNotDefined 实测 案例方运行证据
/ by zero 来自 0×0 metatile 失败复盘与知识卡 案例方运行证据
版本漂移会使 active 管线退回 candidate 生命周期机制 架构说明
该设计在大规模并发下仍优于动态系统 尚无对照数据 本版不作此结论

下一版应记录每条管线的运行次数、成功率、人工接管率、verify 发现的假成功数、规则命中率和代码变更后的重新认证耗时。

13. ADPS 对照

模式或概念 本案例中的实现
M4 失败日记 五段式失败卡回链错误规则
F2 技能包 一条带声明、代码、证据和生命周期的管线
A2 规划执行 六阶段静态计划,依赖在设计期固定
A4 护栏三明治 发布前事实检查,发布后真实请求验收
G3 渐进承诺 draft、candidate、active 逐级开放权限
G4 可观测性 文件状态、控制台、请求记录和截图
推理资产化 设计期结论进入管线和规则,运行期复用
磁盘事实平面 阶段通过版本化 JSON 交换权威状态

案例提供与引用

案例提供:熊钰柯(Yuke Xiong),玄宿科技。

建议引用:ADPS、熊钰柯,《玄宿科技 GIS 数据发布 Agent:把运行经验固化成可验收管线》,ADPS 企业 Agent 系统蓝皮书·案例报告 02,v0.4,2026。