云计算百科
云计算领域专业知识百科平台

通用 SaaS 系统如何接入 AI Gateway:让你的业务系统拥有 AI 对话能力

一、痛点:为什么 SaaS 系统需要 AI 对话入口?

传统 B/S 系统的交互模式是"菜单 → 表单 → 按钮"。当系统功能越来越多,用户面临的问题也越来越明显:

  • 操作路径深:查一个报表要点 5 层菜单
  • 学习成本高:新员工需要培训才能上手
  • 跨模块操作繁琐:一个业务流程涉及多个页面来回切换
  • 运维排查低效:出了问题要登录服务器、翻日志、查指标,步骤多且门槛高

如果系统能像 ChatGPT 一样,用户输入一句话就能完成操作呢?

用户:"帮我查一下今天所有异常订单"
AI:正在查询… 今天共有 3 笔异常订单:
| 订单号 | 客户 | 异常原因 |
| ORD-001 | 张三 | 支付超时 |
| ORD-002 | 李四 | 库存不足 |
| ORD-003 | 王五 | 地址无效 |
建议:ORD-001 可自动重试支付,ORD-002 需要补货后重新发起。

这就是 AI Gateway 要解决的问题。

二、核心思路:AI 网关 + 配置驱动 + 零侵入

整体方案的核心是在现有系统和大模型之间架设一个通用 AI 网关,它不修改任何子系统代码,而是通过 YAML 配置文件将子系统的 API"翻译"成大模型能理解的 Tool。

设计原则

原则说明
零侵入 子系统不改一行代码,网关侧通过配置适配
配置驱动 每个子系统一组 YAML,新系统接入只加配置
独立部署 网关作为独立微服务,技术栈不受子系统限制
双执行器 业务操作走 HTTP 代理,运维操作走 Agent/SSH
安全可控 危险操作二次确认、运维命令白名单、审批流程、审计日志

一句话总结

用户说一句话 → 大模型理解意图 → 自动调用子系统 API 或执行运维命令 → 把结果用人话说回来。

三、整体架构

3.1 系统架构图

#mermaid-svg-YLF8omtylXn5InJG{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-YLF8omtylXn5InJG .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-YLF8omtylXn5InJG .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-YLF8omtylXn5InJG .error-icon{fill:#552222;}#mermaid-svg-YLF8omtylXn5InJG .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-YLF8omtylXn5InJG .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-YLF8omtylXn5InJG .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-YLF8omtylXn5InJG .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-YLF8omtylXn5InJG .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-YLF8omtylXn5InJG .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-YLF8omtylXn5InJG .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-YLF8omtylXn5InJG .marker{fill:#333333;stroke:#333333;}#mermaid-svg-YLF8omtylXn5InJG .marker.cross{stroke:#333333;}#mermaid-svg-YLF8omtylXn5InJG svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-YLF8omtylXn5InJG p{margin:0;}#mermaid-svg-YLF8omtylXn5InJG .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-YLF8omtylXn5InJG .cluster-label text{fill:#333;}#mermaid-svg-YLF8omtylXn5InJG .cluster-label span{color:#333;}#mermaid-svg-YLF8omtylXn5InJG .cluster-label span p{background-color:transparent;}#mermaid-svg-YLF8omtylXn5InJG .label text,#mermaid-svg-YLF8omtylXn5InJG span{fill:#333;color:#333;}#mermaid-svg-YLF8omtylXn5InJG .node rect,#mermaid-svg-YLF8omtylXn5InJG .node circle,#mermaid-svg-YLF8omtylXn5InJG .node ellipse,#mermaid-svg-YLF8omtylXn5InJG .node polygon,#mermaid-svg-YLF8omtylXn5InJG .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-YLF8omtylXn5InJG .rough-node .label text,#mermaid-svg-YLF8omtylXn5InJG .node .label text,#mermaid-svg-YLF8omtylXn5InJG .image-shape .label,#mermaid-svg-YLF8omtylXn5InJG .icon-shape .label{text-anchor:middle;}#mermaid-svg-YLF8omtylXn5InJG .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-YLF8omtylXn5InJG .rough-node .label,#mermaid-svg-YLF8omtylXn5InJG .node .label,#mermaid-svg-YLF8omtylXn5InJG .image-shape .label,#mermaid-svg-YLF8omtylXn5InJG .icon-shape .label{text-align:center;}#mermaid-svg-YLF8omtylXn5InJG .node.clickable{cursor:pointer;}#mermaid-svg-YLF8omtylXn5InJG .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-YLF8omtylXn5InJG .arrowheadPath{fill:#333333;}#mermaid-svg-YLF8omtylXn5InJG .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-YLF8omtylXn5InJG .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-YLF8omtylXn5InJG .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-YLF8omtylXn5InJG .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-YLF8omtylXn5InJG .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-YLF8omtylXn5InJG .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-YLF8omtylXn5InJG .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-YLF8omtylXn5InJG .cluster text{fill:#333;}#mermaid-svg-YLF8omtylXn5InJG .cluster span{color:#333;}#mermaid-svg-YLF8omtylXn5InJG div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-YLF8omtylXn5InJG .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-YLF8omtylXn5InJG rect.text{fill:none;stroke-width:0;}#mermaid-svg-YLF8omtylXn5InJG .icon-shape,#mermaid-svg-YLF8omtylXn5InJG .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-YLF8omtylXn5InJG .icon-shape p,#mermaid-svg-YLF8omtylXn5InJG .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-YLF8omtylXn5InJG .icon-shape rect,#mermaid-svg-YLF8omtylXn5InJG .image-shape rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-YLF8omtylXn5InJG .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-YLF8omtylXn5InJG .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-YLF8omtylXn5InJG :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

