ZY Action PlatformP1 LightAIP

P1 LightAIP — 分析智能平台

对标 Palantir AIP:以自然语言与数据深度交互(NLQ 智能查数)。核心资产是 LLM 网关 + NLQ 链路(五路召回 + RLS/CLS 注入 + 会话记忆)+ 知识域(实体抽取/证据链/语义标注/多格式解析)+ 审计。服务端口 18080

NLQ 五路召回 + 安全注入 决策证据链 / 实体抽取 语义标注 / 分层知识树 会话记忆 / 通知中心 TOTP 双因子

NLQ 最小链路(五步)

products/aip/nlq/ 实现从自然语言到图表的完整链路(nlq.Orchestrator 编排):

用户自然语言提问
  │
  ▼ ① intent(意图识别)        IntentRecognitionService —— 判定意图类型(如 data_query,附 confidence)
  ▼ ② rag(上下文检索)         RAGService —— 关键词/向量检索相关表列语义上下文
  │                             V5 五通道加权:metadata 0.35 / knowledge 0.25 / history 0.15
  │                             / fewshot 0.15 / entity 0.10(实体抽取成果接入,旧库四通道自动补种)
  ▼ ②.5 security(v5 安全注入) security.ApplyRLS/ApplyCLS —— 执行前注入行级/列级安全,失败拒绝执行
  ▼ ②.6 memory(v5 会话记忆)   ConversationMemory —— 组装 prompt 前注入记忆上下文(最近 6 轮原文+旧轮摘要),
  │                             查询成功回写本轮对话(失败轮次不写)
  ▼ ③ text2sql(SQL 生成)      Text2SQLService —— 经 LLM 网关(deepseek-v4-flash)生成 SQL
  ▼ ④ query_executor(执行)    QueryExecutorService —— 经 ConnectorCache 在真实数据源执行
  ▼ ⑤ visualization(图表推荐) VisualizationService —— 按结果形状推荐 chart_type
  ▼
返回 { sql, rows, chart_type, intent, confidence } 并写审计 NLQ_QUERY

实测示例(冒烟 smoke_aip)

提问 "查询订单总金额" 返回:

  • intent = data_query(confidence 0.5),数据源 aip_demo_warehouse
  • SQL = SELECT SUM(sales_amount) AS total_sales FROM orders;
  • rows = [["6470.5"]],chart_type = metric_card
  • 审计日志 NLQ_QUERY SUCCESS(含 sql 与 rows)

知识域:实体抽取 / 决策证据链 / 语义标注 / 多格式解析 / 会话记忆(V5)

实体/关系抽取 + RAG 第五通道(products/aip/entityextract,B2-1)

  • aie_entities/aie_relations/aie_extract_runs 三表;分块 → LLM 抽取(JSON 限定 schema,坏 JSON 重试 1 次,任务化)→ 人工确认/拒绝审核闭环(confirmed 保留,重抽幂等);
  • API:POST /knowledge/documents/:id/extractGET /knowledge/documents/:id/graphGET /entities|/relationsPOST /entities/:id/confirm|reject
  • 抽取成果接入检索增强:RAG 第五通道(metadata 0.35/knowledge 0.25/history 0.15/fewshot 0.15/entity 0.10),旧库四通道自动补种,提升自然语言查数召回。

决策证据链(products/aip/decision,B2-2)

  • ad_answers(id=trace_id、steps/citations JSON)+ ad_citations 表;5 步链:decompose 拆解 → retrieve 三路检索(RAG 四通道+实体+结构化 NLQ,融合去重截断 12 条)→ verify LLM 批量判 support/refute/irrelevant → synthesize 仅基于证据生成 markdown+[n] 引用 → cite 确定性映射;
  • 每步 LogEventRef(refType="ai_decision", stepType=...) 审计留痕,GET /api/v1/ai-audit?trace_id= 全流程回放;
  • API:POST /decision/answer(同步多步 LLM)、GET /decision/answersGET /decision/answers/:id

