ZY Action Platform共享底座 platform/

共享底座 platform/

全产品共享的 Go monorepo 底座(module zy_action),按职责分层:治理核心 / AI 核心 / 数据核心 / 调度核心 / 运维核心 / 基础类型。底座只抽多实现处的接口(LLMProviderConnectorVectorStore),单一实现业务逻辑直白实现。

治理:auth·rbac·security·audit·crypto AI:llm·vector 数据:connector·datasource 调度:scheduler·task·resource V5:cdc·notify·monitoring

底座五大关键机制

1. Connector 工厂 allow-list + ExecWrite 写执行

platform/connector/factory.goCreateConnector 默认仅放行 MYSQL / SQLSERVER / POSTGRESQL 三类基础数据库;其余类型(如 SQLITE)需 AllowAdvancedTypes("SQLITE") 显式授权(多次调用为累加语义)。这是"高级数据库访问许可"门槛,防止未授权类型被随意接入。

连接器接口在只读查询之上增加写执行能力ExecWrite),供 Foundry Action 写路径回写源系统使用(写权限治理见 Foundry 写路径)。当前已注册实现:POSTGRESQL、SQLITE(纯 Go glebarez 驱动)。

2. Audit 泛化事件模型(ref_type / ref_id / step_type)

platform/audit/audit.goAuditService.LogEventRef 在基础事件上追加三列泛化引用,供各产品统一落底座审计,例如 Foundry Action 写路径:

LogEventRef(ctx, userID, eventType,
  refType  = "ontology_action",     // 引用类型
  refID    = "update_order_status", // 引用对象(api_name)
  stepType = "ACTION_EXECUTE",      // 流水线步骤
  actionDetails, result)

语义分层:audit 记"人做了什么操作"(含 who/when/prior state),Gotham 另设 event_log 记"系统事件流"(互补不替代)。异步队列(4 worker)落库,不阻塞业务。

3. LLM 网关降级链(deepseek → qwen → local_rule)

platform/llm/:在 LLMService 接口之上增量构建多 Provider 路由(不新建第二套路由层)。Gateway 维护:多 Provider 池(带权重)、配置驱动路由表(task → 降级链)、健康检查 + 熔断(CircuitBreaker)、用量/成本统计(UsageRecorder)。

ProviderKind角色
deepseek-v4-flashopenai_compatible主力(默认模型)
qwen(dashscope qwen-plus)openai_compatible备用国产降级
local_rulelocal_rule本地规则兜底(无网络调用)

熔断时返回降级结果并置 degraded=true(契约③)。

4. Vector 三后端自动降级(milvus → turbovec → disk)+ V5 增强

platform/vector/factory.goNewVectorStore 按配置选择后端,milvus/turbovec 先做 Health 检查,失败自动降级为 disk 并打警告日志,保证单机无外部服务也能跑通。disk 实现为磁盘向量引擎(余弦相似度 Top-K 检索)。V5(B5-4)接口增 UpsertBatch / QueryWithFilter / DeleteByDoc / Count 四方法并三实现补齐,支撑知识索引批量写入、文档级删除与检索过滤。

5. 国密 SM3 / SM2(emmansun/gmsm,CGO_ENABLED=0 兼容)

platform/crypto/:内建国密实现(emmansun/gmsm v0.44.1,纯 Go,兼容 CGO_ENABLED=0)。SM3:内容哈希/digest(Apollo bundle 文件校验、单调版本判据);SM2:签名与验签(bundle 整体签名、signer 公钥指纹)。设计上支持 mode: guomi/standard 双模式,Swift 全链路 P5 落地。

V5 新增底座能力(2026-08-29/30)

6. 统一调度器 scheduler / 异步任务系统 task / 资源 URI resource

platform/scheduler/:消除各产品自建 cron 欠账,scheduler_jobs(注册表,name UNIQUE/spec/enabled/next_run_at)+ scheduler_runs(运行记录)双表;支持 Register/Unregister/Enable/Start/Stop/RunOnce/ListJobs/ListRuns,6 段/5 段 spec 与 @every/@daily 描述符,SkipIfStillRunning 防重入 + panic recover。AIP 工作流 cron、Foundry 管道 cron_expr、审计归档、记忆清理、CDC 轮询等全部迁移接入。