基础设施

服务器层

子系统层(零改动)

执行层(双执行器)

AI 层

网关层

前端层

自然语言 + Token

Tool Call

透传 Token

透传 Token

透传 Token

启动加载

SaaS 系统 Web 页面

AI 对话窗口组件

Nginx / API Gateway\\n负载均衡 + 路由

AI Gateway 通用网关\\n(独立微服务)

大模型服务\\nGPT-4 / Qwen / DeepSeek\\n(云端或本地私有化)

HttpProxyExecutor\\n业务 Tool → HTTP 代理

OpsExecutor\\n运维 Tool → Agent / SSH

子系统 A\\n如:订单管理

子系统 B\\n如:库存管理

子系统 C\\n如:客户管理

Agent\\n应用服务器

Agent\\n数据库服务器

注册中心

数据库\\n会话 / 审计

Tool YAML 配置

3.2 网关内部结构

AI Gateway 网关内部分为四个核心模块:

#mermaid-svg-JrP3j4I6L9dF3Ylq{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-JrP3j4I6L9dF3Ylq .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-JrP3j4I6L9dF3Ylq .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-JrP3j4I6L9dF3Ylq .error-icon{fill:#552222;}#mermaid-svg-JrP3j4I6L9dF3Ylq .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-JrP3j4I6L9dF3Ylq .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-JrP3j4I6L9dF3Ylq .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-JrP3j4I6L9dF3Ylq .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-JrP3j4I6L9dF3Ylq .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-JrP3j4I6L9dF3Ylq .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-JrP3j4I6L9dF3Ylq .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-JrP3j4I6L9dF3Ylq .marker{fill:#333333;stroke:#333333;}#mermaid-svg-JrP3j4I6L9dF3Ylq .marker.cross{stroke:#333333;}#mermaid-svg-JrP3j4I6L9dF3Ylq svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-JrP3j4I6L9dF3Ylq p{margin:0;}#mermaid-svg-JrP3j4I6L9dF3Ylq .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-JrP3j4I6L9dF3Ylq .cluster-label text{fill:#333;}#mermaid-svg-JrP3j4I6L9dF3Ylq .cluster-label span{color:#333;}#mermaid-svg-JrP3j4I6L9dF3Ylq .cluster-label span p{background-color:transparent;}#mermaid-svg-JrP3j4I6L9dF3Ylq .label text,#mermaid-svg-JrP3j4I6L9dF3Ylq span{fill:#333;color:#333;}#mermaid-svg-JrP3j4I6L9dF3Ylq .node rect,#mermaid-svg-JrP3j4I6L9dF3Ylq .node circle,#mermaid-svg-JrP3j4I6L9dF3Ylq .node ellipse,#mermaid-svg-JrP3j4I6L9dF3Ylq .node polygon,#mermaid-svg-JrP3j4I6L9dF3Ylq .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-JrP3j4I6L9dF3Ylq .rough-node .label text,#mermaid-svg-JrP3j4I6L9dF3Ylq .node .label text,#mermaid-svg-JrP3j4I6L9dF3Ylq .image-shape .label,#mermaid-svg-JrP3j4I6L9dF3Ylq .icon-shape .label{text-anchor:middle;}#mermaid-svg-JrP3j4I6L9dF3Ylq .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-JrP3j4I6L9dF3Ylq .rough-node .label,#mermaid-svg-JrP3j4I6L9dF3Ylq .node .label,#mermaid-svg-JrP3j4I6L9dF3Ylq .image-shape .label,#mermaid-svg-JrP3j4I6L9dF3Ylq .icon-shape .label{text-align:center;}#mermaid-svg-JrP3j4I6L9dF3Ylq .node.clickable{cursor:pointer;}#mermaid-svg-JrP3j4I6L9dF3Ylq .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-JrP3j4I6L9dF3Ylq .arrowheadPath{fill:#333333;}#mermaid-svg-JrP3j4I6L9dF3Ylq .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-JrP3j4I6L9dF3Ylq .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-JrP3j4I6L9dF3Ylq .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-JrP3j4I6L9dF3Ylq .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-JrP3j4I6L9dF3Ylq .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-JrP3j4I6L9dF3Ylq .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-JrP3j4I6L9dF3Ylq .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-JrP3j4I6L9dF3Ylq .cluster text{fill:#333;}#mermaid-svg-JrP3j4I6L9dF3Ylq .cluster span{color:#333;}#mermaid-svg-JrP3j4I6L9dF3Ylq div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-JrP3j4I6L9dF3Ylq .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-JrP3j4I6L9dF3Ylq rect.text{fill:none;stroke-width:0;}#mermaid-svg-JrP3j4I6L9dF3Ylq .icon-shape,#mermaid-svg-JrP3j4I6L9dF3Ylq .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-JrP3j4I6L9dF3Ylq .icon-shape p,#mermaid-svg-JrP3j4I6L9dF3Ylq .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-JrP3j4I6L9dF3Ylq .icon-shape rect,#mermaid-svg-JrP3j4I6L9dF3Ylq .image-shape rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-JrP3j4I6L9dF3Ylq .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-JrP3j4I6L9dF3Ylq .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-JrP3j4I6L9dF3Ylq :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

