用 AI 自动生成项目 README——分析代码结构,输出专业文档
每个开源项目都需要 README,但写文档是程序员最不爱做的事。这个工具扫描项目代码,调用 AI 生成一份结构化的 README。
核心代码
#!/usr/bin/env python3
# readmeai.py
import os, subprocess
from pathlib import Path
from collections import Counter
from openai import OpenAI
from dotenv import load_dotenv
load_dotenv()
client = OpenAI(api_key=os.getenv("DEEPSEEK_API_KEY"), base_url="https://api.deepseek.com/v1")
def scan_project(root="."):
"""扫描项目结构,提取关键信息。"""
info = {"name": Path(root).resolve().name, "files": [], "langs": Counter(),
"deps": [], "tests": False, "docker": False, "ci": False}
# 跳过无关目录
skip = {".git", "__pycache__", "node_modules", ".venv", "venv", ".idea"}
for f in Path(root).rglob("*"):
if any(p in skip for p in f.parts):
continue
if f.is_file():
info["files"].append(str(f.relative_to(root)))
suffix = f.suffix.lower()
if suffix in {".py", ".js", ".ts", ".go", ".rs", ".java"}:
info["langs"][suffix] += 1
if f.name in {"requirements.txt", "pyproject.toml", "package.json"}:
info["deps"].append(str(f.relative_to(root)))
if "test" in str(f).lower():
info["tests"] = True
if "docker" in str(f).lower() or f.name == "Dockerfile":
info["docker"] = True
if ".github/workflows" in str(f) or ".gitlab-ci.yml" in str(f):
info["ci"] = True
# 获取 Git 信息
try:
info["git_url"] = subprocess.run(["git", "remote", "get-url", "origin"], capture_output=True, text=True, cwd=root).stdout.strip()
info["description"] = subprocess.run(["git", "log", "--oneline", "-1", "--format=%s"], capture_output=True, text=True, cwd=root).stdout.strip()
except:
info["git_url"] = ""
info["description"] = ""
return info
def generate_readme(info):
"""AI 生成 README。"""
langs = ", ".join(f"{v} {k}" for k, v in info["langs"].most_common(3))
deps_text = "\n".join(f"- {d}" for d in info["deps"][:8]) if info["deps"] else "无"
files_sample = "\n".join(f"- {f}" for f in info["files"][:30])
prompt = f"""你是一个技术文档专家。根据以下项目信息生成一份完整的 README.md。
## 项目信息
- 名称:{info['name']}
- 描述:{info['description']}
- 语言:{langs}
- 测试:{"有" if info['tests'] else '无'}
- Docker:{"有" if info['docker'] else '无'}
- CI/CD:{"有" if info['ci'] else '无'}
## 依赖文件
{deps_text}
## 项目结构(部分)
{files_sample}
请生成 README.md,包含:标题、简介、特性、快速开始、项目结构、依赖安装、使用说明。用 Markdown 格式。"""
resp = client.chat.completions.create(
model="deepseek-chat",
messages=[{"role": "user", "content": prompt}],
temperature=0.3,
max_tokens=2000,
)
return resp.choices[0].message.content
if __name__ == "__main__":
import sys
root = sys.argv[1] if len(sys.argv) > 1 else "."
info = scan_project(root)
readme = generate_readme(info)
output = Path(root) / "README.md"
output.write_text(readme, encoding="utf-8")
print(f"✅ README.md 已生成 ({len(readme)} 字符)")
使用方式
python readmeai.py /path/to/your/project
# ✅ README.md 已生成 (1847 字符)
效果
生成的 README 包含:
- 📛 项目名称和简介
- ✨ 功能特性
- 🚀 快速开始(安装、运行)
- 📁 项目结构
- 📦 依赖安装
- 📖 使用说明
总结
AI 写 README 的优势不是"写得更好",而是"不用写"。把省下的时间花在写代码上。
本文由 Zyentor(智元界)原创发布