platform/task/:异步任务系统,tasks 表五态(queued/running/success/failed/cancelled)+ progress/result JSON;Submit/Restore/Cancel/Get/List/RegisterRunner/Stop,worker 池默认并发 5,进度回调节流(500ms/Δ0.01);服务重启自动恢复中断任务。元数据导入、评测运行、数据管道、数据接入等长耗时操作全部任务化。REST:AIP /api/v1/tasks、Foundry /api/v1/system/tasks(gin 通配符冲突规避)。

platform/resource/:跨产品统一资源 URI(14 类 kind,<kind>://<product>/<id>[?sub] 格式),Parse/Generate/FileSafeName/IsValidKind 纯函数,为跨产品互操作打基础。

7. CDC 数据变更捕获与事件订阅(platform/cdc)

cdc_watchers + cdc_events 双表:轮询比对(首轮 snapshot;COUNT+max(watermark) 比对 → insert/update 检出;delete 摘要降级;无水位列仅 COUNT),EventBus Subscribe/Publish(落表 + 内存分发),调度经 scheduler(@every Ns 钳制 5s)。REST:/api/v1/cdc/watchers CRUD + poll + /api/v1/cdc/events,挂 AIP/Foundry/Gotham 三产品。Foundry 流规则(stream)即消费 CDC 事件触发动作。

8. Vector 向量增强(批量写入 / 过滤 / 删除 / 计数)

platform/vector 接口新增 4 方法(UpsertBatch / QueryWithFilter / DeleteByDoc / Count),三实现补齐:disk 全功能(元数据过滤、边界感知 uri 前缀删除)、milvus 原生 filter + 降级标注、turbovec 批量/搜索 filter/count/delete_by_doc 新端点。消费适配:AIP knowledge 索引批量写入、文档重索引 DeleteByDocdoc://aip/<id> 前缀)、NLQ metadata 通道 QueryWithFilter(data_source 过滤)。

9. License 授权自检(platform/license)

GET /api/v1/license/info 返回机器码 + 有效期(force=1 强制在线重校验,否则 TTL 缓存);PUT /api/v1/license/auth-key(admin)写 AUTH_KEY 并清缓存。AIP 过期按宽限档(6h+随机 2h)/硬关档(20min+随机 10min)自动关停并结束其它产品进程;Swift 独立内建授权自检:启动立即校验 + 每 30 分钟在线校验(nonce+crypt_data 协议),不满足优雅退出本产品不影响其它产品。

10. 可观测性 monitoring / 通知中心 notify / 会话记忆

monitoring(foundry 包,AIP 同款):轻量 Prometheus 文本格式 /metrics(无鉴权)——HTTP 请求量/时延、LLM 网关命中与熔断状态、task 队列深度、scheduler 运行计数;gin 中间件 + BootstrapSummary 启动自检日志(tables_migrated/llm_routes/scheduler_jobs/task_queue)。notify:统一通知中心 Hub/Channel/Send,内置 emailChannel,AIP 注册 feishu 渠道;GET /notify/channelsPOST /notify/send。会话记忆(AIP nlq):anl_conversation_memory 表 + Context/Append,编排器注入记忆上下文,GET|DELETE /chat/sessions/:sid/memory + GET /chat/sessions

V5 底座红线延续:单机优先不引入 MQ/服务注册;只在多实现处抽接口;API 优先 + 版本化。契约测试 TestOpenAPIContractRoutes 对 openapi spec 与 gin 路由双向对拍,白名单未扩大。

底座包逐个详解

config — 配置加载

  • 职责:YAML 配置 + 环境变量加载 + 密钥处理;无 config.yaml 时 LLM key 从环境变量读取;SECRET_KEY 过弱自动 fallback 补默认值(防配置归零/Token 立即过期)。
  • 关键类型Config(Server/Database/LLM/VectorStore/Audit 等子配置),VectorStoreConfig{Backend, MilvusURI, TurbovecURL, DiskPath}
  • 要点:基于 viper;demo 演示服务器默认端口在 cmd 层固定(AIP 18080)。

database — 统一数据库访问与自动迁移

  • 职责:PostgreSQL / SQLite 统一访问(GORM)+ AutoMigrate 自动迁移。bootstrap 逻辑:PG 优先chatbi_action_dev,DB_* 环境变量),连接失败自动降级 SQLite(各产品 temp/*_platform.db)。
  • 要点:GORM struct 需固定 TableName(),避免 DropTable 与 GORM 表名不一致;SQLite 需先 ensureDir 创建目录(否则 "unable to open database file")。

logger — 结构化日志

  • 职责:log/slog 结构化日志 + trace_id;lumberjack 滚动落盘 logs/app.log(单文件最大 10MB、保留 5 份、28 天)。
  • 要点:Gotham 图存储等模块注入 plog.Logger 保持 trace 贯通。

settings — 系统设置存取

  • 职责:系统级设置键值存储(SettingRepository),供 RLS 策略判定等读取。

security — 认证安全与行/列级安全

  • 职责:JWT Token 解析(ParseToken)、口令校验、AuthorizeUser 真实 RBAC 授权、RLS/CLS 行/列级安全注入、PII 脱敏。
  • 要点写操作不适用 SQL 改写(对 DELETE/UPDATE 做 WHERE 级 RLS 注入会静默扩大/缩小影响范围),写侧走 Foundry Action 写路径安全流水线(记录级权限,非 SQL 改写)。

auth — 认证服务

  • 职责AuthService:注册/登录(POST /api/v1/auth/register|login)、Token 签发;login 返回 Bearer token 供后续 JWT 鉴权。
  • V5(B3-6):TOTP 双因子认证(RFC 6238,hmac-sha1 + Base32,30s 窗口 ±1)——setup→verify-enable→登录要求 totp_codeMFA_REQUIRED 错误码)→disable;表 auth_mfa_secrets

rbac — 角色权限控制

  • 职责RBACService:用户-角色-权限关联、资源级权限判定(IsUserAdmin 等)、操作审计联动;预留 ABAC 扩展点(Gotham 在其上做基础门)。

audit — 统一操作审计

  • 职责AuditServiceLogEvent / LogEventRef(泛化 ref 三列)+ GetAuditLogs;异步队列 worker 落库。
  • 要点:泛化事件模型(ref_type/ref_id/step_type)供 AIP(NLQ_QUERY、ai_decision 分步)、Foundry(ACTION_EXECUTE、MCP_TOOL_CALL)、Apollo(DEPLOYMENT_SYNC/DRIFT_*)、Gotham(ABAC trace)统一落底座。V5(B3-7):审计归档任务 audit:archive(0 3 * * * 归档超 90 天)+ GET|PUT /audit/archive-config

llm — LLM 网关

  • 职责:多 Provider 路由/降级/熔断/成本统计。文件:types / client / provider / circuit_breaker / gateway / service / usage / handler。
  • 接口Provider(Name/Kind/Available/CheckHealth/Chat/ChatSimple/Stream/ModelName/BaseURL/Cost);LLMService 之上 Gateway 增量实现;GatewayOptions{MaxFailures, Cooldown, ProviderCost}
  • RESTPOST /api/v1/llm/chat(契约③,Swift 风控/Apollo 告警诊断消费)。

connector — 连接器工厂

  • 职责Connector 接口(查询/写执行)+ 工厂 CreateConnector;allow-list 白名单 + AllowAdvancedTypes 显式授权 + RegisterConnector 注册实现。
  • 已实现:POSTGRESQL、SQLITE(glebarez 纯 Go,测试含 exec_write、sqlite_integration)。
  • 要点ConnectorProvider 按数据源 id 建连接器,供 Foundry 语义查询真实执行与 Action 回写共用。

datasource — 数据源与元数据服务

  • 职责DataSourceService(数据源 CRUD/测试)、MetadataGenerationService(LLM 生成表/列语义元数据)、ConnectorCacheService(5 分钟连接器缓存)、DataCatalogService(统一元数据目录)。
  • 要点:导入元数据前按 table_schema_id 清理旧 columns/tables,防止残留表名误导 RAG;AIP 演示数据由 bootstrap 重建 demo SQLite。

vector — 统一向量引擎

  • 职责VectorStore 接口抽象,三后端 milvus(RESTful 客户端,默认)/ turbovec(自研 server)/ disk(磁盘保底);milvus/turbovec Health 失败自动降级 disk。
  • 要点:Milvus 本机不可用时自动落到 disk,保证单机无外部服务可跑通。

crypto — 国密算法

  • 职责:SM3 哈希、SM2 签名/验签(emmansun/gmsm,纯 Go,兼容 CGO_ENABLED=0);mode: guomi/standard 双模式设计。
  • 消费方:Apollo bundle 签名验签与 signer 指纹、Gotham 连接配置加密(AES-256-GCM)、Swift 星上全链路(P5)。

ierr — 统一错误模型

  • 职责InsightLinkError{Code, Status, Detail};各产品 server 统一 errorResponse 将 ierr 转 HTTP JSON(AIP 用 {error, code},Foundry/Apollo/Gotham 用 {code, error})。

model — GORM 数据模型

  • 职责:平台表模型(User / Role / UserRole / RolePermission / RowLevelSecurityPolicy / AuditLog / DataSource / DataCatalog 等)。

domain — 领域对象

  • 职责:跨层领域类型,如 ConnectionConfigSchema(连接器配置 Schema,供工厂创建实例)。

repository — 仓储层

  • 职责crud 包,GORM 数据访问:NewUserRepository / NewRoleRepository / NewAuditLogRepository / NewSettingRepository 等,各产品 server 注入使用。

license — 授权与关停调度

  • 职责:机器码 + 有效期展示;ShutdownScheduler 幂等调度授权过期自动关停(宽限档 6h+随机2h / 硬关档 20min+随机10min),到点由 AIP 结束其它产品进程后退出,保留 gateway。
  • 要点:AUTH_KEY 仅在 AIP 配置校验;/license/info 返回 shutdown_scheduled / deadline / tier / reason(force=1 强制在线重校验)。V5(B5-5 / Swift):Swift 独立内建授权自检(启动立即校验 + 每 30 分钟在线校验,nonce+crypt_data 协议,不满足优雅退出本产品);PUT /license/auth-key(admin)写密钥并清缓存。

mailer — SMTP 邮件发送

  • 职责:纯标准库 net/smtp + crypto/tls 邮件发送(SSL 465 / STARTTLS 25·587 / 明文,超时重试、HTML UTF-8、header 防注入),供工作流 send_notification 的 email 渠道与 /email/test 使用。

目录结构与分层

action/platform/
├── ierr/ model/ domain/ repository/     # 基础类型与仓储
├── config/ database/ logger/ settings/  # 运维核心
├── security/ auth/ rbac/ audit/         # 治理核心(含 auth TOTP MFA)
├── llm/                                 # AI 核心:网关降级链
├── connector/ datasource/               # 数据核心
├── vector/                              # 向量引擎三后端(V5 批量/过滤/删除/计数)
├── scheduler/ task/ resource/           # V5 调度核心:统一调度/异步任务/资源 URI
├── cdc/                                 # V5 数据变更捕获与事件订阅
├── notify/                              # V5 通知中心
├── license/                             # 授权与关停调度(含 Swift 周期自检)
├── mailer/                              # SMTP 邮件发送
└── crypto/                              # 国密 SM3/SM2
底座三条硬性约束:① 单机优先不引入 MQ/服务注册(P1-P3 同步 HTTP/Go 接口 + goroutine + scheduler);② 只在多实现处抽接口(DataSourceDriver / LLMProvider / CryptoProvider / VectorStore);③ API 优先 + 版本化(先有 /api/v1 再上 UI)。