后端与接口
把已有 KQL/IRQL 查询结果转成 Kusto…
当你已有一条能产出表格结果的 KQL/IRQL 查询,想把它变成节点-边图谱(含图标、折叠、抽取、富化)时使用。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 59/100 ×0.15
适用场景
把已有 KQL/IRQL 查询结果转成 特定
解决思路
- 先做函数预检:运行 `.show functions | where Name in~ ("Lift_To_Graph", "Graph_Render_View", "Graph_Fold_By_Property") | project Name`,确认目标数据库已部署所需存储函数;`Lift_To_Graph` 和 `Graph_Render_View` 必需,`Graph_Fold_By_Property` 仅在需要折叠时必需,任何 `Extract_Node_*`、`Enrich_Node_*`、`Enrich_Graph_*` 使用前都要单独检查。
- 若必需函数缺失且有 alter 权限,先向用户确认再部署,使用 references/DEPLOY_IRQL_FUNCTIONS.md 中的 `.create-or-alter function` 定义,部署后重跑预检;若无 alter 权限,告知用户缺失哪些函数并指向该文档手动部署。
- 保留用户提供的查询的检索、join、过滤和聚合逻辑,只追加图谱映射所需的 projection 或合成 ID(如 `extend AuthEventId = strcat(Username, "_", Hostname, "_", EnvTime)`)。
- 检查查询最终输出列,解析用户描述中的实体名词(→ node_types)和关系动词/介词(→ edges),只用实际存在的列生成映射 JSON,绝不假设不存在的列。
- 为每个 node_type 填写 `type`、`id`(通常与 type 相同)、`key`(作为节点身份的列)、`props`(携带的属性列),可选填 `defaults`、`defIcon`、`displayName`、`color`、`size`。
- 为每条 edge 填写 `type`、`source`(`{"id":"<prefix>","type":"<NodeType>"}`)、`target`,可选填 `props`、`displayName`、`color`;方向规则:source 是动作发出者,target 是承受者。
- 属性中纳入与调查相关的列(时间戳、结果、哈希等);按实体类型从 `https://raw.githubusercontent.com/benc-uk/icon-collection/master/azure-icons/` 选图标(IP: `Public-IP-Addresses-(Classic).svg`,Host/VM: `Virtual-Machine.svg`,User: `Users.svg`,Email: `Mailbox.svg` 或 `azure-cds/command-1070-Mail.svg`,Process: `App-Services.svg`,File: `Storage-Accounts.svg`,Alert: `Activity-Log.svg`,Domain: `DNS-Zones.svg`)。
- 按固定管道模式组装:`<input query> | invoke Lift_To_Graph(<mapping_json>)`,然后按需追加 `| invoke <Extract_Node_* | Enrich_Node_* | Enrich_Graph_*>()`,再按需追加 `| invoke Graph_Fold_By_Property("<NodeType>", "<PropertyName>")`,最后以 `| invoke Graph_Render_View()` 结束。
- 仅在用户明确要求分组/折叠时加入 `Graph_Fold_By_Property()`;仅在请求且与映射键兼容时加入抽取/富化函数。
- 对所选管道中的每个存储函数逐一预检;若目标数据库无法检查,明确标注未验证的函数依赖。
- 输出完整 KQL:把映射 JSON 作为字符串 `let` 绑定内联,并在聊天中清晰标注 Step 1(连接,如 `// #connect cluster('kc7001.eastus.kusto.windows.net').database('ValdyTimes')` 或替换为自己的集群)和 Step 2(查询)。
- 默认只把 KQL 输出到聊天让用户手动复制到 Kusto Explorer 或 VS Code Kusto 扩展;仅当用户明确要求保存/打开时才走 references/KUSTO_EXPLORER_LAUNCH.md 流程:用 `ask_user` 确认后再写文件或启动可执行程序,在聊天中展示文件内容供审阅,用 `Set-Content`/`Add-Content` 写文件(禁止 shell 插值或 here-string),禁止把查询编码进浏览器 URL;macOS/Linux 上保存 `.kql` 文件并建议用 VS Code Kusto 扩展或 ADX Web Explorer。
- 仅当自然语言源请求能直接映射到单一已知表或 IRQL `Get_*` 选择器、列明显且过滤简单时才支持;需声明假设的源,不得虚构 join、schema 或调查逻辑;非平凡查询构造应先使用专门的 Kusto/IRQL 查询生成技能,再套用本技能。
- 若没有查询或输出 schema 且源不平凡,先向用户索取 KQL 查询或其结果列,再生成映射。
适用边界 · 注意事项
- 请求涉及 `make-graph`、`graph-match`、最短路径、连通分量、图模型或快照等原生图分析时,应改用 azure-kusto-graph。
- 需要把非平凡的自然语言调查请求转成 KQL/IRQL 查询时,应先用专门的查询生成技能,本技能不做 NL-to-KQL/IRQL 转换。
- 用户未要求原生图算子时,不要用手工构建的 edges-first 图替换 graph-lift 函数。