🧠 MCP: многоагентная точка управления
В этом проекте реализован многоагентный сервер, который направляет вопросы пользователей в модель LLM или специализированным агентам (например, дата, местоположение, погода или технический эксперт). Включает простой веб-интерфейс, созданный с помощью Streamlit для удобства использования.
🚀 Особенности
🌐 Бэкэнд с FastAPI
🧠 Специализированные агенты (дата, место, погода, эксперт LLM)
🧩 Расширяемая и модульная система агентов с наследованием
⚙️ Общее наследование
AgenteBaseдля единообразной обработки ошибок и ответов🤖 Умная логика для сотрудничества агентов друг с другом
🖥️ Визуальный интерфейс с Streamlit (GUI)
🐳 Docker-контейнеры для простого развертывания
🔌 Клиент-серверное взаимодействие, готовое для локальной или удаленной сети
Related MCP server: Brightsy MCP Server
📁 Структура проекта
MCP/
├── core/
│ ├── ollama_wrapper.py # Encapsula la lógica para interactuar con modelos LLM en Ollama
│ ├── context_loader.py # Carga contexto adicional desde base de datos u otras fuentes
│ └── router_llm.py # Router inteligente que decide qué agente usar en base a la consulta
├── agents/ # Carpeta que contiene todos los agentes disponibles del sistema
├── server/
│ ├── mcp_server.py # Punto central que gestiona los agentes registrados y el procesamiento de mensajes
│ └── api.py # Define la API REST usando FastAPI para comunicación con la GUI u otros clientes
├── gui/
│ ├── app.py # Aplicación Streamlit que actúa como interfaz gráfica del sistema
│ └── .streamlit/
│ └── secrets.toml # Archivo de configuración que contiene la URL del backend para la GUI
├── utils/
│ ├── db_utils.py # Funciones auxiliares para conectarse y consultar la base de datos SQLite
│ ├── agente_base.py # Clase base AgenteBase, común a todos los agentes personalizados
│ └── json_parser.py # Utilidad para dividir respuestas JSON en partes más manejables
├── database/
│ ├── context.db # Base de datos SQLite con información contextual para los agentes o el LLM
│ ├── comprobar_db.py # Script que valida la existencia y consistencia de la base de datos
│ └── create_db.py # Script para generar y poblar la base de datos desde cero
├── config.py # Archivo central de configuración del sistema (rutas, modelos, flags, etc.)
├── requirements.txt # Lista de dependencias de Python necesarias para ejecutar el proyecto
├── Dockerfile.backend # Dockerfile para construir el contenedor del backend (API + lógica de agentes)
├── Dockerfile.frontend # Dockerfile para construir el contenedor de la interfaz Streamlit
└── docker-compose.yml # Archivo para levantar los servicios frontend y backend de forma conjunta
⚙️ Требования
🧪 Быстрая установка
1. Клонировать репозиторий
git clone https://github.com/tu-usuario/MCP.git
cd MCP2. Создайте файл конфигурации для Streamlit
Внутри каталога gui создайте файл:
gui/.streamlit/secrets.tomlСо следующим содержанием:
server_url = "http://backend:8000/process"3. Запуск с помощью Docker Compose
docker-compose up --buildЭто позволит построить и поднять два контейнера:
Бэкэнд на
http://localhost:8000Графический интерфейс по адресу
http://localhost:8501
🌍 Доступ с другого компьютера (опционально)
Убедитесь, что вы правильно открыли порты (
8000,8501).Используйте IP-адрес серверной машины вместо
localhostвsecrets.toml.Вы также можете настроить собственные сети Docker для кросс-хостового доступа.
📦 Для производства
Вы можете запустить только бэкэнд, если хотите интегрировать его с другим интерфейсом:
docker build -f Dockerfile.backend -t mcp_backend .
docker run -p 8000:8000 mcp_backend✨ Пример использования
В веб-интерфейсе вы можете вводить такие вопросы, как:
¿Qué día es hoy?¿Dónde estoy?¿Qué clima hace?Explícame qué es Python
Приложение решит, отвечать ли на вопрос напрямую или делегировать это агенту.
🛠️ Доступны агенты
Агент | Функция |
ДАТА | Возвращает текущую дату и время |
РАСПОЛОЖЕНИЕ | Определяет город и страну по IP |
КЛИМАТ | Возвращает погоду в текущем местоположении |
🔄 Взаимодействие между агентами
Агент погоды теперь напрямую использует агент местоположения для определения географических координат ( lat , lon ) и города перед запросом погоды, что позволяет получать ответы, соответствующие фактическому местоположению пользователя. Это улучшает модульность и взаимодействие между агентами.
🧩 Как создать нового агента
Создайте класс, наследующий от AgenteBase:
from agentes.base import AgenteBase
class AgenteEjemplo(AgenteBase):
patrones = [r"expresiones.*clave", r"otra.*forma.*de.*preguntar"]
def agente(self) -> dict:
datos = {"respuesta": "Soy un agente de ejemplo"}
return {"success": True, "data": datos}Определяет шаблоны для обнаружения релевантных вопросов.
Реализует функцию
agente(), которая возвращает словарь с ключевыми данными об успехе и ошибке.Агент автоматически использует указанный LLM для генерации естественных ответов на основе ваших данных.
⚠️ Важные технические примечания
Все агенты наследуют от AgenteBase, который управляет:
Стандартные ошибки
Преобразование данных в естественный ответ с помощью LLM
Метод agent() должен возвращать структурированный словарь.
Каждый агент указывает, какую модель LLM использовать (
llm_simpleилиllm_experto).
📄 Лицензия
Данный проект лицензирован по лицензии MIT.
🙋♂️ Автор
Разработано Алехандро Гомесом Сьеррой.