元数据语义标注(products/aip/schemaai,B2-4)

  • asi_inferred_relationships(fk/semantic/join_path + confidence + 三态)+ asi_column_annotations(semantic_type/description,source llm|rule_only);
  • FK 命名猜测 → 每表 LIMIT 20 采样 → LLM 批量判定(坏 JSON 重试、幻觉防御白名单、零重叠置信度×0.5)→ 任务化;LLM 缺失降级纯规则;
  • API:POST /datasources/:id/infer-relationshipsGET /datasources/:id/relationships|annotationsPOST /schemaai/relationships|annotations/:id/confirm|reject

多格式解析 + 分层摘要树(products/aip/knowledge 扩展,B2-5)

  • PDF(ledongthuc/pdf 纯 Go,字体大小+加粗推断标题)与 Word(archive/zip+XML 手写)双解析接口;
  • 分层树 kdoc_nodes(document→section→chunk 三级、parent_id/ord/uri/vector_id),标题→section 层级栈嵌套、超长段落非重叠切分;检索双表合并去重 + source: tree|blocks + node_path 回溯标题链;
  • API:GET /knowledge/documents/:id/outlinePOST /knowledge/documents(text/markdown/html 直传、pdf/docx base64)、POST /knowledge/search

会话记忆(products/aip/nlq/models_memory.go + memory.go,B5-5.5)

  • anl_conversation_memory 表(session_id+created_at 索引);Append(正则实体提及抽取)/Context(最近 6 轮原文 + 旧轮 summary,无 summary 滚动 LLM 压缩并回写,失败降级截断);
  • 编排器 AttachConversationMemory:记忆上下文并入 ragContext,查询成功回写记忆(失败轮次不写);
  • API:GET /chat/sessionsGET|DELETE /chat/sessions/:sid/memory;清理 job aip:memory-cleanup(0 4 * * * 删 30 天前);前端 /memory-manage 页管理。

安全与协作加固(B3)

  • TOTP 双因子认证platform/auth/mfa.go(RFC 6238),setup→verify-enable→登录要求 totp_code(MFA_REQUIRED);
  • 通知中心platform/notify Hub/Channel,AIP 注册 feishu + email 渠道;GET /notify/channelsPOST /notify/send
  • 审计归档audit:archive 调度(0 3 * * * 归档超 90 天)+ GET|PUT /audit/archive-config
  • NLQ RLS/CLS 注入:Text2SQL 执行前注入,失败拒绝执行不静默放行(B3-5.2)。

HTTP API(/api/v1)

方法路径用途
POST/auth/register / /auth/login注册 / 登录(login 返回 token)
GET|POST/datasources数据源列表 / 创建
GET|PUT|DELETE/datasources/:id数据源详情 / 更新 / 删除
POST/datasources/:id/test连接测试
POST/datasources/:id/import-metadata导入表/列元数据(生成语义描述)
POST/chatNLQ 自然语言查询
GET/audit/logs审计日志查询
POST/decision/answer决策证据链(5 步,答案带引用)
GET/decision/answers / /decision/answers/:id决策答案列表 / 详情
POST/knowledge/documents/:id/extract实体/关系抽取(任务化)
GET/entities / /relations实体 / 关系列表(可确认/拒绝)
GET/knowledge/documents/:id/outline文档分层大纲(document→section→chunk)
POST/datasources/:id/infer-relationships元数据语义标注推断(任务化)
GET/chat/sessions / /chat/sessions/:sid/memory会话记忆管理(DELETE 清空)
GET/tasks / /tasks/:id异步任务列表 / 详情(任务化端点轮询)
GET/scheduler/jobs / /scheduler/jobs/:name/runs调度任务与运行记录
GET/notify/channels / POST /notify/send通知中心渠道 / 发送
GET|PUT/audit/archive-config审计归档配置(默认 90 天)
GET/feishu/status飞书机器人状态(enabled/running/configured/app_id,admin)
POST/feishu/push飞书主动推送文本(receive_type=open_id|chat_id,admin)
GET/email/status邮件服务状态(enabled/configured/server/from/port,admin)
POST/email/test发送测试邮件验证 SMTP 连通性(body {to},admin)
GET/license/info授权状态与关停调度(shutdown_scheduled/deadline/tier/reason)
GET/health健康检查(zy-action-aip

除认证与 health 外均需 Authorization: Bearer <token>(JWT)。

演示数据(orders / customers / products)

server/bootstrap.go 启动时幂等重建 demo SQLitetemp/aip_demo_datasource.db),含三张表;导入元数据前先按 table_schema_id 清理旧 columns/tables,防止残留表名误导 RAG。