AI Gateway 通用网关

Tool 执行(双执行器)

核心处理

executor: http

executor: ops

Tool Call

Tool 注册中心\\nYAML 配置驱动

动态 Prompt 构建器\\n通用模板 + 子系统领域知识

大模型调用\\n意图识别 + Tool Calling

执行器路由

HttpProxyExecutor\\n业务操作

OpsExecutor\\n运维操作

SSE 接入层\\n提取 Token / 解析 system_id

会话管理 + 审计日志

关键设计点:

  • 动态 Prompt:每个子系统有自己的领域知识(如业务术语、状态码含义),网关根据 system_id 动态拼装 Prompt,让大模型"懂"这个子系统
  • Tool 注册中心:启动时扫描 YAML 目录,自动构建 Tool 列表,支持热加载
  • 双执行器:业务 Tool 走 HTTP 代理调用子系统 API,运维 Tool 走 Agent/SSH 在服务器上执行命令

四、配置驱动:YAML 定义一切

这是整个方案最核心的设计——用 YAML 配置文件代替代码开发。

4.1 配置目录结构

tools/
├── order-system/ # 子系统:订单管理
│ ├── _system.yaml # 子系统元信息 + 领域知识
│ ├── query_order.yaml # 业务 Tool: 查询订单
│ ├── cancel_order.yaml # 业务 Tool: 取消订单
│ ├── ops_check_disk.yaml # 运维 Tool: 检查磁盘
│ └── ops_view_log.yaml # 运维 Tool: 查看日志
├── inventory-system/ # 子系统:库存管理
│ ├── _system.yaml
│ └── …
└── crm-system/ # 子系统:客户管理
├── _system.yaml
└── …

4.2 子系统元信息(_system.yaml)

system_id: ordersystem
display_name: 订单管理系统
service_name: orderservice # 注册中心的服务名

domain_knowledge: |
## 业务知识
– 订单状态:0=待支付, 1=已支付, 2=已发货, 3=已完成, 4=已取消, 5=异常
– 支付方式:alipay=支付宝, wechat=微信, bank=银行卡
– 异常订单指状态为 5 的订单,需要人工介入处理

assistant_role: |
你是订单管理系统的 AI 助手,可以帮用户查询订单、处理异常、分析销售数据。

# 运维功能:服务器信息
servers:
id: orderapp01
host: 192.168.1.101
agent_port: 9090
services:
name: orderservice
type: springboot
log_path: /opt/orderservice/logs/

4.3 业务 Tool 定义

name: query_order
display_name: 查询订单
description: "查询订单列表,支持按状态、时间范围、客户筛选"
category: 订单管理
risk_level: low
requires_confirmation: false
executor: http # 业务 Tool

parameters:
type: object
properties:
status:
type: integer
description: "订单状态:0=待支付, 1=已支付, 2=已发货, 3=已完成, 4=已取消, 5=异常"
start_date:
type: string
description: "开始日期,格式 yyyy-MM-dd"
end_date:
type: string
description: "结束日期,格式 yyyy-MM-dd"

api:
method: POST
path: /order/list
request_mapping:
body:
orderStatus: "${status}"
startDate: "${start_date}"
endDate: "${end_date}"
response_mapping:
data_path: "$.data.records"

4.4 运维 Tool 定义

name: check_disk_space
display_name: 检查磁盘空间
description: "检查服务器磁盘使用情况"
category: 系统监控
risk_level: low
requires_confirmation: false
executor: ops # 运维 Tool

parameters:
type: object
properties:
server_id:
type: string
description: "目标服务器 ID"

ops:
command_template: "df -h"
timeout_seconds: 10
output_parser:
type: table
columns: ["filesystem", "size", "used", "avail", "use_percent", "mount"]

新子系统接入只需 3 步:建目录 → 写 _system.yaml → 为每个 API 写一个 Tool YAML。不改网关代码,不改子系统代码。

五、交互流程

5.1 业务操作时序

