文档目录
AI功能API

简介

本文件面向AI应用开发者,系统化梳理本项目中AI能力相关的API与实现要点,覆盖以下方面:

  • 智能聊天:对话发送、消息接收、上下文拼装与提示词模板。
  • 图像生成:提示词构建、尺寸归一化、参考图处理、结果返回与任务轮询。
  • 健康检测:系统状态监控、指标采集与健康检查入口。
  • AI任务管理:任务提交、状态查询、产物获取、删除等。
  • 模型配置与管理:供应商、密钥、模型元数据增删改查与启用切换。
  • 容错机制:限流、熔断、降级策略在关键路径中的体现。
  • 性能优化:异步驱动、白名单透传、批量去重、图片安全校验等。

项目结构

AI相关能力主要分布在后台控制器与服务层,并通过统一的网关与驱动抽象对接外部AI服务;健康模块提供独立的健康档案与小程序入口。

graph TB
subgraph "后台"
AC["AiController"]
TC["TaskController"]
MC["ModelController"]
HC["HealthController(后台)"]
end
subgraph "服务层"
GS["GenerateService"]
TS["TaskService"]
HS["HealthService"]
end
subgraph "核心网关"
AG["AiGateway"]
DR["DriverFactory / AsyncDriverInterface"]
end
subgraph "配置"
CFG["ai.php"]
end
AC --> GS
TC --> TS
MC --> |"增删改供应商/密钥/模型"| MC
TC --> AG
GS --> AG
TS --> AG
AG --> DR
GS --> CFG
TC --> CFG
HC --> HS

核心组件

  • 应用与提示词编排:通过应用配置(placement/task_type)与内置提示词模板组装消息,支持文本/翻译/表单填充/批量生成。
  • 图像生成流水线:提示词构建、尺寸归一化、参考图解析、调用文生图驱动,统一返回任务结果供前端轮询或同步展示。
  • 异步任务:基于驱动是否实现异步接口自动选择同步/异步路径,并提供任务提交、轮询、产物下载、删除等能力。
  • 模型与供应商管理:以供应商为主键组织密钥与模型行,支持批量增改、启用/停用、事务性写入。
  • 健康检测:提供后台健康档案管理与小程序端入口,便于业务侧接入健康检查。

架构总览

AI能力通过“控制器→服务→网关→驱动”的分层设计解耦业务与外部AI服务,同时以配置集中管理提示词、图像尺寸策略与素材限制。

sequenceDiagram
participant FE as "前端/客户端"
participant C as "TaskController"
participant S as "TaskService"
participant G as "AiGateway"
participant D as "驱动(同步/异步)"
participant R as "任务存储"
FE->>C : POST 提交任务(app_id, prompt, 可选size/width/height/duration/resolution)
C->>S : submit(app_id, prompt, admin_id, post)
S->>G : submitAsyncTask(model_id, params, meta)
alt 驱动为异步
G-->>S : {success : true, task_id, status}
S-->>C : {task_id, status}
C-->>FE : JSON 返回任务ID与状态
else 驱动为同步
G->>D : 直接调用并返回结果
D-->>G : 成功/失败
G-->>S : {success, data/error}
S-->>C : 结果
C-->>FE : JSON 返回内容或错误
end

详细组件分析

智能聊天与上下文管理

  • 提示词模板与标签:按任务形态(assist/polish/rewrite/image/banner/translate/fill/batch)与放置位(assist/translate/fill/batch)组合生成消息。
  • 上下文拼装:站点基础信息、表单快照、当前字段值、用户要求等段落由提示词编排器注入。
  • 输出契约:结构化输出使用Schema约束(fill/batch),纯文本场景直接返回正文。
flowchart TD
A["输入: app_id, placement, user_prompt"] --> B["加载应用与模型配置"]
B --> C{"是否图像应用?"}
C -- 否 --> D["组装messages(system/user/labels)"]
D --> E["调用chat/chatJson"]
E --> F{"成功?"}
F -- 是 --> G["记录用量并返回content/data"]
F -- 否 --> H["抛出错误"]
C -- 是 --> I["构建图像提示词+尺寸归一化+参考图"]
I --> J["调用generateImage或submitAsyncTask"]
J --> K["返回任务结果或图片数据"]

图像生成功能

  • 提示词构建:根据banner风格、目标尺寸、内容对齐、参考图用法等注入指令。
  • 尺寸归一化:按模型族/供应商策略将极端比例映射为合法预设,必要时回退默认尺寸。
  • 参考图处理:仅当上游支持图生图时解析data URI或本地附件为base64载体,限制数量与大小。
  • 结果返回:同步驱动直接返回图片数据;异步驱动返回任务ID与状态,前端轮询获取产物。
sequenceDiagram
participant UI as "前端弹窗"
participant GS as "GenerateService"
participant GW as "AiGateway"
participant DR as "驱动"
UI->>GS : generateField(field, snapshot, size, banner)
GS->>GS : buildImagePrompt(尺寸/风格/参考图)
GS->>GW : generateImage(model_id, params)
alt 同步驱动
GW->>DR : 文生图请求
DR-->>GW : 图片数据
GW-->>GS : {success, data}
GS-->>UI : 图片数据
else 异步驱动
GW->>DR : 提交任务
DR-->>GW : {task_id, status}
GW-->>GS : 任务结果
GS-->>UI : {task_id, status}
end

