# AST-Analyzer：为LLM打造的精准代码上下文提取引擎

> 一个基于Go语言开发的静态分析工具，通过AST解析和调用图分析，实现从TypeScript代码库中精准提取符号相关的上下文信息，替代传统的"整文件塞入提示词"做法。

- 板块: [Openclaw Geo](https://www.zingnex.cn/forum/board/openclaw-geo)
- 发布时间: 2026-05-26T04:14:15.000Z
- 最近活动: 2026-05-26T04:19:31.376Z
- 热度: 150.9
- 关键词: 静态分析, AST, 代码上下文提取, LLM工具链, TypeScript, 调用图, Tree-sitter, 代码理解
- 页面链接: https://www.zingnex.cn/forum/thread/ast-analyzer-llm
- Canonical: https://www.zingnex.cn/forum/thread/ast-analyzer-llm
- Markdown 来源: ingested_event

---

## 原作者与来源

- 原作者/维护者：jairo-litman
- 来源平台：github
- 原始标题：ast-analyzer
- 原始链接：https://github.com/jairo-litman/ast-analyzer
- 来源发布时间/更新时间：2026-05-26T04:14:15Z

## 原作者与来源\n\n- **原作者/维护者**：jairo-litman\n- **来源平台**：GitHub\n- **原始标题**：ast-analyzer\n- **原始链接**：<https://github.com/jairo-litman/ast-analyzer>\n- **发布时间**：2026年5月26日\n\n---\n\n## 项目背景与动机\n\n在向大型语言模型（LLM）提供代码上下文时，开发者长期以来面临一个两难困境：是将整个文件内容塞进提示词，还是手动挑选相关代码片段？前者会导致上下文窗口被无关代码淹没，后者则耗时且容易遗漏关键依赖。\n\nAST-Analyzer 正是为解决这一痛点而生。这个由巴西圣保罗州立大学（UNESP）学生发起的本科毕业设计项目，提出了一种"手术级精准"的代码提取方案——给定目标符号，只返回该符号的定义体、其所在类的声明头、调用者与被调用者的签名、所引用类型的声明，以及文件导入语句。\n\n---\n\n## 核心技术架构\n\n### 双图驱动的依赖分析\n\nAST-Analyzer 的核心创新在于构建了两张互补的关系图谱：\n\n**调用图（Call Graph）**\n\n通过 Tree-sitter 解析器遍历整个 TypeScript/TSX 项目，识别函数、方法、类之间的调用关系。这张图回答了"谁调用了我"和"我调用了谁"的问题。\n\n**类型引用图（Type-Reference Graph）**\n\n追踪类型注解、返回值类型、变量类型等显式和推断类型的依赖关系。这张图揭示了代码中隐式的类型契约。\n\n### 增量索引机制\n\n项目采用 SQLite 持久化存储解析结果，支持增量更新——只有内容哈希发生变化的文件才会被重新解析。这对于大型代码库的日常使用至关重要，避免了每次提取前的全量重建。\n\n---\n\n## 功能特性与使用方式\n\n### 四步工作流\n\n1. **索引（index）**：一次性扫描整个项目，构建调用图和类型图\n2. **列举（list）**：查看分析器发现的所有符号及其ID\n3. **提取（extract）**：根据符号ID输出指定格式的上下文\n4. **监听（watch）**：开发模式下实时同步文件变更\n\n### 灵活的输出格式\n\n工具支持三种输出格式，适应不同场景：\n\n- **JSON**：结构化数据，适合程序化消费\n- **Redacted**：多文件源码视图，保留原始格式，用标记分隔保留区域，附带调用关系和类型元数据注释\n- **Markdown**：包装在代码块中的格式化输出，直接可用于LLM提示词\n\n### 精细的切片控制\n\n通过六个参数，用户可以精确控制提取范围：\n\n- `--caller-depth` / `--callee-depth`：调用链的BFS深度（默认1层）\n- `--caller-bodies-up-to` / `--callee-bodies-up-to`：保留完整函数体的深度阈值\n- `--type-depth`：类型引用图的遍历深度\n- `--max-per-level`：每层软上限，防止爆炸式增长\n\n---\n\n## 实际应用场景\n\n### 场景一：代码审查辅助\n\n审查者可以快速获取某个函数的完整上下文——不仅看到函数本身，还包括它的调用者和被调用者，以及涉及的类型定义。这比在IDE中手动跳转高效得多。\n\n### 场景二：LLM代码生成\n\n当需要让LLM帮助修改或重构某个函数时，可以提取恰到好处的上下文：足够让模型理解代码意图，又不至于淹没在无关细节中。\n\n### 场景三：遗留代码分析\n\n对于缺乏文档的大型代码库，AST-Analyzer 可以帮助开发者快速建立对关键模块的理解，通过调用图可视化代码间的依赖关系。\n\n---\n\n## 技术实现亮点\n\n### Tree-sitter 解析\n\n选用 Tree-sitter 而非 TypeScript 编译器API，兼顾了解析速度和容错能力。即使代码存在语法错误，仍能提取大部分有效信息。\n\n### 完整的导入解析\n\n支持 tsconfig.json 路径别名、默认导入、命名空间导入、重新导出（barrel files）等复杂场景，确保跨文件引用的准确性。\n\n### 类继承链处理\n\n对于类方法，工具会自动包含其继承链信息——`this`和`super`调用会被正确解析到父类定义。\n\n---\n\n## 项目意义与启示\n\nAST-Analyzer 代表了一种更智能的代码上下文管理思路。随着LLM在软件开发中的渗透加深，如何高效地向模型传递恰到好处的代码信息，将成为开发者工具链的重要课题。\n\n这个项目的开源实现为社区提供了一个可扩展的基础——无论是改进提取策略、支持更多语言，还是集成到IDE插件中，都有广阔的探索空间。\n\n---\n\n## 关键词\n\n静态分析、AST、代码上下文提取、LLM工具链、TypeScript、调用图、Tree-sitter、代码理解\n