子系统 API大模型AI Gateway 网关API Gateway对话窗口用户子系统 API大模型AI Gateway 网关API Gateway对话窗口用户#mermaid-svg-P9j6uKPGcytaZ8rO{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-P9j6uKPGcytaZ8rO .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-P9j6uKPGcytaZ8rO .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-P9j6uKPGcytaZ8rO .error-icon{fill:#552222;}#mermaid-svg-P9j6uKPGcytaZ8rO .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-P9j6uKPGcytaZ8rO .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-P9j6uKPGcytaZ8rO .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-P9j6uKPGcytaZ8rO .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-P9j6uKPGcytaZ8rO .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-P9j6uKPGcytaZ8rO .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-P9j6uKPGcytaZ8rO .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-P9j6uKPGcytaZ8rO .marker{fill:#333333;stroke:#333333;}#mermaid-svg-P9j6uKPGcytaZ8rO .marker.cross{stroke:#333333;}#mermaid-svg-P9j6uKPGcytaZ8rO svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-P9j6uKPGcytaZ8rO p{margin:0;}#mermaid-svg-P9j6uKPGcytaZ8rO .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-P9j6uKPGcytaZ8rO text.actor>tspan{fill:black;stroke:none;}#mermaid-svg-P9j6uKPGcytaZ8rO .actor-line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-P9j6uKPGcytaZ8rO .innerArc{stroke-width:1.5;stroke-dasharray:none;}#mermaid-svg-P9j6uKPGcytaZ8rO .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-P9j6uKPGcytaZ8rO .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-P9j6uKPGcytaZ8rO #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-P9j6uKPGcytaZ8rO .sequenceNumber{fill:white;}#mermaid-svg-P9j6uKPGcytaZ8rO #sequencenumber{fill:#333;}#mermaid-svg-P9j6uKPGcytaZ8rO #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-P9j6uKPGcytaZ8rO .messageText{fill:#333;stroke:none;}#mermaid-svg-P9j6uKPGcytaZ8rO .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-P9j6uKPGcytaZ8rO .labelText,#mermaid-svg-P9j6uKPGcytaZ8rO .labelText>tspan{fill:black;stroke:none;}#mermaid-svg-P9j6uKPGcytaZ8rO .loopText,#mermaid-svg-P9j6uKPGcytaZ8rO .loopText>tspan{fill:black;stroke:none;}#mermaid-svg-P9j6uKPGcytaZ8rO .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-P9j6uKPGcytaZ8rO .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-P9j6uKPGcytaZ8rO .noteText,#mermaid-svg-P9j6uKPGcytaZ8rO .noteText>tspan{fill:black;stroke:none;}#mermaid-svg-P9j6uKPGcytaZ8rO .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-P9j6uKPGcytaZ8rO .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-P9j6uKPGcytaZ8rO .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-P9j6uKPGcytaZ8rO .actorPopupMenu{position:absolute;}#mermaid-svg-P9j6uKPGcytaZ8rO .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mermaid-svg-P9j6uKPGcytaZ8rO .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-P9j6uKPGcytaZ8rO .actor-man circle,#mermaid-svg-P9j6uKPGcytaZ8rO line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-P9j6uKPGcytaZ8rO :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}"帮我查一下今天的异常订单"POST /api/os-ai-gateway/chat/stream(Token + system_id + message)路由到 AI Gateway[SSE] event: thinkingSystem Prompt(含订单领域知识)+ Tools 定义 + 用户消息Tool Call: query_order(status=5, start_date=today)[SSE] event: tool_call"正在查询异常订单…"HTTP 代理: POST /api/order-service/order/list(透传 Token)路由到 order-service返回订单数据[SSE] event: tool_result将查询结果发给大模型生成自然语言回复[SSE] event: message_delta"今天共有 3 笔异常订单…"[SSE] event: done展示完整结果

5.2 危险操作二次确认

对于写操作(如取消订单、重启服务),通过 YAML 中的 requires_confirmation: true 触发前端确认弹窗:

