---
title: "Crea un Bot de IA para Discord con Agno (Equipos, Memoria, Base de Conocimiento)"
description: "Un bot de IA para Discord listo para producción con respuestas en streaming, base de conocimiento vectorial, memoria Cognee, orquestación de equipos y herramientas de automejora."
date: 2026-02-03
categories: ["ai"]
tags: ["ai-tools","self-hosted","discord"]
---

import Notice from "@components/widgets/Notice.astro";
import Button from "@components/widgets/Button.astro";
import ListCheck from "@components/widgets/ListCheck.astro";
import Accordion from "@components/widgets/Accordion.astro";
import YouTubeEmbed from "@components/widgets/YouTubeEmbed.astro";

Esta guía muestra cómo construir un bot de IA para Discord usando [Agno](https://github.com/agno-agi/agno). El bot transmite las respuestas en tiempo real, recuerda conversaciones, busca en una base de conocimiento y puede delegar trabajo a agentes especializados.

<Button text="Ver en GitHub" link="https://github.com/bitdoze/bitdoze_bot" variant="solid" color="purple" size="md" icon="github" />

<YouTubeEmbed
  url="https://www.youtube.com/embed/yoWGFO7tvpc"
  label="Creé un Asistente Personal de IA en 90 Minutos"
/>

## Qué Hace Este Bot

- Responde cuando lo `@mencionas` en Discord
- Transmite las respuestas (ves cómo el mensaje se actualiza mientras se genera)
- Guarda recuerdos y aprende tus preferencias con el tiempo
- Busca en una base de conocimiento (LanceDb o PgVector)
- Ejecuta tareas programadas mediante cron
- Delega trabajo complejo a equipos de agentes

## Requisitos Previos

<ListCheck>
<ul>
<li>Python 3.12+</li>
<li>Token de bot de Discord</li>
<li>Clave de API del modelo (cualquier proveedor compatible con OpenAI)</li>
<li>Opcional: token de GitHub para las herramientas de GitHub</li>
</ul>
</ListCheck>

Si eres nuevo en el empaquetado de Python, consulta [UV](/uv-get-start/).

## Inicio Rápido

```bash
git clone https://github.com/bitdoze/bitdoze_bot.git
cd bitdoze_bot
uv sync
python scripts/setup_bot.py
```

El asistente de configuración te pide el token de Discord, las claves de API y los ajustes opcionales. Crea `~/.bitdoze-bot/` con todo lo necesario.

## Configuración del Bot de Discord

1. Ve a [discord.com/developers](https://discord.com/developers)
2. Crea una aplicación y añade un bot
3. Copia el token
4. Activa **Message Content Intent** (obligatorio)
5. Invítalo a tu servidor con los permisos adecuados

## Estructura del Proyecto

```text
bitdoze-bot/
  main.py
  config.example.yaml
  docker-compose.yml
  bitdoze_bot/
    agents.py
    discord_bot.py
    cron.py
    heartbeat.py
    discovery_tools.py
    tool_permissions.py
    run_monitor.py
  scripts/
    setup_bot.py
    generate_soul.py
    setup_knowledge.py
  tests/
```

## Funciones Principales

**Streaming**: Los mensajes se actualizan en Discord a medida que el agente genera contenido. Ves el progreso en lugar de esperar la respuesta completa.

**Memoria**: Almacenamiento con SQLite para las conversaciones. Integración opcional con Cognee para memoria a largo plazo con búsqueda semántica.

**Base de conocimiento**: Búsqueda vectorial con LanceDb (sin configuración) o PgVector (requiere PostgreSQL). Añade documentos a `workspace/knowledge/` y el bot podrá referenciarlos.

**Equipos**: Varios agentes que pueden colaborar. El equipo de entrega podría tener un arquitecto que planifica y un ingeniero de software que implementa.

**Automejora**: Las herramientas de descubrimiento permiten al bot guardar y buscar sus propios aprendizajes. Combinado con `learned_knowledge: agentic`, decide cuándo almacenar nuevos conocimientos.

**Automatización**: Comprobación de heartbeat cada 30 minutos. Los trabajos cron se ejecutan según la programación definida en `workspace/CRON.yaml`.

**Permisos de herramientas**: Reglas de permitir/denegar en tiempo de ejecución con registro de auditoría. Bloquea el acceso al shell en canales públicos y permítelo en los privados.

## Configuración

### Variables de Entorno

```env
DISCORD_BOT_TOKEN=your_discord_token
OPENAI_API_KEY=your_api_key
GITHUB_ACCESS_TOKEN=optional_github_token
```

### Configuración Básica

```yaml
model:
  provider: openai_like
  id: stepfun/step-3.5-flash:free
  base_url: https://openrouter.ai/api/v1
  api_key_env: OPENAI_API_KEY
  structured_outputs: false

discord:
  token_env: DISCORD_BOT_TOKEN

runtime:
  streaming_enabled: true
  streaming_edit_interval: 1.5
  agent_timeout: 600

memory:
  mode: automatic
  db_file: data/bitdoze.db
  enable_session_summaries: true

learning:
  enabled: true
  mode: always
  stores:
    user_profile: true
    user_memory: true
    learned_knowledge: agentic
```

### Streaming

Define `runtime.streaming_enabled: true` para ver cómo las respuestas se actualizan en tiempo real. El bot edita el mensaje de Discord a medida que llega el contenido. Vuelve al modo sin streaming en las ejecuciones de equipo.

### Base de Conocimiento

```yaml
knowledge:
  enabled: true
  backend: lancedb  # or pgvector
  embedder: text-embedding-3-small
  lance_uri: data/lancedb
  table_name: bitdoze_knowledge
```

Ejecuta `python scripts/setup_knowledge.py` después de añadir documentos a `workspace/knowledge/`.

### Memoria Cognee (Opcional)

```yaml
memory:
  cognee:
    enabled: true
    base_url: http://localhost:8000
    auto_sync_conversations: true
    auto_recall_enabled: true
    auto_recall_limit: 5
```

Inicia Cognee con `docker compose up -d`.

<Notice type="info" title="Alternativa: Hindsight">
Si quieres un sistema de memoria más capaz, [Hindsight](/es/desplegar-hindsight-docker/) tiene una integración directa con Agno. Sustituye a Cognee por una memoria basada en vectores que incluye extracción de entidades, modelos mentales y cuatro estrategias de búsqueda en paralelo. Mejor para agentes que necesitan aprender y mejorar con el tiempo.
</Notice>

### Agentes y Enrutamiento

```yaml
agents:
  default: main
  workspace_dir: workspace/agents
  definitions:
    - name: main
      tools: [web_search, website, github, file, discoveries]
    - name: research
      tools: [web_search, website, github]
      skills: [web-research]
  routing:
    rules:
      - agent: delivery-team
        starts_with: ["team:"]
      - agent: research
        contains: ["research:"]
```

### Equipos

```yaml
teams:
  definitions:
    - name: delivery-team
      members: [architect, software-engineer]
      respond_directly: true
      determine_input_for_members: true
      delegate_to_all_members: false
      add_team_history_to_members: true
      num_team_history_runs: 5
```

<Notice type="warning" title="Configuración de Equipos">
Evita definir a la vez `delegate_to_all_members: true` y `respond_directly: true`, salvo que quieras un comportamiento de difusión. El bot te avisará.
</Notice>

## Añadir Nuevos Agentes

Crea una carpeta en `workspace/agents/<nombre>/`:

**agent.yaml**
```yaml
name: product-manager
enabled: true
model:
  id: glm-4.7
  base_url: https://api.z.ai/api/coding/paas/v4
  api_key_env: GLM_API_KEY
tools: []
skills: []
```

**AGENTS.md**
```md
# Product Manager Agent

Focus on scope, priorities, and delivery risk.
```

Añádelo a un equipo en `config.yaml`:
```yaml
teams:
  definitions:
    - name: delivery-team
      members: [architect, software-engineer, product-manager]
```

## Uso en Discord

Mención normal:
```text
@YourBot help me design a migration plan
```

Forzar un agente o equipo concreto:
```text
@YourBot agent:research find papers on distributed systems
@YourBot agent:delivery-team Build and validate this feature
@YourBot team: implement the API with tests
```

## Heartbeat y Cron

**workspace/CRON.yaml**
```yaml
enabled: true
timezone: Europe/Bucharest
channel_id: 123456789012345678
jobs:
  - name: daily-status
    cron: "0 9 * * *"
    agent: main
    message: "Send a daily status update."
    session_scope: isolated
```

El heartbeat se ejecuta cada 30 minutos usando `workspace/HEARTBEAT.md`. Si devuelve `HEARTBEAT_OK`, el mensaje se suprime.

## Docker (PgVector + Cognee)

PostgreSQL opcional con pgvector y la API de Cognee:

```bash
docker compose up -d
```

Esto inicia PostgreSQL en el puerto 5532 y Cognee en `127.0.0.1:8000`.

## Permisos de Herramientas

Controla qué herramientas pueden ejecutarse y dónde:

```yaml
tool_permissions:
  enabled: true
  default_effect: deny
  rules:
    - effect: allow
      tools: [shell]
      role_ids: [123456789012345678]
  audit:
    enabled: true
    path: logs/tool-audit.jsonl
```

## Producción (systemd)

`~/.config/systemd/user/bitdoze-bot.service`
```ini
[Unit]
Description=Bitdoze Bot
After=network.target

[Service]
WorkingDirectory=/home/you/.bitdoze-bot
ExecStart=/home/you/.local/bin/uv run main.py
Restart=always
RestartSec=5
Environment=PYTHONUNBUFFERED=1
EnvironmentFile=/home/you/.bitdoze-bot/.env

[Install]
WantedBy=default.target
```

```bash
systemctl --user daemon-reload
systemctl --user enable --now bitdoze-bot
journalctl --user -u bitdoze-bot -f
```

## Scripts

| Script | Propósito |
|--------|-----------|
| `scripts/setup_bot.py` | Asistente de configuración interactivo |
| `scripts/generate_soul.py` | Genera la personalidad SOUL.md |
| `scripts/setup_knowledge.py` | Inicializa la base de conocimiento |

## Pruebas

```bash
uv run pytest -q
```

## Relacionados

- [UV, el Gestor de Paquetes de Python](/uv-get-start/)
- [Primeros Pasos con Agno](/agno-get-start/)
- [Los mejores repos de IA en GitHub](/es/mejores-repos-github-ia/) — Agno, Mastra, OpenClaw, Hermes, memoria y más

<Notice type="success" title="Listo para Funcionar">
Ahora tienes un bot de IA para Discord con memoria, búsqueda en la base de conocimiento, orquestación de equipos y tareas programadas. Clona el repositorio, ejecuta el asistente de configuración y empieza a chatear.
</Notice>