1. 页面概览

Prompt 管理页(路由 /admin/prompts)是 AIP 管理后台面向管理员的提示词(Prompt)模板管理台。模板以「名称 + 模型族 + 版本 + 启用状态」组织,供 NLQ/Text2SQL 等链路渲染时引用;页面提供模板列表、新建模板、编辑(保存即新建版本并置为启用)、版本管理(版本列表、回滚、单版本删除)、compile 试算(占位符变量渲染并估算 Tokens)五类能力。所有请求经 aipClient/aip-api/v1 → AIP 18080),后端未就绪时优雅提示不白屏。

一句话总结:本页是 Prompt 模板的「列表 + 版本库 + 渲染试算」管理台,编辑即建新版本、可随时回滚,模板变更全程可追溯。

2. 访问入口

3. 界面布局

+--------------------------------------------------------------+
| Prompt 管理                          [新建模板]                |
| 模板列表:名称|模型族|版本|状态|描述|操作(编辑/版本管理/试算/删除) |
| 新建/编辑弹窗:名称*|模型族|描述|内容*(支持 {{var}} 占位符)     |
|   [取消] [创建 / 保存(新建版本)]                               |
| 版本管理弹窗:版本|模型族|状态|更新时间|操作(回滚/删除本版/当前版本) + 预览 |
| 试算渲染弹窗:变量行(key/value/删除) [+ 添加变量] [开始试算]      |
|   结果:模板版本 + 估算 Tokens + 渲染结果                        |
+--------------------------------------------------------------+

各板块职责:

4. 交互元素

控件位置含义与作用
新建模板页面头部打开新建弹窗,填名称/模型族/描述/内容后「创建」POST /prompts/templates
编辑行操作打开编辑弹窗,改 content/model_family/description,保存「保存(新建版本)」PUT /prompts/templates/:name
版本管理行操作打开版本弹窗,加载 GET /prompts/templates/:name/versions,列出版本与启用状态
回滚版本弹窗confirm 后 POST /prompts/templates/:name/versions/:v/rollback,把该版本设为启用并刷新
删除本版版本弹窗confirm 后 DELETE /prompts/templates/:name/versions/:v仅删除该单个历史版本;生效版本按钮禁用(需先回滚)
试算行操作打开试算弹窗,预设变量 Question/TableSchemas,可增删变量行,点「开始试算」POST /prompts/compile(body {template_name, variables});试算中按钮禁用并显示 spinner + 已用秒数,等待 ≥5s 时追加蓝色提示条说明 compile 为同步渲染、请勿重复点击
删除行操作confirm「此操作不可撤销」后 DELETE /prompts/templates/:name模板级,级联删除该模板全部版本

次要控件:顶部 alert 提示区(成功/失败/信息,右上角「关闭」);编辑保存、回滚与删除共用 submitting 禁用态(「提交中...」)。版本管理弹窗底部有常驻删除说明:行内「删除本版」经 DELETE /prompts/templates/:name/versions/:v 仅删除单个历史版本;当前生效版本不可删除(按钮禁用,需先回滚);列表行内「删除」为模板级操作、会级联删除全部版本,提示用户勿与本弹窗单版本删除混淆。

5. 后端关联

5.1 端点表

方法路径用途
GET/prompts/templates模板列表(name/model_family/version/active/description/content)
POST/prompts/templates新建模板
GET/prompts/templates/:name取指定模板的启用版本
PUT/prompts/templates/:name更新模板(后端新建版本 +1 并设为 active)
DELETE/prompts/templates/:name删除模板(模板级,级联全部版本)
GET/prompts/templates/:name/versions模板版本列表
DELETE/prompts/templates/:name/versions/:v删除单个版本(生效版本不可删,否则 409)
POST/prompts/templates/:name/versions/:v/rollback回滚到指定版本
POST/prompts/compile试算渲染,body {template_name, variables},返回 {name, version, rendered_content, estimated_tokens}
单版本删除已补齐(2026-09-14):新增 DELETE /prompts/templates/:name/versions/:vprompt/handler.goDeleteVersion,服务层 prompt/service.go 同名校验+删除)。服务层语义:按 (name, version) 精确定位,仅删除该行当前生效版本拒绝删除(返回 409 CONFLICT),理由见 §8 缺陷表与 API 文档 §5.1——active 是 GetActive/Compile/text2sql 运行时读取生效版本的唯一标记,模型未定义「删掉 active 后由谁上位」。模板级 DELETE /prompts/templates/:name(级联全版本)行为不变,前端两处入口已用文案明确区分。

5.2 关键机制

6. 权限与安全

7. 常见问题与排错

8. 已知缺陷与边界

说明
编辑不可改名名称仅在新建时填写,编辑弹窗不展示名称字段(由路由参数锁定)
单版本删除(已于 2026-09-14 补齐新增 DELETE /prompts/templates/:name/versions/:vprompt/handler.go DeleteVersion / prompt/service.go DeleteVersion)与版本弹窗行内「删除本版」。约束:当前生效版本不可删除(409),需先回滚到其它版本——active 是 GetActive/Compile/text2sql 运行时的唯一生效标记,模型无「active 被删后自动上位」规则。模板级 DELETE /prompts/templates/:name(级联全部版本)仍保留,两处入口文案已明确区分
无独立启用开关启用态由「最近一次保存/回滚」决定,无单独激活按钮
试算为同步请求(已加等待反馈)compile 为同步渲染,后端直接返回结果、无 task_idprompt/handler.go:162-178),无法做进度条;超大模板或复杂变量时响应耗时表现为页面等待。前端已加 spinner + 已用秒数 + ≥5s 提示条,按钮期间禁用防重复点击(已于 2026-09-13 补齐)
compile 契约(已于 2026-09-13 修正)请求体字段为 template_name、响应为 rendered_content/estimated_tokens/versionprompt/handler.go:163-167prompt/service.go:59-65);修正前前端误发 name、误读 rendered 会导致 400 与空结果

9. 2026-09-10 安全与行为修订

10. 2026-09-14 单版本删除补齐