子系统 API大模型AI Gateway 网关对话窗口用户子系统 API大模型AI Gateway 网关对话窗口用户#mermaid-svg-ObM3GKOXZCW8Dbs2{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-ObM3GKOXZCW8Dbs2 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-ObM3GKOXZCW8Dbs2 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-ObM3GKOXZCW8Dbs2 .error-icon{fill:#552222;}#mermaid-svg-ObM3GKOXZCW8Dbs2 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-ObM3GKOXZCW8Dbs2 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-ObM3GKOXZCW8Dbs2 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-ObM3GKOXZCW8Dbs2 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-ObM3GKOXZCW8Dbs2 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-ObM3GKOXZCW8Dbs2 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-ObM3GKOXZCW8Dbs2 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-ObM3GKOXZCW8Dbs2 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-ObM3GKOXZCW8Dbs2 .marker.cross{stroke:#333333;}#mermaid-svg-ObM3GKOXZCW8Dbs2 svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-ObM3GKOXZCW8Dbs2 p{margin:0;}#mermaid-svg-ObM3GKOXZCW8Dbs2 .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-ObM3GKOXZCW8Dbs2 text.actor>tspan{fill:black;stroke:none;}#mermaid-svg-ObM3GKOXZCW8Dbs2 .actor-line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-ObM3GKOXZCW8Dbs2 .innerArc{stroke-width:1.5;stroke-dasharray:none;}#mermaid-svg-ObM3GKOXZCW8Dbs2 .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-ObM3GKOXZCW8Dbs2 .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-ObM3GKOXZCW8Dbs2 #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-ObM3GKOXZCW8Dbs2 .sequenceNumber{fill:white;}#mermaid-svg-ObM3GKOXZCW8Dbs2 #sequencenumber{fill:#333;}#mermaid-svg-ObM3GKOXZCW8Dbs2 #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-ObM3GKOXZCW8Dbs2 .messageText{fill:#333;stroke:none;}#mermaid-svg-ObM3GKOXZCW8Dbs2 .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-ObM3GKOXZCW8Dbs2 .labelText,#mermaid-svg-ObM3GKOXZCW8Dbs2 .labelText>tspan{fill:black;stroke:none;}#mermaid-svg-ObM3GKOXZCW8Dbs2 .loopText,#mermaid-svg-ObM3GKOXZCW8Dbs2 .loopText>tspan{fill:black;stroke:none;}#mermaid-svg-ObM3GKOXZCW8Dbs2 .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-ObM3GKOXZCW8Dbs2 .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-ObM3GKOXZCW8Dbs2 .noteText,#mermaid-svg-ObM3GKOXZCW8Dbs2 .noteText>tspan{fill:black;stroke:none;}#mermaid-svg-ObM3GKOXZCW8Dbs2 .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-ObM3GKOXZCW8Dbs2 .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-ObM3GKOXZCW8Dbs2 .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-ObM3GKOXZCW8Dbs2 .actorPopupMenu{position:absolute;}#mermaid-svg-ObM3GKOXZCW8Dbs2 .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mermaid-svg-ObM3GKOXZCW8Dbs2 .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-ObM3GKOXZCW8Dbs2 .actor-man circle,#mermaid-svg-ObM3GKOXZCW8Dbs2 line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-ObM3GKOXZCW8Dbs2 :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}YAML 配置 requires_confirmation: true"取消订单 ORD-20260228-001"发送消息解析意图Tool Call: cancel_order(order_id=ORD-20260228-001)[SSE] event: confirmation_required"即将取消订单 ORD-20260228-001,确认?"弹出确认对话框点击"确认"POST /chat/confirmHTTP 代理调用取消接口取消成功"订单已成功取消"

5.3 运维操作流程

运维 Tool 通过部署在服务器上的轻量 Agent 执行命令,高风险操作需要审批:

Agent(服务器)大模型AI Gateway 网关用户Agent(服务器)大模型AI Gateway 网关用户#mermaid-svg-uGzOqx9wvSB7N8xk{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-uGzOqx9wvSB7N8xk .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-uGzOqx9wvSB7N8xk .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-uGzOqx9wvSB7N8xk .error-icon{fill:#552222;}#mermaid-svg-uGzOqx9wvSB7N8xk .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-uGzOqx9wvSB7N8xk .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-uGzOqx9wvSB7N8xk .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-uGzOqx9wvSB7N8xk .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-uGzOqx9wvSB7N8xk .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-uGzOqx9wvSB7N8xk .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-uGzOqx9wvSB7N8xk .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-uGzOqx9wvSB7N8xk .marker{fill:#333333;stroke:#333333;}#mermaid-svg-uGzOqx9wvSB7N8xk .marker.cross{stroke:#333333;}#mermaid-svg-uGzOqx9wvSB7N8xk svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-uGzOqx9wvSB7N8xk p{margin:0;}#mermaid-svg-uGzOqx9wvSB7N8xk .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-uGzOqx9wvSB7N8xk text.actor>tspan{fill:black;stroke:none;}#mermaid-svg-uGzOqx9wvSB7N8xk .actor-line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-uGzOqx9wvSB7N8xk .innerArc{stroke-width:1.5;stroke-dasharray:none;}#mermaid-svg-uGzOqx9wvSB7N8xk .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-uGzOqx9wvSB7N8xk .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-uGzOqx9wvSB7N8xk #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-uGzOqx9wvSB7N8xk .sequenceNumber{fill:white;}#mermaid-svg-uGzOqx9wvSB7N8xk #sequencenumber{fill:#333;}#mermaid-svg-uGzOqx9wvSB7N8xk #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-uGzOqx9wvSB7N8xk .messageText{fill:#333;stroke:none;}#mermaid-svg-uGzOqx9wvSB7N8xk .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-uGzOqx9wvSB7N8xk .labelText,#mermaid-svg-uGzOqx9wvSB7N8xk .labelText>tspan{fill:black;stroke:none;}#mermaid-svg-uGzOqx9wvSB7N8xk .loopText,#mermaid-svg-uGzOqx9wvSB7N8xk .loopText>tspan{fill:black;stroke:none;}#mermaid-svg-uGzOqx9wvSB7N8xk .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-uGzOqx9wvSB7N8xk .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-uGzOqx9wvSB7N8xk .noteText,#mermaid-svg-uGzOqx9wvSB7N8xk .noteText>tspan{fill:black;stroke:none;}#mermaid-svg-uGzOqx9wvSB7N8xk .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-uGzOqx9wvSB7N8xk .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-uGzOqx9wvSB7N8xk .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-uGzOqx9wvSB7N8xk .actorPopupMenu{position:absolute;}#mermaid-svg-uGzOqx9wvSB7N8xk .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mermaid-svg-uGzOqx9wvSB7N8xk .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-uGzOqx9wvSB7N8xk .actor-man circle,#mermaid-svg-uGzOqx9wvSB7N8xk line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-uGzOqx9wvSB7N8xk :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}par[并行执行]"检查订单系统的服务器磁盘和内存"解析意图 + 运维 Tools并行调用: check_disk_space + check_memoryPOST /api/exec {cmd: "df -h"}磁盘信息POST /api/exec {cmd: "free -h"}内存信息汇总结果生成分析报告"服务器状态正常:磁盘使用 65%,内存使用 12G/32G…"

