规范与实现解析)
Nightingale AICopilot 每页快捷提示词recommend_action规范与实现解析【免费下载链接】nightingaleNightingale is to monitoring and alerting what Grafana is to visualization.项目地址: https://gitcode.com/GitHub_Trending/ni/nightingaleNightingale夜莺的 AI 助手 AICopilot 在新会话创建后会在空白对话面板上展示一组快捷提示词按钮用户点击即可一键发起一轮高质量对话。本文基于仓库中的共享规范文档 doc/api/ai-chat-recommend-action.md完整介绍这些快捷提示词的设计约定、各页面explorer、dashboards、alert_rule 等的预设文案、它们如何被组装成/message/new请求以及后端如何依据content走「创建意图快路径」或「通用 agent」的确定性路由并补充对应源码实现细节。读完本文你将掌握为任意页面新增或修改快捷提示词的标准步骤以及从点击按钮到工具执行的全链路原理。一、背景什么是每页快捷提示词recommend_action当用户在前端某个页面如指标探索器、仪表盘列表、告警规则列表新建一个 AICopilot 会话时空白会话面板上会出现若干个快捷提示词按钮其文案由/chat/new请求中携带的page字段决定。需要特别注意的是这些预设提示词是硬编码在前端并维护的不再由后端/chat/new接口下发。本规范文档的作用是作为前后端共享的约定——前端据此维护按钮文案与请求组装后端据此解析处理路径。从源码结构看会话对象会持久化页面来源信息models/ai_assistant.go 中AssistantChat.PageFrom的类型AssistantPageInfo包含Page页面类型与Param页面级上下文例如 explorer 页可携带datasource_type、datasource_id。二、设计约定快捷提示词如何变成一条消息每个快捷提示词最终都会被前端组装成一次/message/new调用query字段的填充规则如下字段来源说明query.content本文各页表格中的 text 列直接作为用户消息内容query.action.param/chat/new上使用的param即该会话page_from.param前端把页面级上下文透传给 actionquery.page_from当前会话的page_from与/chat/new请求中携带的一致不要发送action.key该字段已废弃后端不再读取它前端发送前会剥离。处理路径由后端从content确定性解析——创建型文案命中creation关键词快路径其余一律进入general_chat通用 agent。这一点在后端得到了印证models/ai_assistant.go 中AssistantActionKey仅保留general_chat与creation两个 action历史上更多的专用 action 常量已随路由收缩删除。以下是在 explorer 页面点击第一个快捷提示词时前端发出的完整请求示例{ chat_id: ..., query: { content: Generate a query for host CPU usage, action: { param: { datasource_type: prometheus, datasource_id: 1 } }, page_from: { page: explorer, param: { datasource_type: prometheus, datasource_id: 1 } } } }对应到后端数据结构models/ai_assistant.go 的AssistantMessageQuery正是Content、Action、PageFrom三个字段的组合。三、各页面预设提示词总览page来源页面提示词数量建议的 pageparam字段explorer指标探索器3datasource_type,datasource_iddashboards仪表盘列表3busi_group_id可选alert_rule告警规则列表3busi_group_id可选alert_history历史告警列表3可省略active_alert活跃告警列表3可省略notify_tpl通知模板配置4可省略datasource数据源配置3datasource_type,datasource_id可选alert_event_detail告警事件详情3event_id必填可选rule_id,target_ident,datasource_id任何未在上表列出的page值不会展示快捷提示词。后端侧AssistantPageType常量在 models/ai_assistant.go 中目前定义了 7 个页面类型dashboards、alert_history、active_alert、explorer、notify_tpl、datasource、alert_rule文档中的alert_event_detail未出现在该枚举中若需要新增此类页面类型应按下文「添加或修改预设提示词」的步骤同步注册以免/chat/new将其视为未知页面。四、各页面提示词文案明细文案的多语言本地化由前端根据当前 UI 语言就地处理下表列出英文默认与简体中文其他语言由前端从其 i18n 资源中补齐。4.1explorer— 指标探索器#English (default)zh_CN1Generate a query for host CPU usage帮我生成一个查询主机 CPU 使用率的语句2Generate a query for memory usage帮我生成一个查询机器内存使用率的语句3Generate a query for host disk usage帮我生成一个查询机器磁盘使用率的语句param通常携带当前查询编辑器的数据源datasource_type、datasource_id。后端会将其注入提示词并转发到查询工具层。生成的查询语句以 Markdown 代码块形式内嵌在markdown类型回答的正文中。4.2dashboards— 仪表盘列表#English (default)zh_CN1Create a Host machine dashboard帮我创建一个 Host 机器的仪表盘2Create a MySQL dashboard帮我创建一个 MySQL 的仪表盘3Create a Redis dashboard帮我创建一个 Redis 的仪表盘这些提示词会命中后端creation关键词快路径并触发 preflight若param缺少busi_group_id等必需上下文后端会先返回一个form_select表单由用户补充后再继续。4.3alert_rule— 告警规则列表#English (default)zh_CN1Create a CPU usage alert rule with a threshold above 80%创建一条 CPU 使用率超过 80% 的告警规则2Create a host down alert rule based on target heartbeat loss创建一条主机失联的告警规则3Create a disk usage alert rule with a threshold above 85%创建一条机器磁盘使用率超过 85% 的告警规则与dashboards一样这些文案同样命中创建快路径并经过 preflight其中create-alert-rule技能同时要求busi_group_id与datasource_id。4.4alert_history— 历史告警列表#English (default)zh_CN1Summarize alert trends in the current filter range总结当前筛选范围内的告警趋势2Which alert rules fired most frequently哪些告警规则触发最频繁3Break down current alerts by severity, busi group and target按级别、业务组、对象拆解当前告警4.5active_alert— 活跃告警列表#English (default)zh_CN1Summarize the distribution of currently active alerts总结当前活跃告警的分布情况2Which rules or targets have the most active alerts哪些规则或对象的活跃告警最多3Group current active alerts by severity and busi group按级别和业务组汇总当前活跃告警4.6notify_tpl— 通知模板配置#English (default)zh_CN1Add hostname and severity label to the notification template在通知模板中加入主机名和告警级别2Format trigger_value with two decimal places in the template把 trigger_value 保留两位小数3Include a runbook link in the notification template在通知模板中加入排障文档链接4Add alert duration and first triggered time to the template在模板中加入告警持续时间和首次触发时间4.7datasource— 数据源配置#English (default)zh_CN1Diagnose why datasource connection fails with an x509 certificate error数据源连接报 x509 证书错误如何排查2My datasource test returns 401 unauthorized, how to fix数据源测试连通返回 401 怎么解决3Help me write the correct URL for connecting Nightingale to this datasource帮我写这个数据源的正确接入 URL4.8alert_event_detail— 告警事件详情#English (default)zh_CN1Analyze the root cause of this alert event分析这条告警事件的根因2Find similar historical alerts on the same target/rule查找同对象/同规则下的相似历史告警3Show other active alerts on the same target around this time看下同一对象在这个时间点附近还有哪些活跃告警param必须携带event_id后端将其注入提示词上下文使通用 agent 能够调用get_alert_event_detail等工具读取事件详情。同时传入rule_id、target_ident、datasource_id可以减少后续追问。五、后端如何解析处理路径creation 快路径与 general_chat快捷提示词只负责把用户意图变成一条消息真正的路由由后端在 center/router/router_ai_assistant.go 的resolveActionKey中确定性完成纯函数、零 LLM 调用优先级如下fast— 创建动词命中 →creation保住零 LLM 即时弹出业务组表单的 UXimport— 导入现成规则包/模板 → 同样进入creation前置弹表单与 fast 分开是因为导入需要列出/有哪些地浏览包会被 fast 的 queryVerbs 反信号误挡form— 上轮以form_select收尾AwaitingForm且本轮携带action.param即表单提交确定性继承上轮 actiondefault—general_chat通用 agent工具全集 技能目录自取 工具级门。action.key通道已死前端发送前一律剥离action.key后端不存在回退到分类器一说。这一点在 aiagent/chat/actions.go 的 registry 中体现——仅注册general_chat开放输入的默认 action挂全部内置工具走 ReAct与creation创建/新建监控资源的 fast-path两个 handler且init中强制要求general_chat作为兜底。创建意图判定由 aiagent/chat/vocab.go 的HasCreationIntent实现需要同时满足三个信号出现创建动词创建、新建、add、create等见creationVerbs命中creationSkills关键词表如告警规则、仪表盘、屏蔽、订阅、通知规则不出现查询动词反信号查看、查询、已创建、list等。其中creationSkills表aiagent/chat/vocab.go还声明了每个创建技能所需的上下文键create-dashboard仅需busi_group_id面板可跨数据源数据源交给 LLM 自行解决而create-alert-rule需要busi_group_iddatasource_id。Preflight 表单拦截命中creation后aiagent/chat/creation_form.go 的PreflightCreation会检查必填上下文是否齐全。若缺失它先尝试从自然语言文本中解析如用户说在 aadddd 业务组创建仪表盘通过busiGroupIDAfter/busiGroupIDBefore等正则把业务组解析成 ID 注入 Context再尝试跨回合继承此前提交过的值backfillCreationContext仍缺则返回单个form_select响应一次覆盖所有缺失键前端渲染渐进式表单并一次性提交避免多轮往返。六、添加或修改预设提示词规范给出了清晰的三步流程前端在 AICopilot 预设提示词常量表中添加或修改对应page下的条目并在前端 i18n 资源中补充本地化文案文档同步更新本文档中对应的章节表格后端如果是新增page类型还需在 models/ai_assistant.go 的AssistantPageType常量中注册并更新上文「各页面预设提示词总览」表格确保/chat/new不会把新值当作未知页面处理。七、注意事项小结快捷提示词 ≠ 后端接口下发文案硬编码在前端本规范文档是前后端共享的契约修改文案无需改动后端接口action.key勿再使用发送前请剥离处理路径由后端从content确定性解析创建型文案要带全上下文涉及创建仪表盘、告警规则等的快捷提示词建议在page param中尽量携带busi_group_id必要时含datasource_id避免触发 preflight 表单、打断用户流程涉及告警事件详情分析时event_id是必填项路由是确定性的从resolveActionKey的四级优先级fast/import/form/default可以看到整个处理链不依赖 LLM 猜测行为可预期、可测试。通过以上规范与源码对照你可以清楚地知道快捷提示词从前端按钮到后端 action 路由再到preflight 表单/工具执行的完整链路也能够在新增页面或调整文案时严格遵循前后端契约避免出现未知 page、缺参表单回环等问题。【免费下载链接】nightingaleNightingale is to monitoring and alerting what Grafana is to visualization.项目地址: https://gitcode.com/GitHub_Trending/ni/nightingale创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考