简介
本开发文档面向内容创作者与开发者,系统化说明 DouPHP 的内容创作辅助能力。围绕“文章生成、文案优化、标题创作、SEO 优化、多语言翻译、图像/Banner 生成”等场景,文档从提示词设计、模板系统、风格适配、质量检查、重复检测、版权合规到发布流程,给出可落地的实现要点与扩展规范。通过配置化的应用形态(assist/fill/batch/translate)与任务类型(assist/polish/rewrite/image/banner/fill/batch/translate),结合 JSON Schema 输出契约与异步任务机制,形成稳定可控的 AI 内容生产流水线。
项目结构
AI 内容创作相关代码主要分布在后台管理端与服务层:
- 控制器层:路由入口与页面渲染,如 AI 应用列表、新增编辑、字段生成、批量生成、翻译、任务管理等。
- 服务层:业务编排与策略控制,包括生成引擎、提示词组装、模块字段与 Schema 构建、应用策略、用量记录、异步任务提交等。
- 配置层:内置提示词、图像尺寸策略、Banner 素材限制等。
- 语言包:界面文案与提示词标签。
graph TB
A["后台控制器<br/>AiController"] --> B["应用服务<br/>ApplicationService"]
A --> C["生成服务<br/>GenerateService"]
A --> D["任务服务<br/>TaskService"]
C --> E["提示词组合器<br/>PromptComposer"]
E --> F["提示词目录<br/>PromptCatalog"]
C --> G["Schema 构建器<br/>SchemaBuilder"]
C --> H["应用策略<br/>ApplicationPolicy"]
C --> I["用量记录器<br/>UsageRecorder"]
C --> J["AI 网关<br/>AiGateway(外部)"]
C --> K["尺寸归一化<br/>ImageSizeNormalizer"]
核心组件
- 生成引擎(GenerateService):统一编排 assist/fill/batch/translate/image/banner 的生成流程,负责消息组装、Schema 校验、调用 AI 网关、用量记录、异步任务提交与结果处理。
- 提示词系统(PromptComposer + PromptCatalog):按 task_type 与 placement 两维拼装 system/user 消息;支持 banner 风格、参考图用法、表单快照注入与 instruction 占位替换。
- 模块字段与 Schema(SchemaBuilder):动态扫描模块表字段,过滤系统列与黑名单,生成 LLM 友好的 JSON Schema,用于结构化生成与入库。
- 应用策略(ApplicationPolicy):约束 placement 与 task_type 匹配、模型能力判定、批量数量范围控制。
- 用量与审计(UsageRecorder):记录每次调用的 token、时长、错误信息、提示词与响应摘要,支持异步任务成功补记与过期清理。
- 配置与本地化(config/ai.php + 语言包):集中管理提示词正本、图像尺寸策略、Banner 素材上限与界面文案。
架构总览
整体采用“控制器 → 服务 → 网关/驱动”的分层架构。控制器接收请求并委托服务完成业务编排;服务通过 AiGateway 与具体供应商驱动交互;提示词与 Schema 在运行时动态组装,确保不同模块、不同任务类型的通用性与可扩展性。
sequenceDiagram
participant U as "管理员"
participant C as "AiController"
participant S as "GenerateService"
participant P as "PromptComposer"
participant G as "AiGateway"
participant R as "UsageRecorder"
U->>C : 触发生成字段/批量/翻译/图像
C->>S : 调用对应生成方法
S->>P : 组装 messages / image prompt
P-->>S : 返回消息或单段提示词
S->>G : chat/chatJson/generateImage
G-->>S : 返回结果{success, content/data, usage}
S->>R : 记录用量与元数据
S-->>C : 返回文本/结构化数据/任务ID
C-->>U : 展示结果或轮询状态
详细组件分析
生成引擎(GenerateService)
- 职责:根据应用 placement 与 task_type 选择路径,组装提示词,调用 AI 网关,记录用量,必要时提交异步任务。
- 关键流程:
- batch:校验模块支持 → 去重守卫 → 计算 schema → 尝试异步提交 → 同步则 chatJson → 导入入库。
- fill:计算 schema → 尝试异步 → chatJson → 返回字段值供前端回填。
- assist:区分文本与图像应用;文本走 chat,图像走 generateImage,并处理尺寸归一化与参考图解析。
- translate:按 placement=translate 组装消息并返回译文。
- 质量与安全:
- 应用策略校验 placement/task_type 与模型能力。
- 批量请求指纹去重,防止重复提交。
- 图像尺寸归一化,避免非法尺寸导致上游失败。
- 参考图白名单与大小限制,仅当驱动支持图生图时解析。
flowchart TD
Start(["进入 generateField"]) --> CheckApp{"是否图像应用?"}
CheckApp --> |是| BuildImg["构建图像提示词<br/>尺寸归一化/参考图解析"]
BuildImg --> CallImg["调用 generateImage"]
CallImg --> ImgResult{"成功?"}
ImgResult --> |否| ThrowErr["抛出错误"]
ImgResult --> |是| ReturnTask["返回任务结果数组"]
CheckApp --> |否| ComposeMsg["组装 messages"]
ComposeMsg --> CallChat["调用 chat"]
CallChat --> ChatOk{"成功?"}
ChatOk --> |否| ThrowErr
ChatOk --> |是| ReturnText["返回字段正文"]
提示词系统(PromptComposer + PromptCatalog)
- 提示词目录(PromptCatalog):从配置读取 system/instruction/labels/banner_styles/banner_material,提供安全取值与缺失报错。
- 提示词组合器(PromptComposer):
- 文本应用:system 取 task_type 对应指令;user 拼接站点知识、表单快照、当前字段值、应用默认要求、用户当次要求。
- 图像应用:将任务基调、banner 布局/风格/标题、表单主题材料、应用默认要求、用户要求合并为单段 prompt。
- 优势:将提示词正本集中在配置中,便于统一管理与多语言界面文案分离。
classDiagram
class PromptCatalog {
+system(taskType) string
+instruction(placement, vars) string
+bannerStyle(key) string
+bannerMaterial(mode) string
+label(key) string
}
class PromptComposer {
+compose(app, options) array
+imagePrompt(app, options) string
+instruction(placement, vars) string
}
PromptComposer --> PromptCatalog : "读取提示词"
模块字段与 Schema(SchemaBuilder)
- 模块列表:基于已安装模块与 link_ai 配置,自动派生分类变体。
- 字段集:扫描数据库表字段,排除系统列与黑名单(媒体、价格、库存、凭据等),映射 JSON Schema 类型与最大长度。
- 输出契约:按 placement 生成 schema(batch 包裹 items 数组;fill/assist/translate 为单对象),用于结构化生成与校验。
flowchart TD
M["选择模块"] --> Scan["SHOW COLUMNS 获取字段"]
Scan --> Filter["过滤系统列/黑名单"]
Filter --> Map["映射类型/长度/描述"]
Map --> Schema{"placement 类型?"}
Schema --> |batch| Items["items 数组 schema"]
Schema --> |fill/assist/translate| Single["单对象 schema"]
应用策略(ApplicationPolicy)
- 批量数量:按应用 config 的 min/max 限制,并设置全局上限。
- 形态匹配:placement 与 task_type 的合法映射。
- 模型能力:依据模型代码约定判断是否支持图像/视频类任务。
用量记录(UsageRecorder)
- 同步调用:记录 token、时长、错误信息、提示词与响应摘要,更新 key 活跃度与失败计数。
- 异步任务:首次到达 succeeded 态补记用量,锁定防重入,保留原始 usage 于 metadata。
- 数据治理:定期清理过期提示词与响应内容,限制存储大小。
任务服务(TaskService)
- 异步任务提交:校验应用状态,兜底 instruction,白名单透传参数,调用网关提交任务。
- 任务列表:分页查询,补齐模型/供应商/管理员名称映射,兼容删除后的旧任务显示。
- 删除:终态任务可删,二次确认。
依赖关系分析
- 控制器依赖 ApplicationService 与 GenerateService,后者再依赖 PromptComposer、SchemaBuilder、ApplicationPolicy、UsageRecorder 与 AiGateway。
- PromptComposer 依赖 PromptCatalog 与 SiteKnowledgeBuilder(站点知识)。
- 图像生成链路依赖 ImageSizeNormalizer 进行尺寸归一化,并在驱动层执行文生图。
- 配置与语言包贯穿提示词与界面文案,保证一致性与可维护性。
graph LR
Ctrl["AiController"] --> AppSvc["ApplicationService"]
Ctrl --> GenSvc["GenerateService"]
GenSvc --> PC["PromptComposer"]
PC --> Cat["PromptCatalog"]
GenSvc --> SB["SchemaBuilder"]
GenSvc --> AP["ApplicationPolicy"]
GenSvc --> UR["UsageRecorder"]
GenSvc --> GW["AiGateway"]
GenSvc --> ISN["ImageSizeNormalizer"]
性能与扩展性
- 提示词与 Schema 在运行时动态组装,减少硬编码成本,提升扩展性。
- 批量生成支持异步任务提交,降低长耗时对请求的影响。
- 用量记录限长与过期清理,避免日志膨胀影响性能。
- 图像尺寸归一化与参考图白名单,减少无效请求与资源浪费。
- 建议:
- 对高频场景启用缓存(如模块字段、提示词片段)。
- 合理设置批量上限与重试策略,避免雪崩。
- 针对大模型调用增加超时与熔断保护。
故障排查指南
- 常见错误定位:
- 应用未找到或状态异常:检查应用是否存在且启用。
- 模型与任务不匹配:确认 task_type 与模型能力。
- 提示词缺失:检查 ai.prompts 配置与语言包键值。
- 图像提示词为空:确认 banner 弹窗参数与参考图解析。
- 批量重复提交:检查指纹去重逻辑与并发控制。
- 排查步骤:
- 查看用量日志中的 error_message 与 endpoint。
- 核对提示词预览输出是否符合预期。
- 检查模块字段与 Schema 是否正确生成。
- 验证图像尺寸与参考图格式是否受支持。
结论
DouPHP 的内容创作辅助以“配置化提示词 + 动态 Schema + 策略控制 + 用量审计”为核心,覆盖文本与图像两类生成场景,并通过异步任务与尺寸归一化提升稳定性与可用性。借助模块化与分层架构,平台可快速扩展新的模块、任务类型与供应商驱动,满足企业官网内容生产的多样化需求。
附录:集成与使用示例
- 集成内容生成 API(字段辅助):
- 在后台表单页调用字段生成接口,传入 appId、field、userPrompt、formSnapshot、currentModule、size/contentAlign/banner 等参数。
- 服务端由 GenerateService 组装提示词并调用 AiGateway,返回文本或任务结果。
- 参考路径:admin/service/ai/GenerateService.php:215-326
- 自定义写作模板:
- 在 config/ai.php 的 prompts.system 与 prompts.instruction 中定义不同 task_type 与 placement 的提示词。
- 通过 PromptComposer 与 PromptCatalog 在运行时加载,无需修改业务代码。
- 参考路径:config/ai.php:31-98,admin/service/ai/Prompt/PromptComposer.php:51-111
- 实现内容审核流程:
- 利用 SchemaBuilder 的字段黑名单与类型约束,避免敏感字段被生成。
- 在生成后加入规则校验(如关键词、长度、HTML 标签),不符合则退回人工编辑。
- 参考路径:admin/service/ai/SchemaBuilder.php:103-155
- 版本管理与协作编辑:
- 通过应用配置(config)保存模板版本,配合变更日志与回滚策略。
- 结合后台操作日志与用量记录,追踪谁在何时修改了模板与触发了生成。
- 参考路径:admin/service/ai/ApplicationService.php:204-236,admin/service/ai/UsageRecorder.php:58-103
- 发布流程:
- 生成完成后,前端提供“使用结果”按钮,将文本或图片写入表单并提交。
- 批量生成通过 BatchImportManager 直接入库,支持上下文(分类/父级)与错误统计。
- 参考路径:admin/service/ai/GenerateService.php:102-156