六、运维能力扩展

除了调用子系统 API,AI Gateway 还支持通过 Agent 在服务器上执行运维操作,覆盖完整的运维场景:

6.1 双执行器模型

#mermaid-svg-tQHSx3A3oMXXX7aA{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-tQHSx3A3oMXXX7aA .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-tQHSx3A3oMXXX7aA .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-tQHSx3A3oMXXX7aA .error-icon{fill:#552222;}#mermaid-svg-tQHSx3A3oMXXX7aA .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-tQHSx3A3oMXXX7aA .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-tQHSx3A3oMXXX7aA .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-tQHSx3A3oMXXX7aA .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-tQHSx3A3oMXXX7aA .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-tQHSx3A3oMXXX7aA .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-tQHSx3A3oMXXX7aA .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-tQHSx3A3oMXXX7aA .marker{fill:#333333;stroke:#333333;}#mermaid-svg-tQHSx3A3oMXXX7aA .marker.cross{stroke:#333333;}#mermaid-svg-tQHSx3A3oMXXX7aA svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-tQHSx3A3oMXXX7aA p{margin:0;}#mermaid-svg-tQHSx3A3oMXXX7aA .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-tQHSx3A3oMXXX7aA .cluster-label text{fill:#333;}#mermaid-svg-tQHSx3A3oMXXX7aA .cluster-label span{color:#333;}#mermaid-svg-tQHSx3A3oMXXX7aA .cluster-label span p{background-color:transparent;}#mermaid-svg-tQHSx3A3oMXXX7aA .label text,#mermaid-svg-tQHSx3A3oMXXX7aA span{fill:#333;color:#333;}#mermaid-svg-tQHSx3A3oMXXX7aA .node rect,#mermaid-svg-tQHSx3A3oMXXX7aA .node circle,#mermaid-svg-tQHSx3A3oMXXX7aA .node ellipse,#mermaid-svg-tQHSx3A3oMXXX7aA .node polygon,#mermaid-svg-tQHSx3A3oMXXX7aA .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-tQHSx3A3oMXXX7aA .rough-node .label text,#mermaid-svg-tQHSx3A3oMXXX7aA .node .label text,#mermaid-svg-tQHSx3A3oMXXX7aA .image-shape .label,#mermaid-svg-tQHSx3A3oMXXX7aA .icon-shape .label{text-anchor:middle;}#mermaid-svg-tQHSx3A3oMXXX7aA .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-tQHSx3A3oMXXX7aA .rough-node .label,#mermaid-svg-tQHSx3A3oMXXX7aA .node .label,#mermaid-svg-tQHSx3A3oMXXX7aA .image-shape .label,#mermaid-svg-tQHSx3A3oMXXX7aA .icon-shape .label{text-align:center;}#mermaid-svg-tQHSx3A3oMXXX7aA .node.clickable{cursor:pointer;}#mermaid-svg-tQHSx3A3oMXXX7aA .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-tQHSx3A3oMXXX7aA .arrowheadPath{fill:#333333;}#mermaid-svg-tQHSx3A3oMXXX7aA .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-tQHSx3A3oMXXX7aA .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-tQHSx3A3oMXXX7aA .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-tQHSx3A3oMXXX7aA .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-tQHSx3A3oMXXX7aA .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-tQHSx3A3oMXXX7aA .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-tQHSx3A3oMXXX7aA .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-tQHSx3A3oMXXX7aA .cluster text{fill:#333;}#mermaid-svg-tQHSx3A3oMXXX7aA .cluster span{color:#333;}#mermaid-svg-tQHSx3A3oMXXX7aA div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-tQHSx3A3oMXXX7aA .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-tQHSx3A3oMXXX7aA rect.text{fill:none;stroke-width:0;}#mermaid-svg-tQHSx3A3oMXXX7aA .icon-shape,#mermaid-svg-tQHSx3A3oMXXX7aA .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-tQHSx3A3oMXXX7aA .icon-shape p,#mermaid-svg-tQHSx3A3oMXXX7aA .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-tQHSx3A3oMXXX7aA .icon-shape rect,#mermaid-svg-tQHSx3A3oMXXX7aA .image-shape rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-tQHSx3A3oMXXX7aA .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-tQHSx3A3oMXXX7aA .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-tQHSx3A3oMXXX7aA :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

