最近在学习新框架的过程中,我想通过大语言模型( LLM )来强化对项目源代码的理解。我发现 Claude 可以将代码块通过 Mermaid 转换成图形,这无疑能让开发者更好地学习和理解代码模块。

然而,由于 LLM 有 Token 数量的限制,开源项目的文件和代码量通常很大,直接将完整代码提供给 LLM 进行分析并不现实。

如果手动分段和汇总代码,操作也不太现实(当代码量很大时,多个 LLM 会话还是需要手动处理)。

我发现编译过程中有一个抽象语法树( AST )的概念,可以解析代码,生成一种结构化表示,便于理解代码各部分的关系。通过 AST 可以很容易提取函数、类、变量等信息。

尽管将代码转成 AST 之后再让 LLM 理解是一种抽象的解决方案,但这种方法可能依然会超出 Token 的限制。

像通过 CodeBERT 结合 RAG 这样的方案,虽然可以通过代码的特定标识做检索,但不能在抽象理解后让 LLM 再次处理。

关于这种组合策略,还有哪些其他方向可以考虑?
举报· 59 次点击
登录 注册 站外分享
2 条回复  
murmur 小成 2024-8-30 10:58:20
根本不看源码,前端的深度就那么点,有时间可以往理论或者广度扩展,比如计算机图形学,移动端开发,游戏引擎,系统设计,后端,界面交互设计,等等
secondwtq 小成 2024-8-31 04:14:16
个人觉得 AST 直接喂给 LLM 不太靠谱,应该说 AST 作为实现内部的细节,本身就没有固定表示(并且 serialize 成可读的文本之后会比源代码更加 ferbose )。把 AST 里面提取的信息喂过去是可行的。

另外一点是所有这些方案都是代码中的静态信息,但是可以考虑附加运行时动态信息,比如主要功能调用路径、状态的典型取值等。
返回顶部