用 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(智元界)原创发布