本 skill 采用"数据与逻辑分离"设计:
SKILL.md(行为指令)+references/pages.yaml(人工维护权威数据)+references/pages.json(机器读取版)+config.yaml(部署前缀)。任何智能体框架只要能读到这些内容即可运行。
在后端实现 4 个工具,数据源为 pages.json + 后端配置存储:
# 伪代码示意
TOOLS = [
query_page(query, top_n=3) # 加载 pages.json → 按 name精确>aliases精确>包含 匹配
# → menu_key 权限过滤 → 拼 base_url → 返回页面
get_page_map(category=None) # 返回权限过滤后的 分类→子类→页面 树
set_base_url(url) # 校验 http(s)://host[:port] → 去尾斜杠 → 持久化 → 记录history
get_visible_menus() # 调平台权限接口 → 返回当前用户可见菜单 path 集合
sync_pages(token=None) # 权限菜单树 ↔ pages.yaml 差集 → 新增/下线清单+草稿
#(参考实现 references/sync_pages.py,可直接封装为工具)
]
权限接口对接(实测事实,182 环境):
GET {base_url}/modelreq/sys/permissionNew/getUserPermissionByToken?token=<JWT>
Header: X-Access-Token: <JWT>
返回 result.menu[] 递归树:
每项 { path, meta.title, hidden, children, component, id }
hidden:true 与 children)的 path 得到可见集合;menu_key(去查询参数后的基础路径)命中集合 → 可展示;menu_key: null → 不做权限过滤,默认展示;持久化存储:set_base_url 写入后端配置(数据库或配置文件均可),同时把旧值/新值/时间追加到 history——所有用户所有会话生效。
与现有实现的替换:实测平台智能助手现有"帮我打开风门监测页面"回答的链接点击后跳到首页模型页(指向错误)。接入本 skill 后,工具直接返回 pages.json 中实测正确的 path,替换旧知识/旧 prompt 中关于页面导航的部分。
无工具调用的智能体(纯对话接口):
SKILL.md 正文(YAML 头以下)作为系统提示词片段注入;pages.json 中 visible:true 的条目压缩成文本注入(保留 name/aliases/keywords/path/desc/usage;51 页全量约 8-10K tokens,若超限可去掉 usage 只留 desc,操作问题让用户进页面后看提示);config.yaml 的 base_url 值注入(部署时写死当前环境地址);visible 静态裁剪。直接把 vent-web-nav/ 整个目录复制到技能目录:
.agents/skills/vent-web-nav/ 或用户级 ~/.agents/skills/vent-web-nav/~/.claude/skills/vent-web-nav/技能会按 SKILL.md 里的 description 触发词自动激活;宿主用文件读取能力替代方式 A 的工具(读 pages.yaml/config.yaml),换前缀通过编辑 config.yaml 持久化。
references/pages.yaml:在对应分类/子类下按字段模板添加条目(字段说明见文件头注释);python references/build_pages.py 重新生成 pages.json 并校验;menu_key 填权限接口返回的菜单 path(打开平台对应页面,从浏览器地址栏取基础路径即可)。带 visible: false 的条目(菜单存在但未实测/未部署):用浏览器直接访问确认可用后,删掉该行的 visible: false 与 note,重跑生成脚本。
config.yaml 的 base_url(或对智能体说"将网址换成 http://新地址");?id=... 更新对应条目的 path;visible 与 menu_key(用权限接口拉一次菜单树比对);# 用当前账号 token 拉菜单树(浏览器 F12 从任意请求头 X-Access-Token 复制)
curl "{base_url}/modelreq/sys/permissionNew/getUserPermissionByToken?token=<JWT>"
# 递归取所有 path,与 pages.yaml 的 menu_key 比对,缺的补、错的改
唯一原则:只改 YAML,JSON 永远由脚本生成(直接改 JSON 会被下次生成覆盖)。
python references/build_pages.py # 校验 + 生成,两全
/chamber-home,182 环境未部署(404),新环境部署后验证;visible:false 的菜单页(通风网络解算、防灭火/防尘系统监测、抽采综合管控、瓦斯管网管控、避灾路线等)逐个访问验证后启用;get_page_map 工具返回的 JSON 树可直接递归渲染为平台自绘弹窗组件(聊天树之外的增强体验);