你是否遇到这些需求?

  • 想提取 Python 函数、类、注释结构

  • 想做代码可视化、依赖分析、Code-RAG

  • 不想用正则瞎猜代码结构

那你需要的不是“字符串处理”,而是——AST 技术

补充:

代码搜索/问答系统(Code RAG),主要目的:

  1. 精准提取函数、注释、上下文

  2. 分析函数调用关系

  3. 构造知识片段用于 Embedding

AST 可以帮你把代码切割得又干净又有语义


什么是 AST?

AST,全称为 Abstract Syntax Tree(抽象语法树),是编程语言在编译或解释过程中将源代码转化为的一种树状结构。Python 在执行前会将代码解析为 AST,再执行 AST 中描述的各类语法结构。

与字符串匹配不同,AST 能保留代码的语义结构信息,提供更精确的静态分析能力。


示例:从代码生成 AST

代码:

a = 1 + 2

对应的 AST 树结构:

Assign
├── Name(a)
└── BinOp(+)
    ├── Constant(1)
    └── Constant(2)

Python 中可以使用内置的 ast 模块进行 AST 解析:

import ast

code = "a = 1 + 2"
tree = ast.parse(code)
print(ast.dump(tree, indent=4))

AST 能解决哪些问题?

应用方向 说明
函数/类提取 精确识别代码中的函数、类及其结构
代码注释提取 提取函数或类的文档字符串(docstring)
依赖关系分析 构建函数调用图、模块依赖图等
自动代码修改/生成 修改语法树并重新生成代码,实现代码重构或转换

为什么不用正则而用 AST?

正则表达式只能处理代码的“表面”,一旦遇到嵌套结构、跨行定义等复杂场景容易失效。而 AST 是语法分析器生成的中间表示,能准确识别语法节点及其上下文关系。


个人项目实战中的经验:辅助 Code-RAG

在构建基于代码知识的检索增强生成(RAG)系统时,我们往往需要:

  • Embedding整个项目到向量数据库中
  • 提取函数、类定义作为知识单元

  • 获取函数参数、文档注释等上下文信息

  • 构造结构化片段供嵌入向量化使用

AST 技术可确保切块(Chunking)具备语义完整性,避免“语句不完整”或“上下文丢失”的问题。


总结

  • AST 是代码静态结构的抽象表示,具有完整语义

  • Python 提供了 ast 标准库进行 AST 解析

  • 在智能开发、AI 编程辅助、代码搜索等领域都有广泛应用

  • 与正则等方法相比,AST 更安全、更精准、更通用

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