运维通道

Tool 执行引擎

executor: http

executor: ops

优先

Agent 不可用

执行器路由\\n根据 YAML 中 executor 字段

HttpProxyExecutor\\n业务操作 → 调用 API

OpsExecutor\\n运维操作 → 执行命令

AgentChannel\\n优先:HTTP 调用 Agent

SshChannel\\n备选:SSH 直连

6.2 运维能力矩阵

类别能力风险等级
系统监控 磁盘 / CPU / 内存 / 网络 low
日志分析 查看日志、搜索错误 low
性能定位 JVM 线程栈、慢查询分析 low
代码定位 根据异常栈搜索源码、查看上下文 low
服务管理 重启 / 停止服务 high(需审批)
数据库 执行 SQL、连接数查看 high(需审批)
部署 发布 / 回滚 high(需审批)

6.3 安全机制

运维操作的安全通过四层机制保障:

命令白名单 → 角色权限 → 二次确认/审批 → 审计日志

  • 命令白名单:Agent 只允许执行预定义的命令模式,拒绝 rm -rf / 等危险操作
  • 角色权限:普通用户只能查看监控,运维人员可重启服务,管理员可执行数据库操作
  • 审批流程:高风险操作需管理员审批通过后才执行
  • 审计日志:所有运维操作全量记录,包括执行人、命令、结果、耗时

七、部署架构

7.1 部署拓扑

#mermaid-svg-22oLOAxi4qBmtYlC{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-22oLOAxi4qBmtYlC .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-22oLOAxi4qBmtYlC .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-22oLOAxi4qBmtYlC .error-icon{fill:#552222;}#mermaid-svg-22oLOAxi4qBmtYlC .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-22oLOAxi4qBmtYlC .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-22oLOAxi4qBmtYlC .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-22oLOAxi4qBmtYlC .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-22oLOAxi4qBmtYlC .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-22oLOAxi4qBmtYlC .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-22oLOAxi4qBmtYlC .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-22oLOAxi4qBmtYlC .marker{fill:#333333;stroke:#333333;}#mermaid-svg-22oLOAxi4qBmtYlC .marker.cross{stroke:#333333;}#mermaid-svg-22oLOAxi4qBmtYlC svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-22oLOAxi4qBmtYlC p{margin:0;}#mermaid-svg-22oLOAxi4qBmtYlC .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-22oLOAxi4qBmtYlC .cluster-label text{fill:#333;}#mermaid-svg-22oLOAxi4qBmtYlC .cluster-label span{color:#333;}#mermaid-svg-22oLOAxi4qBmtYlC .cluster-label span p{background-color:transparent;}#mermaid-svg-22oLOAxi4qBmtYlC .label text,#mermaid-svg-22oLOAxi4qBmtYlC span{fill:#333;color:#333;}#mermaid-svg-22oLOAxi4qBmtYlC .node rect,#mermaid-svg-22oLOAxi4qBmtYlC .node circle,#mermaid-svg-22oLOAxi4qBmtYlC .node ellipse,#mermaid-svg-22oLOAxi4qBmtYlC .node polygon,#mermaid-svg-22oLOAxi4qBmtYlC .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-22oLOAxi4qBmtYlC .rough-node .label text,#mermaid-svg-22oLOAxi4qBmtYlC .node .label text,#mermaid-svg-22oLOAxi4qBmtYlC .image-shape .label,#mermaid-svg-22oLOAxi4qBmtYlC .icon-shape .label{text-anchor:middle;}#mermaid-svg-22oLOAxi4qBmtYlC .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-22oLOAxi4qBmtYlC .rough-node .label,#mermaid-svg-22oLOAxi4qBmtYlC .node .label,#mermaid-svg-22oLOAxi4qBmtYlC .image-shape .label,#mermaid-svg-22oLOAxi4qBmtYlC .icon-shape .label{text-align:center;}#mermaid-svg-22oLOAxi4qBmtYlC .node.clickable{cursor:pointer;}#mermaid-svg-22oLOAxi4qBmtYlC .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-22oLOAxi4qBmtYlC .arrowheadPath{fill:#333333;}#mermaid-svg-22oLOAxi4qBmtYlC .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-22oLOAxi4qBmtYlC .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-22oLOAxi4qBmtYlC .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-22oLOAxi4qBmtYlC .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-22oLOAxi4qBmtYlC .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-22oLOAxi4qBmtYlC .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-22oLOAxi4qBmtYlC .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-22oLOAxi4qBmtYlC .cluster text{fill:#333;}#mermaid-svg-22oLOAxi4qBmtYlC .cluster span{color:#333;}#mermaid-svg-22oLOAxi4qBmtYlC div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-22oLOAxi4qBmtYlC .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-22oLOAxi4qBmtYlC rect.text{fill:none;stroke-width:0;}#mermaid-svg-22oLOAxi4qBmtYlC .icon-shape,#mermaid-svg-22oLOAxi4qBmtYlC .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-22oLOAxi4qBmtYlC .icon-shape p,#mermaid-svg-22oLOAxi4qBmtYlC .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-22oLOAxi4qBmtYlC .icon-shape rect,#mermaid-svg-22oLOAxi4qBmtYlC .image-shape rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-22oLOAxi4qBmtYlC .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-22oLOAxi4qBmtYlC .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-22oLOAxi4qBmtYlC :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

