simulate_output.py 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. # -*- coding: utf-8 -*-
  2. """输出效果模拟:按 SKILL.md 模板渲染四类典型回答(数据全部来自 pages.json)"""
  3. import json
  4. from pathlib import Path
  5. HERE = Path(__file__).parent
  6. data = json.loads((HERE / "pages.json").read_text(encoding="utf-8"))
  7. pages = data["pages"]
  8. base = data["base_url"]
  9. vis = [p for p in pages if p["visible"]]
  10. def find(q):
  11. """按 SKILL.md 层级匹配:同层收集全部命中,高层命中则低层不参与"""
  12. q = q.strip()
  13. t1 = [p for p in vis if p["name"] == q]
  14. if t1: return t1
  15. t2 = [p for p in vis if q in p["aliases"]]
  16. if t2: return t2
  17. return [p for p in vis if q in p["name"]
  18. or any(q in a for a in p["aliases"])
  19. or any(q in k for k in p["keywords"])]
  20. # ===== 场景 A1:帮我打开风门监测页面 =====
  21. hits = find("风门")
  22. print("=" * 60)
  23. print("【模拟 A1】用户:帮我打开风门监测页面")
  24. print("-" * 60)
  25. p = next(x for x in hits if x["id"] == "gate")
  26. print(f'已为您找到【{p["name"]}】页面({p["category"]}·{p["group"]}):')
  27. print(f'📖 功能:{p["desc"]}')
  28. print(f'🔗 立即打开:[{p["name"]}]({base}{p["path"]})')
  29. # ===== 场景 A2:给我网页地图(瓦斯类筛选) =====
  30. print()
  31. print("=" * 60)
  32. print("【模拟 A2】用户:给我网页地图,只看瓦斯类")
  33. print("-" * 60)
  34. gas = [p for p in vis if p["category"] == "通防监控" and p["group"] == "瓦斯监控"]
  35. gate = p # 保存场景A1找到的风门页,供A4使用
  36. print("# 🗺️ 通防平台网页地图(瓦斯监控)")
  37. print(f"当前部署地址:{base}(说\"将网址换成 xxx\"可切换)\n")
  38. for gp in gas:
  39. print(f'- [{gp["name"]}]({base}{gp["path"]}) —— {gp["desc"]}')
  40. # ===== 场景 A3:将网址换成 http://10.120.3.15:8092 =====
  41. print()
  42. print("=" * 60)
  43. print("【模拟 A3】用户:将网址换成 http://10.120.3.15:8092")
  44. print("-" * 60)
  45. old, new = base, "http://10.120.3.15:8092"
  46. home = next(p for p in vis if p["id"] == "model-3d")
  47. print(f"✅ 网址前缀已更换:{old} → {new}")
  48. print(f'示例(平台首页3D):[{new}{home["path"]}]({new}{home["path"]})')
  49. print("之后所有页面链接均使用新前缀。")
  50. # ===== 场景 A4:风门怎么远程开 =====
  51. print()
  52. print("=" * 60)
  53. print("【模拟 A4】用户:风门怎么远程开?")
  54. print("-" * 60)
  55. print(f'【{gate["name"]}】操作指引:')
  56. print(f'🔗 页面:[{gate["name"]}]({base}{gate["path"]})')
  57. for i, step in enumerate(gate["usage"], 1):
  58. print(f"{i}. {step}")
  59. print(f'💡 提示:{gate["usage_tip"]}')
  60. # ===== 附加:歧义场景演示——网络解算 =====
  61. print()
  62. print("=" * 60)
  63. print("【附加模拟】用户:帮我打开网络解算页面")
  64. print("-" * 60)
  65. hits2 = find("网络解算")
  66. if len(hits2) == 1:
  67. p2 = hits2[0]
  68. print(f'已为您找到【{p2["name"]}】页面:\n🔗 立即打开:[{p2["name"]}]({base}{p2["path"]})')
  69. else:
  70. print(f'「网络解算」匹配到 {len(hits2)} 个页面,请按需点选:')
  71. for i, p2 in enumerate(hits2[:3], 1):
  72. print(f'{i}. [{p2["name"]}]({base}{p2["path"]}) —— {p2["desc"]}')
  73. # ===== 附加:全量地图规模 =====
  74. print()
  75. print("=" * 60)
  76. print(f"附:全量地图规模 = {len(vis)} 个可见页面,按 {data['stats']['categories']} 大类组织;含操作指引页面 {data['stats']['with_usage']} 个")