doc-comments-ai
用 LLM 为代码方法自动生成规范文档注释(Javadoc/Docstring/Rustdoc),支
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
用 LLM 为代码方法自动生成规范文档注释(Javadoc/Docstring/Rustdoc),支
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
你有没有过这样的经历:写了一个精妙的算法,逻辑清晰、运行高效,唯一的问题是——没有一行注释?或者接手了别人的代码,看着一堆无注释的函数,想问天问大地「这到底在干什么」,却发现连 API 文档都是空的?对于 AI 开发者来说,代码文档缺失是长期痛点,不仅影响团队协作,更让代码审查(Code Review)和知识传承变得异常艰难。
doc-comments-ai 正是为解决这一痛点而生的开源工具。它是一个基于 LLM(大语言模型)的代码文档自动生成工具,支持 Python、TypeScript、Java、Go、Rust、C++ 等 11 种编程语言,通过命令行一行指令,即可让 AI 为指定文件中的所有方法自动生成规范的文档注释(Javadoc、Docstring、Rustdoc 等),开发者只需专注于核心逻辑,把「写注释」这件繁琐的事交给 LLM。
这个项目由独立开发者 Fynn Flüge 创建,他是一位来自德国的全栈工程师。在日常开发中,他经常需要处理遗留代码(Legacy Code)或参与大型多人协作项目,深感「代码文档缺失」带来的沟通成本——每次接手新模块都要花大量时间读源码去理解意图。他开始思考:既然 LLM 已经很擅长理解和生成文本,为什么不把它用在代码文档生成上?
基于这一想法,Fynn 利用当时刚刚兴起的 LangChain 框架,结合 tree-sitter(业界标准的代码解析库),构建了 doc-comments-ai 的核心解析引擎。tree-sitter 负责精准识别代码中的函数声明节点,而 LangChain 则负责调用 LLM 生成符合各语言规范的文档注释。项目于 2023 年初开源,迅速在 Hacker News 上获得关注,目前已在 GitHub 积累 259 颗星,成为 LLM + 代码工具这一赛道的代表性小工具之一。
doc-comments-ai 的技术核心在于代码解析层。项目使用 tree-sitter 作为 AST(抽象语法树)解析引擎,针对每种语言维护了独立的 Treesitter 子类。以 Python 为例,TreesitterPython 类将 function_definition 作为函数声明标识符,精确提取函数名和已有文档字符串。对于 Rust,工具会递归遍历 AST 节点树,收集前置的 doc comment(/// 或 /** */ 风格),确保不遗漏任何现有文档信息。
这套解析架构的优势在于语言无关的扩展性。当需要支持新语言时,只需在 doc_comments_ai/treesitter/ 目录下新增一个子类,注册到 TreesitterRegistry 即可,无需修改核心逻辑。Registry 模式让新增语言支持变得模块化,这也是项目代码结构中最值得学习的设计之一。
工具支持四种 LLM 调用方式,满足不同场景需求:
其中本地模型支持尤其值得关注。Ollama 让用户可以在本地启动服务(如 ollama serve),doc-comments-ai 通过 --ollama-model 参数直接连接,传入模型名称和 base URL(如 http://localhost:11434)。Llama.cpp 则通过 --local_model 参数传入 GGUF 模型文件路径,无需启动额外服务。这两种本地方案让对数据隐私敏感的企业(如金融、医疗行业)也能安全使用 LLM 生成代码文档。
工具提供三种文档生成模式:
--guided):交互式确认,对每个方法逐一询问是否生成--inline):除文档注释外,还会在方法体内关键逻辑处插入内联解释值得强调的是,工具内置了安全保护机制:只有文件没有未暂存的更改(unstaged changes)时才会写入文档,防止误覆盖开发者正在编辑中的代码。这一细节体现了开发者对工程实践的深刻理解。
从 llm.py 可以清晰看到整个 LLM 调用流程:
# 1. 初始化 LLM(根据参数选择 provider)
self.llm = ChatLiteLLM(temperature=0.8, max_tokens=max_tokens, model=model.value)
# 2. 构建 PromptTemplate
self.template = (
"Add a detailed doc comment to the following {language} method:\n{code}\n"
"The doc comment should describe what the method does. "
"{inline_comments} "
"Return the method implementation with the doc comment as a single markdown code block."
)
# 3. 通过 LLMChain 执行
self.chain = LLMChain(llm=self.llm, prompt=self.prompt)
documented_code = self.chain.run(input)
Prompt 设计简洁但有效:要求 LLM「返回带有文档注释的完整方法实现」作为单个 Markdown 代码块,便于后续解析提取。temperature=0.8 提供了足够的创造性,避免生成过于模板化的文档。
| 依赖 | 版本 | 作用 |
|---|---|---|
| tree-sitter | ^0.20.1 | 代码 AST 解析 |
| tree-sitter-languages | ^1.7.0 | 22 种语言语法包 |
| langchain | >=0.0.284 | LLM 调用链管理 |
| litellm | ^0.1.697 | 多模型统一接口 |
| tiktoken | ^0.4.0 | OpenAI token 计费 |
| inquirer | ^3.1.3 | 引导模式交互 |
| yaspin | ^3.0.0 | 终端加载动画 |
上手门槛极低:只需 pipx install doc-comments-ai,然后设置 API key 环境变量即可使用。对于 OpenAI 用户,整个过程不超过 2 分钟。
局限同样明显:
doc-comments-ai 属于 LLM + Developer Tooling 赛道的一个细分场景——代码文档自动化。这个赛道在 2023-2024 年快速扩张,GitHub Copilot 推出了类似的「生成文档注释」功能,但 doc-comments-ai 的优势在于:完全开源、支持离线部署、不依赖特定 IDE。
随着 AI 代码助手竞争加剧,文档生成正在从「Nice to Have」变成「Must Have」。微软、Google、JetBrains 等大厂都在将 LLM 文档生成集成到 IDE 核心流程中。doc-comments-ai 作为独立 CLI 工具,填补了终端用户和轻量化工作流的空白,其模块化设计也为开发者二次开发(如集成到 CI/CD 流水线)提供了良好基础。