云端(如有外网)

客户现场 / 云服务器

AI 推理层

数据层

应用层

接入层

业务 Tool

运维 Tool

运维 Tool

方案 A

方案 B

Nginx\\n反向代理 + SSL

API Gateway\\n路由 + 鉴权

注册中心\\n(Nacos / Eureka)

AI Gateway 网关\\n独立 JDK 21 进程

子系统 A\\n(JDK 8)

子系统 B\\n(JDK 8)

Agent\\n(子系统 A 服务器)

Agent\\n(子系统 B 服务器)

MySQL 5.7\\n现有业务库

MySQL 8\\nAI Gateway 专用

本地大模型\\nOllama + Qwen\\n(纯内网方案)

云端大模型 API\\nDeepSeek / GPT-4

7.2 两种大模型部署方案

方案适用场景大模型优点缺点
方案 A:云端 API 服务器可访问外网 DeepSeek / GPT-4 / Qwen-Max 效果最好,无需 GPU 需要外网,有 API 费用
方案 B:本地私有化 纯内网环境 Ollama + Qwen2.5 / DeepSeek 数据不出内网,无 API 费用 需要 GPU 服务器

7.3 环境隔离

AI Gateway 网关与现有子系统的运行环境完全隔离:

维度AI Gateway 网关现有子系统
JDK 21(独立安装) 8
MySQL 8(独立实例,端口 3307) 5.7(端口 3306)
Spring Boot 3.x 2.x

两套环境互不干扰,AI Gateway 的安装和升级不影响现有业务系统。

八、接入一个新子系统需要做什么?

整个接入过程不需要修改网关代码,不需要修改子系统代码:

Step 1 确定子系统在注册中心的服务名称

Step 2 在 tools/ 下创建子系统目录

Step 3 编写 _system.yaml(服务名、领域知识、角色描述)

Step 4 为每个需要 AI 调用的 API 编写 Tool YAML

Step 5 (可选)编写运维 Tool YAML + 配置服务器信息

Step 6 重启网关(或触发热加载)

Step 7 前端传入对应 system_id 即可使用

典型工时:一个有 10 个 API 的子系统,约 1-2 天即可完成接入。

九、效果展示

接入后,用户在系统页面的 AI 对话窗口中可以这样交互:

👤 用户:帮我查一下今天所有异常订单

🤖 AI:正在查询异常订单…

⚙️ 调用工具: 查询订单 (status=异常, date=今天)
✅ 查询成功,返回 3 条记录

今天共有 3 笔异常订单:

| 订单号 | 客户 | 金额 | 异常原因 |
|——–|——|——|———-|
| ORD-001 | 张三 | ¥299 | 支付超时 |
| ORD-002 | 李四 | ¥1,580 | 库存不足 |
| ORD-003 | 王五 | ¥89 | 地址无效 |

建议处理:
– ORD-001:可自动重试支付
– ORD-002:需补货后重新发起
– ORD-003:需联系客户确认地址

👤 用户:订单系统服务器磁盘快满了吗?

🤖 AI:正在检查服务器磁盘…

🔧 执行运维命令: df -h (服务器: order-app-01)
✅ 执行完成

订单系统服务器磁盘使用情况:

| 分区 | 总容量 | 已用 | 可用 | 使用率 |
|——|——–|——|——|——–|
| / | 100G | 45G | 55G | 45% |
| /opt | 200G | 178G | 22G | 89% ⚠️ |

⚠️ /opt 分区使用率已达 89%,建议清理日志文件。
需要我帮你查看哪些日志文件占用空间最大吗?

十、总结

维度方案特点
通用性 一套网关对接任意子系统,YAML 配置驱动
零侵入 子系统不改一行代码
双模式 业务操作(HTTP 代理)+ 运维操作(Agent/SSH)
安全 二次确认 + 命令白名单 + 审批 + 审计
灵活部署 云端大模型 / 本地私有化,适配内外网
快速接入 新子系统 1-2 天完成接入

这套架构的本质是:把大模型的"理解能力"和现有系统的"执行能力"通过一个配置驱动的网关连接起来。大模型负责理解用户意图、拆解步骤、生成回复;网关负责将意图翻译为 API 调用或运维命令;子系统继续做它擅长的事情——执行业务逻辑。

三者各司其职,通过 YAML 配置松耦合连接,这就是 AI Gateway 的核心设计哲学。


如果你的 SaaS 系统也想拥有这样的 AI 对话能力,欢迎交流探讨。

赞(0)
未经允许不得转载:网硕互联帮助中心 » 通用 SaaS 系统如何接入 AI Gateway:让你的业务系统拥有 AI 对话能力
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!