This reverts commit
|
||
|---|---|---|
| issues | ||
| src/llm_codegen | ||
| tests | ||
| .gitignore | ||
| .python-version | ||
| README.md | ||
| check_results.json | ||
| design.json | ||
| llmcodegen.py | ||
| pyproject.toml | ||
README.md
LLM 代码生成工具(自举版 · 增强版)
本项目是一个基于大语言模型的智能代码生成与维护工具。它不仅能够根据项目 README.md 描述自动生成完整的 Python 包代码,还支持在现有项目上增量添加功能和自动修复 Bug。工具采用 uv 管理依赖,包含单元测试、并行检查、断点续写等特性,并通过一个面向 LLM 的中间设计层来提升生成质量和可维护性。
✨ 核心特性
- 📦 自动生成:解析
README.md,分析需要生成的文件列表及依赖关系,按顺序生成每个文件的代码。 - 📋 中间设计层:生成一个
design.json文件,包含项目结构、文件关联、功能摘要等信息。后续所有代码生成均以该 JSON + README 作为上下文,确保 LLM 始终理解全局设计。 - 🧩 增量功能开发:通过编写需求工单(如
feature.issue),描述新增功能,工具自动分析现有代码并生成新增或修改的文件。 - 🐞 自动 Bug 修复:通过编写Bug 工单(如
bug.issue),描述问题现象,工具结合代码和错误信息生成修复补丁。 - 🔧 命令执行:生成文件后可自动执行建议命令(如安装依赖、运行构建),内置危险命令拦截(执行命令失败不会终止任务,仅记录错误)。
- ✅ 单元测试:使用
pytest编写测试用例,支持测试覆盖率统计。 - ⏯️ 断点续写:生成过程中断后可自动从上次中断处继续,状态保存在
.llm_generator_state.json。 - 🖥️ 命令行工具:提供
llm-codegen命令,支持多种操作模式。 - 📝 详细日志:所有操作、LLM 响应、错误均通过
loguru记录到文件。 - 🎨 美观输出:使用
rich显示进度条和彩色状态。 - 📊 Diff 输出格式支持:在生成代码变更时提供标准 unified diff 格式输出,便于代码审查和版本控制集成。
🚀 安装
依赖
- Python 3.9+
- 使用
uv管理包
# 安装依赖
uv add [dev]
配置 API 密钥
设置环境变量(推荐):
export DEEPSEEK_APIKEY="your-api-key"
或在命令行中通过 --api-key 传入。
📖 使用方法
工具支持四种操作模式,通过子命令区分:
llm-codegen init README.md # 从零初始化项目
llm-codegen enhance feature.issue # 根据需求工单增强项目
llm-codegen fix bug.issue # 根据Bug工单修复项目
llm-codegen design README.md # 生成设计文件 design.json
1. 初始化项目 (init)
根据 README.md 生成完整的项目骨架和代码。
llm-codegen init path/to/README.md -o ./generated
流程:
- 读取
README.md,调用 LLM 生成中间设计文件design.json(位于输出目录)。 - 基于
design.json和README.md按顺序生成每个文件。 - 生成完成后执行可选命令、检查和自动修复。
2. 增强项目 (enhance)
当已有项目需要添加新功能时,编写一个需求工单(如 add-logging.issue),然后运行:
llm-codegen enhance add-logging.issue -o ./project
需求工单模板(feature.issue):
# 需求工单示例
name: 添加日志记录功能
description: 为所有核心函数增加日志输出,记录调用参数和执行时间。
affected_files:
- src/llm_codegen/core.py
- src/llm_codegen/utils.py
acceptance_criteria:
- 每个公共函数应记录开始和结束日志
- 日志级别为 INFO,包含函数名和参数
- 使用 loguru 记录
工具会自动:
- 读取现有项目的
design.json和代码。 - 分析需求,确定需要修改的文件。
- 生成代码变更(新增或修改文件)。
- 执行检查和修复。
3. 修复 Bug (fix)
发现 Bug 时,编写一个Bug 工单(如 crash-on-empty.issue),然后运行:
llm-codegen fix crash-on-empty.issue -o ./project
Bug 工单模板(bug.issue):
# Bug 工单示例
name: 当输入为空时程序崩溃
description: 调用 parse_readme 时若 README 为空文件,抛出未处理的 IndexError。
steps_to_reproduce:
- 创建空文件 empty.md
- 运行 llm-codegen init empty.md
expected_behavior: 应给出友好提示并退出。
actual_behavior: 抛出 IndexError 并打印堆栈。
affected_files:
- src/llm_codegen/core.py
工具会自动:
- 定位相关代码。
- 结合错误信息生成修复方案。
- 应用补丁,并重新运行测试验证。
4. 生成设计文件 (design)
根据 README.md 生成中间设计文件 design.json,而不生成代码文件,文件内容会被提交给 LLM 以确保设计质量。
llm-codegen design path/to/README.md -o ./output
流程:
- 读取
README.md,调用 LLM 生成中间设计文件design.json(位于输出目录)。 - 文件内容会被提交给 LLM,基于 README 描述生成设计蓝图。
- 生成完成后,可手动检查或直接用于后续操作。
示例:
假设有一个项目描述文件 project_readme.md,运行:
llm-codegen design project_readme.md -o ./my_design
这将生成 ./my_design/design.json,其中包含项目结构、文件关联等信息。
注意事项:
- 此命令专门用于生成
design.json,不涉及代码生成,适用于需要先设计后开发的场景。 - 生成的
design.json是工具与 LLM 交互的核心,请确保其准确性,因为它会被提交给 LLM 用于后续生成。 - 如果已有
design.json,此命令会覆盖它,建议备份原有文件。
🧠 中间设计层 (design.json)
design.json 是工具与 LLM 之间的“通用语言”,它记录了项目的完整设计蓝图,结构如下:
{
"project_name": "MyProject",
"version": "1.0.0",
"description": "项目简短描述",
"files": [
{
"path": "src/llm_codegen/core.py",
"summary": "核心生成逻辑,包含 CodeGenerator 类",
"dependencies": ["src/llm_codegen/utils.py"],
"functions": [
{
"name": "generate_file",
"summary": "生成单个文件,返回代码和命令",
"inputs": ["file_path", "prompt", "deps"],
"outputs": ["code", "commands"]
}
],
"classes": [...]
}
],
"commands": [
"pip install -e .",
"pytest tests/"
],
"check_tools": ["pytest", "pylint", "mypy"]
}
该文件由 LLM 在 init 阶段生成,并在后续所有操作中作为上下文提供给 LLM,确保每次生成都符合整体设计。
🔄 核心工作流
初始化流程
- 读取
README.md,调用 LLM 生成design.json。 - 解析
design.json,获得文件列表和依赖关系。 - 按顺序生成每个文件,生成时上下文包括:
README.mddesign.json- 已生成的依赖文件内容
- 执行文件关联的命令(如安装依赖)。
- (可选)运行检查工具,若有错误则触发自修复。
增强/修复流程
- 读取项目根目录下的
design.json和现有代码。 - 解析需求/缺陷工单,识别受影响文件。
- 调用 LLM 生成代码变更(可新增文件或修改现有文件),上下文包括:
README.mddesign.json- 所有受影响文件的当前内容
- 工单内容
- 应用变更,更新
design.json中的摘要(如果新增了函数/类)。 - 执行检查与修复。
📝 工单模板
需求工单 (feature.issue)
name: <功能名称>
description: <详细描述>
affected_files: # 可能影响到的文件(可选,留空则让 LLM 自动分析)
- path/to/file1.py
- path/to/file2.py
acceptance_criteria: # 验收条件(列表)
- 条件1
- 条件2
Bug 工单 (bug.issue)
name: <Bug 标题>
description: <详细描述>
steps_to_reproduce: # 复现步骤
- 步骤1
- 步骤2
expected_behavior: <期望行为>
actual_behavior: <实际行为>
affected_files: # 可能相关的文件(可选)
- path/to/file.py
⚙️ 配置
通过 pyproject.toml 的 [tool.llm-codegen] 部分自定义行为:
[tool.llm-codegen]
check_tools = ["pytest", "pylint", "mypy", "black"]
max_retries = 3
dangerous_commands = ["rm", "sudo", "chmod", "dd"]
🛠️ 开发指南
环境设置
# 安装 uv
curl -LsSf https://astral.sh/uv/install.sh | sh
# 创建虚拟环境并激活
uv venv
source .venv/bin/activate
# 安装项目(可编辑模式)和开发依赖
uv pip install -e ".[dev]"
项目结构
生成的项目将包含以下文件和目录:
.
├── README.md # 项目说明(原始输入)
├── pyproject.toml # 项目元数据、依赖、脚本入口
├── src/
│ └── llm_codegen/ # 主代码包
│ ├── __init__.py
│ ├── cli.py # 命令行入口(typer)
│ ├── core.py # 核心生成逻辑(BaseGenerator 类)
│ ├── enhance_generator.py
│ ├── fix_generator.py
│ ├── init_generator.py
│ ├── utils.py # 工具函数(危险命令判断、文件操作)
│ └── models.py # 数据模型(Pydantic)
├── tests/ # 单元测试
│ ├── __init__.py
│ ├── test_cli.py
│ ├── test_core.py
│ └── test_checker.py
└── logs/ # 运行日志(自动创建)
运行测试
pytest tests/
编写工单示例
项目生成后,issues/ 目录下会包含示例工单文件,可参考编写。
📌 注意事项
- 中间设计文件
design.json是核心资产,请勿手动修改(除非你完全理解设计意图),否则可能导致后续生成偏差。 - 断点续写状态文件
.llm_generator_state.json自动管理,无需手动干预。 - 若
README.md或design.json发生重大变更导致结构不一致,工具会提示并建议重新初始化。
通过引入中间设计层和工单驱动机制,本工具不仅实现了从零生成,更成为项目的“AI 协作者”,能够持续参与功能迭代与缺陷修复,大幅提升开发效率。