AI任务管理

  • 提交任务:校验应用与提示词,白名单透传参数(size/width/height/duration/resolution),交由网关提交。
  • 轮询状态:直接调用网关轮询,终态成功时补记用量。
  • 产物获取:仅从任务结果中解析URL或data URI,服务端代取并做类型/大小校验后返回base64。
  • 删除任务:二次确认,终态可删。
sequenceDiagram
participant FE as "前端"
participant TC as "TaskController"
participant TS as "TaskService"
participant AG as "AiGateway"
FE->>TC : GET show?id=taskId
TC->>AG : pollAsyncTask(taskId)
AG-->>TC : {status, success, error?}
alt 成功且succeeded
TC->>TS : findTask(taskId)
TC->>TC : recordAsyncTaskSuccess(task, ip)
end
TC-->>FE : JSON 任务状态

健康检测功能

  • 后台健康档案:列表、详情、状态切换、允许编辑开关、随访记录CRUD、字段配置。
  • 小程序入口:健康模块入口控制器用于路由收录与兜底响应。
flowchart TD
H1["HealthController(后台)"] --> H2["HealthService.buildHealthListData"]
H1 --> H3["HealthService.buildHealthViewData"]
H1 --> H4["HealthService.delete / action"]
H1 --> H5["HealthService.followupAdd/Update/Delete"]
H1 --> H6["HealthService.fieldStore/Update/Delete"]
API["HealthController(API)"] --> |index| RESP["返回空成功响应"]

模型配置与管理

  • 供应商维度管理:列表、新增、编辑、删除、批量操作。
  • 密钥与模型行式表格:随表单统一提交,单事务内处理供应商、密钥、模型的增改删。
  • 启用/停用:行内快捷切换供应商状态。
classDiagram
class ModelController {
+index(request) Response
+create() Response
+store(formRequest, request) Response
+edit(request) Response
+update(formRequest, request) Response
+destroy(request) Response
+action(request) Response
+toggleStatus(request) Response
}

依赖关系分析

  • 控制器依赖服务:AiController→ApplicationService;TaskController→TaskService;ModelController→ModelService;HealthController→HealthService。
  • 服务依赖网关与驱动:GenerateService/TaskService→AiGateway→DriverFactory/AsyncDriverInterface。
  • 配置集中:ai.php提供提示词、图像尺寸策略、素材上限等全局配置。
graph LR
AC["AiController"] --> ASvc["ApplicationService"]
TC["TaskController"] --> TSvc["TaskService"]
MC["ModelController"] --> MSvc["ModelService"]
HC["HealthController"] --> HSvc["HealthService"]
TSvc --> AG["AiGateway"]
ASvc --> AG
AG --> DF["DriverFactory / AsyncDriverInterface"]
TSvc --> CFG["ai.php"]
ASvc --> CFG

性能与资源管理

  • 异步优先:对图像/视频等长耗时任务,若驱动实现异步接口则自动走异步路径,降低阻塞。
  • 白名单透传:仅允许size/width/height/duration/resolution等受控参数透传给驱动,避免任意参数注入。
  • 批量去重:批量生成前基于指纹防重复提交,避免重复计算与入库。
  • 图片安全:产物下载严格校验MIME、大小与格式,防止SSRF与恶意文件注入。
  • 尺寸归一化:按模型族/供应商策略将非标准尺寸映射为合法预设,减少失败重试。
  • 用量记录:所有生成路径均记录用量,便于成本核算与限流策略依据。

故障排查指南

  • 任务提交失败:检查应用是否存在且启用、提示词是否为空、模型是否支持该任务类型。
  • 轮询失败:确认任务ID有效、任务处于终态后再读取产物;注意网络超时与远程地址策略。
  • 图片下载失败:校验URL来源是否来自任务结果、MIME是否为image/*、大小是否超限、格式是否受支持。
  • 批量生成重复:检查指纹是否命中去重锁;失败会释放锁,需重试。
  • 模型不匹配:应用绑定的模型不支持所选任务类型时会拒绝执行。

结论

本项目AI能力采用清晰的分层架构与可插拔驱动设计,结合集中化的提示词与图像尺寸配置,实现了文本生成、翻译、表单填充、批量生成与图像生成的完整链路。通过异步优先、白名单透传、批量去重与安全校验等手段,兼顾了性能与安全性。健康模块提供了独立的档案管理与小程序入口,便于业务扩展。建议在实际集成中关注用量记录与限流策略,结合驱动特性选择合适的同步/异步路径,以获得更稳定的用户体验。

附录:接口清单

以下为与AI能力直接相关的后端接口概览(路由命名来源于控制器注释与方法名):

  • AI应用管理
    • 列表/创建/编辑/更新/删除/批量操作/获取字段
    • 对应控制器:AiController
  • AI任务管理
    • 提交任务、轮询状态、获取产物图片、删除任务
    • 对应控制器:TaskController
  • 模型与供应商管理
    • 列表/创建/编辑/更新/删除/批量操作、启用/停用
    • 对应控制器:ModelController
  • 健康检测
    • 后台:档案列表/详情/删除/批量、状态切换、随访CRUD、字段配置
    • 小程序:模块入口(index)
    • 对应控制器:HealthController(后台)、HealthController(API)
添加日期:2026-10-05