1. 页面概览
Prompt 管理页(路由 /admin/prompts)是 AIP 管理后台面向管理员的提示词(Prompt)模板管理台。模板以「名称 + 模型族 + 版本 + 启用状态」组织,供 NLQ/Text2SQL 等链路渲染时引用;页面提供模板列表、新建模板、编辑(保存即新建版本并置为启用)、版本管理(版本列表与回滚)、compile 试算(占位符变量渲染并估算 Tokens)五类能力。所有请求经 aipClient(/aip-api/v1 → AIP 18080),后端未就绪时优雅提示不白屏。
一句话总结:本页是 Prompt 模板的「列表 + 版本库 + 渲染试算」管理台,编辑即建新版本、可随时回滚,模板变更全程可追溯。
2. 访问入口
- 路由与菜单:path
/admin/prompts、nameAdminPrompts、路由 title「Prompt 管理」,位于 AIP 管理后台侧边栏(菜单项「Prompt 管理」);源码action/web/src/views/PromptManagePage.vue。 - 认证与权限:父路由
/admin配置requiresAuth: true, requiresAdmin: true,需登录且aip_is_admin === '1';请求经 aipClient 附带 aip_token,401 清 token 跳登录页。 - 端口与 API 前缀:AIP 后端 18080,前端 baseURL
/aip-api/v1(Vite 将/aip-api重写为/api)。
3. 界面布局
+--------------------------------------------------------------+
| Prompt 管理 [新建模板] |
| 模板列表:名称|模型族|版本|状态|描述|操作(编辑/版本管理/试算/删除) |
| 新建/编辑弹窗:名称*|模型族|描述|内容*(支持 {{var}} 占位符) |
| [取消] [创建 / 保存(新建版本)] |
| 版本管理弹窗:版本|模型族|状态|更新时间|操作(回滚/当前版本) + 预览 |
| 试算渲染弹窗:变量行(key/value/删除) [+ 添加变量] [开始试算] |
| 结果:估算 Tokens + 渲染结果 + 警告 |
+--------------------------------------------------------------+
各板块职责:
- 模板列表:核心区,展示 name/model_family/version/active(启用行浅绿高亮 row-active),行操作编辑、版本管理、试算、删除。
- 新建/编辑弹窗:名称仅在新建时填写;编辑只改内容/模型族/描述,保存即新建版本并启用。
- 版本管理弹窗:列出全部版本,启用中版本按钮显示「当前版本」并禁用回滚;点击版本行下方展示该版本内容预览。
- 试算渲染弹窗:按行输入占位符变量,展示渲染后的模板与
estimated_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,把该版本设为启用并刷新 |
| 试算 | 行操作 | 打开试算弹窗,预设变量 Question/TableSchemas,可增删变量行,点「开始试算」POST /prompts/compile |
| 删除 | 行操作 | confirm「此操作不可撤销」后 DELETE /prompts/templates/:name |
次要控件:顶部 alert 提示区(成功/失败/信息,右上角「关闭」);编辑保存与回滚共用 submitting 禁用态(「提交中...」)。
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 | 模板版本列表 |
| POST | /prompts/templates/:name/versions/:v/rollback | 回滚到指定版本 |
| POST | /prompts/compile | 试算渲染,body {name, variables} |
5.2 关键机制
- 版本化保存:编辑保存走 PUT,后端对模板新建版本号 +1 并设为 active;列表与版本弹窗中的「启用中」状态即由 active 标记,回滚同样通过切换 active 实现。
- compile 试算:前端把变量行拼成
{key: value}对象,后端用 Go text/template 渲染并估算 Tokens,返回rendered / estimated_tokens / warnings;未填变量值时仅查看原模板。 - 占位符语法:模板内容支持
{{var}}形式占位符,前端示例变量为 Question、TableSchemas。 - 响应结构:统一
{code, data, trace_id}包裹,模板列表响应为{templates: [...]};错误取message/error展示。
6. 权限与安全
- 全部
/prompts/*路由挂在 admin 管理组,仅管理员可读写;列表请求需有效 aip_token。 - 删除与回滚均有 confirm 二次确认,删除不可撤销。
- 模板内容为内部提示词工程资产,前端不对外暴露脱敏逻辑。
7. 常见问题与排错
- 现象:页面提示「加载模板列表失败:...」。原因:后端未启动、Token 失效或代理未指向 18080。处理:确认 AIP 服务存活、重新登录、检查
/aip-api代理。 - 现象:编辑保存后列表版本号未变化。原因:保存请求实际失败(网络/后端写入失败),alert 报「保存失败」。处理:按提示检查请求与后端日志,成功后页面自动
fetchTemplates刷新。 - 现象:试算结果中变量未被替换。原因:变量名与模板占位符不一致,或只填了变量名未填值。处理:确认占位符写法为
{{var}}且与变量 key 完全一致,值为空时仅查看原模板。 - 现象:操作时跳转登录页(401)。原因:aip_token 过期被响应拦截器清理。处理:重新登录后重试。
8. 已知缺陷与边界
| 项 | 说明 |
|---|---|
| 编辑不可改名 | 名称仅在新建时填写,编辑弹窗不展示名称字段(由路由参数锁定) |
| 版本无限增长 | 每次编辑都新建版本,无版本合并/清理入口 |
| 无独立启用开关 | 启用态由「最近一次保存/回滚」决定,无单独激活按钮 |
| 试算为同步请求 | compile 为同步渲染,超大模板或复杂变量时响应耗时直接表现为页面等待 |