# -*- coding: utf-8 -*- """输出效果模拟:按 SKILL.md 模板渲染四类典型回答(数据全部来自 pages.json)""" import json from pathlib import Path HERE = Path(__file__).parent data = json.loads((HERE / "pages.json").read_text(encoding="utf-8")) pages = data["pages"] base = data["base_url"] vis = [p for p in pages if p["visible"]] def find(q): """按 SKILL.md 层级匹配:同层收集全部命中,高层命中则低层不参与""" q = q.strip() t1 = [p for p in vis if p["name"] == q] if t1: return t1 t2 = [p for p in vis if q in p["aliases"]] if t2: return t2 return [p for p in vis if q in p["name"] or any(q in a for a in p["aliases"]) or any(q in k for k in p["keywords"])] # ===== 场景 A1:帮我打开风门监测页面 ===== hits = find("风门") print("=" * 60) print("【模拟 A1】用户:帮我打开风门监测页面") print("-" * 60) p = next(x for x in hits if x["id"] == "gate") print(f'已为您找到【{p["name"]}】页面({p["category"]}·{p["group"]}):') print(f'📖 功能:{p["desc"]}') print(f'🔗 立即打开:[{p["name"]}]({base}{p["path"]})') # ===== 场景 A2:给我网页地图(瓦斯类筛选) ===== print() print("=" * 60) print("【模拟 A2】用户:给我网页地图,只看瓦斯类") print("-" * 60) gas = [p for p in vis if p["category"] == "通防监控" and p["group"] == "瓦斯监控"] gate = p # 保存场景A1找到的风门页,供A4使用 print("# 🗺️ 通防平台网页地图(瓦斯监控)") print(f"当前部署地址:{base}(说\"将网址换成 xxx\"可切换)\n") for gp in gas: print(f'- [{gp["name"]}]({base}{gp["path"]}) —— {gp["desc"]}') # ===== 场景 A3:将网址换成 http://10.120.3.15:8092 ===== print() print("=" * 60) print("【模拟 A3】用户:将网址换成 http://10.120.3.15:8092") print("-" * 60) old, new = base, "http://10.120.3.15:8092" home = next(p for p in vis if p["id"] == "model-3d") print(f"✅ 网址前缀已更换:{old} → {new}") print(f'示例(平台首页3D):[{new}{home["path"]}]({new}{home["path"]})') print("之后所有页面链接均使用新前缀。") # ===== 场景 A4:风门怎么远程开 ===== print() print("=" * 60) print("【模拟 A4】用户:风门怎么远程开?") print("-" * 60) print(f'【{gate["name"]}】操作指引:') print(f'🔗 页面:[{gate["name"]}]({base}{gate["path"]})') for i, step in enumerate(gate["usage"], 1): print(f"{i}. {step}") print(f'💡 提示:{gate["usage_tip"]}') # ===== 附加:歧义场景演示——网络解算 ===== print() print("=" * 60) print("【附加模拟】用户:帮我打开网络解算页面") print("-" * 60) hits2 = find("网络解算") if len(hits2) == 1: p2 = hits2[0] print(f'已为您找到【{p2["name"]}】页面:\n🔗 立即打开:[{p2["name"]}]({base}{p2["path"]})') else: print(f'「网络解算」匹配到 {len(hits2)} 个页面,请按需点选:') for i, p2 in enumerate(hits2[:3], 1): print(f'{i}. [{p2["name"]}]({base}{p2["path"]}) —— {p2["desc"]}') # ===== 附加:全量地图规模 ===== print() print("=" * 60) print(f"附:全量地图规模 = {len(vis)} 个可见页面,按 {data['stats']['categories']} 大类组织;含操作指引页面 {data['stats']['with_usage']} 个")