Skip to content

Latest commit

 

History

History
159 lines (123 loc) · 5.05 KB

File metadata and controls

159 lines (123 loc) · 5.05 KB

DeepCode

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.

Características

  • 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

Arquitectura

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
Loading

Flujo de Procesamiento

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
Loading

Inicio Rápido

1. Instalación

git clone <repo-url>
cd DeepCode
pip install -r requirements.txt
cp .env.example .env

2. Configurar .env

Requeridos:

  • LLM_API_KEY — Clave API del proveedor de LLM
  • LARK_APP_ID — ID de la aplicación de Lark
  • LARK_APP_SECRET — Secreto de la aplicación de Lark
  • LARK_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 Ark
  • LLM_MODEL — nombre del modelo principal
  • LLM_FALLBACK_MODELS — modelos de respaldo separados por comas
  • LLM_BATCH_SIZE — tamaño del lote para resúmenes de archivos (predeterminado 32)
  • LLM_NUM_RETRIES — número de reintentos para límites de tasa (predeterminado 60)
  • MAX_WORKERS — tamaño del grupo de hilos (predeterminado 16)
  • MAX_FILE_BYTES — bytes máximos leídos por archivo (predeterminado 65536)
  • TEMPORARY_DIR — espacio de trabajo temporal (predeterminado /tmp/)
  • HTTP_PROXY — proxy HTTP/HTTPS opcional para git clone
  • LARK_DOC_BASE_URL — prefijo de URL del documento
  • FS_SUPPORTED_SUFFIX — extensiones de archivo a analizar separadas por comas
  • FS_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

3. Ejecutar

Modo bot de Lark:

python core/entrypoint.py

Modo repositorio local:

from core.worker import Worker

worker = Worker()
worker.run_on_local_path("/path/to/local/repo")

Estructura del Proyecto

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

Desarrollo

Ejecutar pruebas:

pytest -q

Extender el análisis:

  • Prompts: editar core/model/prompts.py
  • Filtrado de archivos: ajustar FS_SUPPORTED_SUFFIX / FS_IGNORE_CHARS en la configuración
  • Formato de salida: editar core/templates/document.md
  • Nueva etapa de pipeline: agregar un procesador y conectarlo en core/worker.py

Cómo Funciona

  1. Clonar el repositorio de GitHub (clonación superficial por defecto)
  2. Construir un árbol de directorios y cargar archivos fuente compatibles en paralelo
  3. Resumir archivos en lotes con LLM
  4. Resumir directorios de abajo hacia arriba
  5. Generar pros y contras del repositorio
  6. Renderizar un informe en Markdown desde la plantilla
  7. Subir a la nube de Lark y convertir a un documento docx

Licencia

Este proyecto está licenciado bajo la Licencia MIT.