Typed JSON translation layer for natural-language static analysis
静态分析聊天不该再让模型直接写 Joern CPGQL。更好的做法是两步翻译:模型先填一个小型、类型化的 JSON 表单来表达查询意图,然后确定性代码把这个表单映射成最终查询,并在执行前做校验。证据很具体。在一个覆盖 Apache Commons Lang 和 OWASP WebGoat 的 20 任务基准上,基于 schema 的 JSON 设计在所有测试模型上都胜过直接生成查询,Qwen 72B 提高了 15.0 个百分点,Llama 70B 提高了 25.0 个百分点。它也胜过一个 agent 式工具循环,后者每个任务用了大约 8 倍的 token,结果还更差。
做静态分析自然语言入口的团队很熟悉这种操作上的痛点:生成的查询经常能跑通,却回答错了问题;而自由形式的 agent 循环只会增加延迟和失败点,没解决 DSL 正确性。类型化中间层给产品团队一个位置,在任何东西碰到分析引擎之前,先约束允许的查询类型、必填字段和 schema 检查。
验证路径也很直接。拿一批来自安全团队或 AppSec 用户的真实英文分析请求,给最常见的查询家族定义一个窄 JSON schema,再把结果匹配率、执行成功率和 token 成本与直接生成查询做对比。如果工具已经记录了失败或误导性的 CPGQL 生成,这些请求就是合适的起点。