CLI-инструмент для генерации технической документации по коду и конфигурациям
Project description
ai_docs — генератор технической документации
English version | Русская версия
Обзор
ai_docs — CLI‑инструмент для генерации технической документации по коду и конфигурациям.
Поддерживает локальные папки, локальные git‑проекты и удалённые git‑репозитории.
Генерирует README.md и MkDocs‑сайт (с автоматической сборкой).
Ключевые возможности:
- Автоопределение доменов инфраструктуры (Kubernetes, Helm, Terraform, Ansible, Docker, CI/CD, Observability, Service Mesh / Ingress, Data / Storage)
- Инкрементальная генерация и кэширование
- Учет
.gitignoreи фильтрация файлов - Параллельное сканирование и LLM‑суммаризация с глобальным лимитом одновременных запросов к LLM (
--threads/AI_DOCS_THREADS) - Отчёт об изменениях в
docs/changes.md
Быстрый старт
- Установка зависимостей:
python3 -m venv .venv
. .venv/bin/activate
pip install -r requirements.txt
Альтернатива (установка как пакет):
python3 -m venv .venv
. .venv/bin/activate
pip install ai-docs-gen
Локальная установка в editable‑режиме:
python3 -m venv .venv
. .venv/bin/activate
pip install -e .
- Настройка переменных окружения (пример —
.env.example):
OPENAI_API_KEY=your_api_key_here
OPENAI_BASE_URL=
OPENAI_MODEL=gpt-4o-mini
OPENAI_MAX_TOKENS=1200
OPENAI_CONTEXT_TOKENS=8192
OPENAI_TEMPERATURE=0.2
AI_DOCS_THREADS=5
AI_DOCS_LOCAL_SITE=false
Если инструмент установлен как пакет, можно задать переменные окружения так:
export OPENAI_API_KEY="your_api_key_here"
export OPENAI_BASE_URL=""
export OPENAI_MODEL="gpt-4o-mini"
export OPENAI_MAX_TOKENS="1200"
export OPENAI_CONTEXT_TOKENS="8192"
export OPENAI_TEMPERATURE="0.2"
export AI_DOCS_THREADS="5"
export AI_DOCS_LOCAL_SITE="false"
- Генерация README и MkDocs:
python -m ai_docs --source .
Альтернативно:
python ai_docs --source .
Если установлен как пакет:
ai-docs --source .
Примечание для Windows:
- Пути обрабатываются корректно, но внутри всегда нормализуются в формат с
/. - Если используете PowerShell, пример активации venv и переменных окружения:
python -m venv .venv
.\\.venv\\Scripts\\Activate.ps1
$env:OPENAI_API_KEY="your_api_key_here"
$env:OPENAI_BASE_URL=""
$env:OPENAI_MODEL="gpt-4o-mini"
$env:OPENAI_MAX_TOKENS="1200"
$env:OPENAI_CONTEXT_TOKENS="8192"
$env:OPENAI_TEMPERATURE="0.2"
$env:AI_DOCS_THREADS="5"
$env:AI_DOCS_LOCAL_SITE="false"
Подкоманды CLI
ai-docs предоставляет несколько подкоманд:
| Команда | Назначение |
|---|---|
gen |
Сгенерировать/обновить документацию (поведение по умолчанию) |
lint |
Проверить, есть ли файлы с изменениями без обновления документации. Завершается с ненулевым кодом, если есть stale‑файлы |
watch |
Следить за изменениями в исходниках и автоматически регенерировать документацию (требует пакет watchdog) |
pr-diff |
Регенерировать документацию только для файлов, изменённых относительно базовой ветки (--base) |
Примеры:
ai-docs gen --source . --mkdocs
ai-docs lint --source .
ai-docs watch --source . --mkdocs --debounce 3.0
ai-docs pr-diff --source . --base main
Вызов ai-docs --source . (без явной подкоманды) сохраняет обратную совместимость и эквивалентен ai-docs gen --source ..
Примеры использования
Локальная папка:
python -m ai_docs /path/to/project
или явно:
python -m ai_docs --source /path/to/project
Локальный git‑проект:
python -m ai_docs --source ~/projects/my-repo
Удалённый репозиторий:
python -m ai_docs --source https://github.com/org/repo.git
Только README:
python -m ai_docs --source . --readme
Только MkDocs:
python -m ai_docs --source . --mkdocs
Локальный режим для MkDocs:
python -m ai_docs --source . --mkdocs --local-site
Интеграция в CI/CD
Готовые шаблоны пайплайнов лежат в examples/ci/:
examples/ci/github-actions.yml— GitHub Actions:lintна PR,genна push вmain, автокоммит обновлённой документации.examples/ci/gitlab-ci.yml— GitLab CI: отдельные stageslintиdocs.
Минимальный пример для GitHub Actions:
- name: Generate Docs
run: |
pip install ai-docs-gen
ai-docs gen --source . --mkdocs --readme --language en --force
env:
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
Pre-commit hook
В репозитории есть .pre-commit-hooks.yaml с двумя хуками:
ai-docs-lint— запускается наpre-commitи падает, если документация устарела.ai-docs-regen— запускается наpre-pushи перегенерирует документацию.
Подключение в чужом проекте:
repos:
- repo: https://github.com/<your>/ai-docs
rev: main
hooks:
- id: ai-docs-lint
- id: ai-docs-regen
Что генерируется
README.md— краткое описание проекта.ai-docs/— страницы документации.ai-docs/overview.md— сохранённый обзор проекта (используется для README и MkDocs).ai-docs/changes.md— изменения с последней генерации.ai-docs/modules/— детальная документация модулей (страница на модуль, Doxygen‑подобное описание функций/классов/параметров).ai-docs/configs/— документация конфигов проекта (обзор + страницы конфигов в универсальном стиле).ai-docs/_index.json— навигационный индекс документации (правила маршрутизации, список секций и модулей)mkdocs.yml— конфиг MkDocsai_docs_site/— собранный сайт MkDocs.ai_docs_cache/— кэш и промежуточные summary‑файлы
Поддерживаемые языки и расширения
Поддержка основана на расширениях кода в ai_docs/domain.py:
.py, .pyi, .pyx, .js, .jsx, .ts, .tsx, .go, .java, .c, .cc, .cpp, .h, .hpp, .rs, .rb, .php, .cs, .kt, .kts, .swift, .m, .mm, .vb, .bas, .sql, .pas, .dpr, .pp, .r, .pl, .pm, .f, .for, .f90, .f95, .f03, .f08, .sb3, .adb, .ads, .asm, .s, .ino, .htm, .html, .css.
Индекс документации
Файл .ai-docs/_index.json строится автоматически при генерации и содержит:
- список секций и модулей (пути и краткие описания);
- правила маршрутизации: приоритет
modules/index.md → modules/* → index.md/architecture.md/conventions.md; - принцип ранжирования: частота ключевых совпадений + приоритет файла.
.ai-docs.yaml (расширения)
Если в проекте есть файл .ai-docs.yaml, он задаёт приоритетный список расширений для сканирования.
Если файла нет, он создаётся автоматически на основе текущих *_EXTENSIONS.
Формат (поддерживаются map и list для расширений):
code_extensions:
.py: Python
.ts: TypeScript
doc_extensions:
.md: Markdown
.rst: reStructuredText
config_extensions:
.yml: YAML
.json: JSON
exclude:
- "temp/*"
- "*.log"
# Базовый URL для ссылок на исходники в сгенерированных страницах модулей/конфигов.
# Если задан, в начале каждой страницы модуля появится строка вида
# *Источник:* [`path/to/file.py`](<source_url>/path/to/file.py)
source_url: https://github.com/your-org/your-repo/blob/main
# Пользовательские промпты. Переопределяют встроенные шаблоны; неуказанные
# ключи берутся из значений по умолчанию. Доступные ключи:
# summary, summary_combine,
# module_summary, module_summary_reformat,
# config_summary, config_summary_reformat
prompts:
summary: |
Ты эксперт по технической документации. Сформируй краткое описание файла
в нашем корпоративном стиле. Одно‑два предложения, без заголовков и списков.
CLI‑параметры
--source <path|url>— источник--output <path>— выходная директория (по умолчанию: source для локальных путей,./output/<repo>для URL)
Тестирование
Тесты находятся в каталоге tests/:
test_cache.pytest_changes.pytest_cli.pytest_performance.pytest_prompts.pytest_scanner.pytest_site_config.pytest_summary.py
Запуск (из корня проекта):
python -m pytest
--readme— генерировать только README--mkdocs— генерировать только MkDocs--language ru|en— язык документации--include/--exclude— фильтры--max-size— максимальный размер файла--threads— число параллельных воркеров для сканирования и глобальный лимит одновременных запросов к LLM (см. раздел «Параллельность»)--cache-dir— директория кэша (по умолчанию.ai_docs_cache)--no-cache— отключить LLM‑кэш--local-site— добавитьsite_urlиuse_directory_urlsвmkdocs.yml--force— перезаписатьREADME.md, если он уже существует--regen— перечень разделов для принудительной перегенерации (через запятую, напримерarchitecture,configs,changes, либоall)
Поведение по умолчанию: если не указаны --readme и --mkdocs, генерируются оба артефакта.
Разделы в .ai-docs/*.md (включая overview.md) не перегенерируются, если файл уже существует, кроме указанных в --regen.
Если количество модулей меньше порога AI_DOCS_REGEN_ALL_THRESHOLD (по умолчанию 50), все разделы перегенерируются автоматически (в том числе overview.md).
При запуске без параметров для разделов выводится подсказка с примером --regen.
Если модулей больше 100, modules/index.md автоматически разбивается на страницы по 100 элементов с навигацией «←/→».
Если конфигов больше 100, configs/index.md также разбивается на страницы по 100 элементов с навигацией «←/→».
Параллельность и лимит LLM‑запросов
Параметр --threads N (или переменная окружения AI_DOCS_THREADS=N, по умолчанию 5)
задаёт глобальный верхний предел числа одновременных запросов к LLM по всему пайплайну.
Лимит реализован как общий asyncio.Semaphore в LLMClient и гарантированно действует на:
- чанки одного файла при суммаризации (
_summarize_chunks); - одновременные суммаризации разных файлов;
- параллельную подготовку контекстов (
overview,architecture,runtime,conventions, доменные контексты Kubernetes/Helm/…,index,modules,changes); - параллельную генерацию финальных разделов и README.
Cache‑hit'ы слоты семафора не занимают — параллельные повторные запросы с тем же payload отдаются из кэша, не дожидаясь свободного слота.
Тот же --threads используется и для пула потоков при сканировании файлов.
Рекомендации по подбору значения:
- При ошибках
429 Too Many Requestsот провайдера понизьте до2–3. - На мощном платном endpoint без жёсткого rate‑limit имеет смысл поднять до
10–20. --threads 1сериализует все LLM‑вызовы (удобно для отладки и детерминированных прогонов).
При запуске в логе выводится строка вида:
[ai-docs] llm: model=gpt-4o-mini context=8192 max_tokens=1200 concurrency=5
где concurrency — фактически применяемый глобальный лимит.
MkDocs
Сборка выполняется автоматически в конце генерации:
mkdocs build -f mkdocs.yml
Исключения
Сканер учитывает .gitignore, .build_ignore и дефолтные исключения:
.venv, node_modules, ai_docs_site, .ai-docs, .ai_docs_cache, dist, build, т.д.
Разработка и вклад
- Установите зависимости (см. «Быстрый старт»)
- Запускайте через
python -m ai_docs ...для отладки - PR и предложения приветствуются
Лицензия
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ai_docs_gen-0.1.11.tar.gz.
File metadata
- Download URL: ai_docs_gen-0.1.11.tar.gz
- Upload date:
- Size: 909.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1185198c7fa53a7932b50e15df609477d3cfaa75990768a91c78406feb1946fe
|
|
| MD5 |
d634734eae9bd1519c1988e33025248a
|
|
| BLAKE2b-256 |
22027b093e9ddd4fda74932cc6960558176b99cb2f9a9e260d0c7ea059f1203f
|
File details
Details for the file ai_docs_gen-0.1.11-py3-none-any.whl.
File metadata
- Download URL: ai_docs_gen-0.1.11-py3-none-any.whl
- Upload date:
- Size: 922.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3bee3500063f9947b0b0d3bdda9dbea568cd895e303e431c48b3317a9816a708
|
|
| MD5 |
54781f104c4d3ed56757c7a1625c3c92
|
|
| BLAKE2b-256 |
db77535c586faf766b44de5a853438344c9050d7711f2f562189271eb6016738
|