关键列作用
ordersorder_id, customer_id, product_id, sales_amount, order_date, status订单事实(NLQ 主查询表)
customerscustomer_id, name, level, region客户维度(join 用)
productsproduct_id, name, category, price产品维度(join 用)
demo struct 固定 TableName(),避免 DropTable 与 GORM 表名不一致(此前导致 "no such table: demo_orders")。

LLM 网关(底座复用)

AIP 通过 llm.NewGatewayFromConfig 装配网关(llm.LLMService),Text2SQL 与元数据生成共用同一网关。路由链:deepseek-v4-flash 主力 → qwen 备用 → local_rule 降级,含熔断与 tokens/成本 usage 统计。详见 底座五大机制

通知与主动推送(飞书 / 邮件)

主动通知渠道演进:internal(审计日志)→ feishu(飞书私聊推送)→ email(SMTP 邮件)。工作流 send_notification 节点按 channel 分发到对应渠道。

飞书 IM 机器人(products/aip/feishu/

  • WebSocket 长连接 + 交互卡片,Automation Copilot 对话与 NLQ 查数可经飞书私聊/群聊;default_channel 可选 copilot / nlq。
  • 主动推送:Engine PushToChat / PushCardToChat / PushToUser / PushCardToUser;管理 API GET /feishu/statusPOST /feishu/push
  • 配置了 app_id + app_secret 且未显式禁用时默认启用;feishu_contacts 表登记 open_id↔chat_id 映射,供 PushToUser 定位。
  • 工作流通知:send_notification 节点 channel=feishu 按 recipients(open_id)推送到飞书私聊。

SMTP 邮件服务(platform/mailer/

  • 纯标准库 net/smtp + crypto/tls:SSL 直连(465)/ STARTTLS(25/587)/ 明文三种模式,超时自动重试,HTML UTF-8,header 防注入。
  • 配置 config.yaml email: 节 + EMAIL_* env / DB 覆盖(DB 优先),凭证齐全默认启用。
  • 管理 API GET /email/statusPOST /email/test;工作流 send_notification 节点 channel=email 按 recipients(邮箱)发送。
feishu / email 渠道需先配置好凭证,未配置而使用会让通知节点直接失败(执行结果可见,不静默丢通知)。

前端与网关接入

  • 前端 action/web/ 保留 AIP 页面:LoginPage / DataSourcesPage / ChatWindow(Vue3 + Vite)。
  • V5 新增 AIP 顶级路由:/entity-extract(实体关系抽取)、/decision(决策证据链)、/schema-annotation(元数据语义标注)、/knowledge-tree(知识库分层树)、/memory-manage(会话记忆),App.vue 导航栏加入口。
  • 管理后台页面:/admin/feishu(飞书设置)、/admin/email(邮件设置)、/admin/workflows(工作流编排)、/admin/ai-audit(AI 决策审计,含归档开关)等。
  • 网关代理:/aip-api/* → AIP 18080(前缀重写为 /api)。
  • 相关设计:action/wiki/design/design_aip.md;评测集制品(契约⑤)随 Apollo bundle 分发供 NLQ 回归。