Analizador de repositorios de GitHub impulsado por LLM que lee un repositorio de abajo hacia arriba, resume archivos y directorios, y publica un documento estructurado en Lark (Feishu).
Envía una URL de GitHub al bot de Lark, o analiza un clon local directamente desde Python.
- Resumen jerárquico: primero archivos, luego directorios, luego pros y contras a nivel de repositorio
- Carga concurrente de archivos y procesamiento por lotes con LLM con límites de workers configurables
- Cambio a modelos alternativos (fallback) a través de LiteLLM
- Tarjetas de progreso en tiempo real en el chat de Lark
- Filtros de archivos, proxy, endpoint de LLM y URL base de documentos de Lark configurables
graph LR
User[LarkUser] -->|GitHubURL| LarkWS[LarkWebSocket]
LarkWS --> Controller
Controller -->|Thread| Worker
Worker --> RepoProcessor
RepoProcessor -->|clone| GitHub
RepoProcessor -->|summarize| LLM
Worker --> MdProcessor
MdProcessor -->|render| MarkdownFile
Worker --> DocProcessor
DocProcessor -->|upload| LarkDrive
DocProcessor -->|convert| LarkDocx
LarkDocx -->|URL| User
sequenceDiagram
participant User
participant Controller
participant Worker
participant RepoProcessor
participant LLM
participant MdProcessor
participant DocProcessor
participant Lark
User->>Controller: GitHub repo URL
Controller->>Worker: spawn background task
Worker->>RepoProcessor: clone and build file tree
RepoProcessor->>LLM: summarize files and directories
RepoProcessor->>LLM: analyze pros and cons
Worker->>MdProcessor: render Markdown
Worker->>DocProcessor: upload and convert
DocProcessor->>Lark: create cloud document
Worker->>User: send document link
git clone <repo-url>
cd DeepCode
pip install -r requirements.txt
cp .env.example .envRequeridos:
LLM_API_KEY— Clave API del proveedor de LLMLARK_APP_ID— ID de la aplicación de LarkLARK_APP_SECRET— Secreto de la aplicación de LarkLARK_CLOUD_FOLDER_ID— Token de la carpeta en la nube de Lark de destino
Ajustes opcionales (valores predeterminados mostrados en .env.example):
LLM_API_BASE— endpoint predeterminado de Volcano ArkLLM_MODEL— nombre del modelo principalLLM_FALLBACK_MODELS— modelos de respaldo separados por comasLLM_BATCH_SIZE— tamaño del lote para resúmenes de archivos (predeterminado32)LLM_NUM_RETRIES— número de reintentos para límites de tasa (predeterminado60)MAX_WORKERS— tamaño del grupo de hilos (predeterminado16)MAX_FILE_BYTES— bytes máximos leídos por archivo (predeterminado65536)TEMPORARY_DIR— espacio de trabajo temporal (predeterminado/tmp/)HTTP_PROXY— proxy HTTP/HTTPS opcional para git cloneLARK_DOC_BASE_URL— prefijo de URL del documentoFS_SUPPORTED_SUFFIX— extensiones de archivo a analizar separadas por comasFS_IGNORE_CHARS— fragmentos de ruta a omitir (ej. archivos de prueba)POLL_INTERVAL_SEC/POLL_TIMEOUT_SEC— configuración de sondeo para importación de Lark
Modo bot de Lark:
python core/entrypoint.pyModo repositorio local:
from core.worker import Worker
worker = Worker()
worker.run_on_local_path("/path/to/local/repo")DeepCode/
├── core/
│ ├── bus/ # DataBus y EventBus
│ ├── config/ # Configuración basada en entorno
│ ├── fs/ # Modelo de nodo del árbol de directorios
│ ├── model/ # Cliente LLM y prompts
│ ├── processor/ # Procesadores de repositorio, Markdown, documentos Lark y bot
│ ├── templates/ # Plantillas de documentos y tarjetas
│ ├── controller.py # Entrada de websocket de Lark
│ ├── worker.py # Orquesta la pipeline
│ └── entrypoint.py # Entrada CLI
├── tests/ # Suite pytest (APIs externas simuladas)
├── requirements.txt
├── pyproject.toml
└── README.md
Ejecutar pruebas:
pytest -qExtender el análisis:
- Prompts: editar
core/model/prompts.py - Filtrado de archivos: ajustar
FS_SUPPORTED_SUFFIX/FS_IGNORE_CHARSen la configuración - Formato de salida: editar
core/templates/document.md - Nueva etapa de pipeline: agregar un procesador y conectarlo en
core/worker.py
- Clonar el repositorio de GitHub (clonación superficial por defecto)
- Construir un árbol de directorios y cargar archivos fuente compatibles en paralelo
- Resumir archivos en lotes con LLM
- Resumir directorios de abajo hacia arriba
- Generar pros y contras del repositorio
- Renderizar un informe en Markdown desde la plantilla
- Subir a la nube de Lark y convertir a un documento docx
Este proyecto está licenciado bajo la Licencia MIT.