分享一个实验性的 DAG 流程审计 Skill

背景

随着 AI 能力的不断提升,AI 在代码审计领域已经有了一席之地。我也尝试过去设计不同方法论的审计 skill 去让大模型从不同的角度对代码进行审计,但之前的审计流程编排大多都是串联的,或者说是大阶段串联,每个阶段内部并联执行。这种编排方式也有一定的局限性,当你想设计更为灵活和复杂的流程时,流程梳理起来会变得"糊成一团",且容易发生耦合的情况。因为每个环节通过文本内容指向下一个环节,在不断迭代的过程中由于缺乏框架性的设计而变得难以梳理。所以,就抱着"能不能做一个调理清晰的执行流程"这个想法,尝试性地用 DAG (有向无环图)的形式构造了一个简单的审计 Skill。

项目地址:https://github.com/ACaiSec/acai-dag-auditor

项目介绍

目前项目的内容只是为了展示架构的使用,所以比较简单,一共 5 个 node:

  1. env_setup:根据开发框架下载依赖库,完成编译
  2. project_parsing:根据编译内容以及合约代码对项目的函数调用与业务流程进行解析与总结
  3. business_flow_analysis:分析合约项目在业务流程层面的安全问题
  4. fund_flow_analysis:分析合约在资金层面的安全问题
  5. summary_output:问题去重,确认,输出漏洞报告

其中 3 和 4 是并行执行的。

每个节点首先都需要在 workflow.dag.yaml 文件中进行登记(max_parallel_nodes 为最大并行数量):

yaml 复制代码
version: 1
name: solidity_audit

runtime:
  max_parallel_nodes: 2

nodes:
  - id: env_setup
    module: nodes/env_setup

  - id: project_parsing
    module: nodes/project_parsing

  - id: fund_flow_analysis
    module: nodes/fund_flow_analysis

  - id: business_flow_analysis
    module: nodes/business_flow_analysis

  - id: summary_output
    module: nodes/summary_output

为了避免 context 占用过高,每个 node 都采用 sub-agent 的形式进行调用,调用结果通过输出文件进行返回。所以每个节点之间的关系(在 DAG 中对应 edge 的概念)根据是节点间的输入输出文档进行关联,比如:Node1 的输出文档为 node1-output.md,Node2 的输入文档也是 node1-output.md,那么就认为存在一条 Node1 --> Node2 的边。

每个节点的输入输出文档定义在节点目录下的 node.yaml 文件中实现,比如

上游节点 project_parsing 的输出内容定义为

yaml 复制代码
  outputs:
    - name: project_overview
      path: project_overview.md
      format: markdown
      description: High-level project summary, contract roles, and business flow

    - name: call_graph
      path: call_graph.yaml
      format: yaml
      description: Compressed call graph per ast_compress_template.yaml

    - name: business_flows
      path: business_flows.yaml
      format: yaml
      description: Structured function call chains for each business flow

而它的下游节点 business_flow_analysis 的输入定义,刚好为上游节点的输出。

yaml 复制代码
artifacts:
  output_dir: ./acai-dag-auditor/artifacts/business_flow_analysis/
  inputs:
    - name: project_overview
      source: upstream:project_parsing
      path: project_overview.md
      required: true
      description: Project architecture, contract roles, and business flow

    - name: business_flows
      source: upstream:project_parsing
      path: business_flows.yaml
      required: true
      description: Structured function call chains for each business flow

    - name: call_graph
      source: upstream:project_parsing
      path: call_graph.yaml
      required: true
      description: Compressed call graph with function call edges and risk annotations

当上游节点执行完毕,且目录中所输出的文件满足了下游节点的输入文件要求时,Agent 将会启动 sub-agent 执行下游节点的任务。

整个项目最核心的内容就介绍完了,接下你就可以根据你自己的需求设计和添加各种节点,搭建你自己的审计流程。

后记

因为这个项目是先有一个想法,然后根据这个想法来实现的一个 demo。可能想法并不成熟,实现过程中也有很多没考虑到的地方。就当是一个积聚内心想法的分享,也非常希望大家能够交流一下看法,毕竟现在很难找到一个交流的平台和社区,长时间的闭门造车最终也只能是在不断的自我否定中止步不前。尤其是现在 AI 时代,分享自己的想法变得困难重重,初步的浅显的想法提出来好像不如 AI 生成的质量高,深刻的详细的想法提出来下一秒就会为别人的 AI 所用。然后大家都开始用 AI 生成内容了,反正质量不会太差,你嫖走得到的也是 AI 的内容,分享也渐渐的变得没意思了。

相关推荐
gugugu.1 小时前
同一个 ReAct,两种手写方式:LangChain 文本协议 vs LangGraph 状态图
ai·langchain
小七-七牛开发者3 小时前
Tool-Use Agent 如何扩训练数据:拆解工具、任务与环境状态的 Scaling Law
ai·agent·工具调用·scalinglaw·synthapi
wflynn5 小时前
Mistral Large 4发布,万亿参数模型的编码与安全实测数据
ai·技术
日日大王学编程5 小时前
AI 时代后端方向新人的未来规划与看法
人工智能·后端·python·ai·golang
土星云SaturnCloud6 小时前
基于边缘计算与AI视觉的智慧街面治理方案:架构设计与场景落地
服务器·人工智能·ai·边缘计算
Elastic 中国社区官方博客7 小时前
基于 Elasticsearch 与 Jina AI 的全模态智能搜索实践:技术全解析
大数据·人工智能·elasticsearch·搜索引擎·ai·信息可视化·jina
Solange__7 小时前
图片转3D导出GLB、FBX还是OBJ?按5类任务比较材质、动画与可编辑性
人工智能·3d·ai·自然语言处理·编辑器·blender·材质
GJGCY7 小时前
金融AI Agent安全如何评估?数据出站、身份映射、参数绑定与审计追踪机制
人工智能·经验分享·安全·ai·金融·自动化·智能体
涵美女程序猿7 小时前
AI 商品素材工作台怎么搭?Lingko AI 追踪便携显示器接口与支架版本
ai
玩泥巴的8 小时前
源生成与 AOT 就绪的微信生态 .NET SDK:结构、能力边界与 API 定位方法
ai·微信·.net·agent·aot·roslyn