历史内容生成服务器

Moscow History MCP Server 是一个利用AI技术生成关于莫斯科历史内容的服务器,包括文本和图像的自动化生成与质量控制。

  • by semen243
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 semen243/MoscowHistoryMCP2

使用说明

🏛️ Moscow History MCP Server

Сервер для генерации исторического контента о Москве с использованием AI технологий.

🎯 Описание

Moscow History MCP Server - это полнофункциональный сервер для создания информативных и визуально привлекательных постов об истории Москвы. Сервер следует детальной инструкции по созданию контента и включает все этапы от сбора фактов до контроля качества.

🏗️ Архитектура

Компоненты:

  • MCP Server - основной сервер для генерации контента
  • API интеграции - Perplexity AI + OpenAI GPT
  • Модели данных - районы, улицы, здания Москвы
  • Сервисы - генерация фактов, постов, изображений
  • Контроль качества - проверка соответствия требованиям

📋 Этапы работы согласно инструкции

Этап 1: Подготовка и планирование

  • ✅ База объектов (районы, улицы, дома)
  • ✅ Критерии отбора (минимум 3 факта)
  • ✅ Приоритеты (уникальные истории, легенды, факты с датами)

Этап 2: Сбор информации

  • ✅ Perplexity AI для сбора фактов
  • ✅ Фильтрация данных (конкретные факты с датами)
  • ✅ Проверка минимального количества фактов

Этап 3: Создание текста

  • ✅ GPT для генерации финального текста
  • ✅ Соблюдение лимитов (900-1000 символов)
  • ✅ Структура: крючок → факты → финал

Этап 4: Подготовка изображения

  • ✅ Гербы для районов
  • ✅ Архитектурные иллюстрации для улиц/домов
  • ✅ Стили: Sempé + pastel illustration

Этап 5: Контроль качества

  • ✅ Проверка длины текста
  • ✅ Проверка количества фактов
  • ✅ Проверка уникальности
  • ✅ Отсутствие эмодзи и ссылок

🚀 Быстрый старт

1. Клонирование проекта:

git clone https://github.com/semen243/MoscowHistoryMCP.git
cd MoscowHistoryMCP

2. Настройка API ключей:

Создайте файл .env:

OPENAI_API_KEY=your_openai_api_key_here
PERPLEXITY_API_KEY=your_perplexity_api_key_here
IMAGE_PROCESSING_API_KEY=5fb1c9714b1e8d89852629d86765cd50
MIN_FACTS_REQUIRED=3
MAX_POSTS_PER_DAY=30
MCP_SERVER_HOST=0.0.0.0
MCP_SERVER_PORT=8000

3. Запуск через Docker:

docker-compose up -d --build

4. Проверка работы:

curl http://localhost:8000/info

📡 API Эндпоинты

Базовый URL: http://localhost:8000

1. GET /info - Информация о сервере

curl http://localhost:8000/info

2. GET /objects - Список объектов

curl http://localhost:8000/objects

3. POST /facts - Сбор фактов для объекта

curl -X POST http://localhost:8000/facts \
  -H "Content-Type: application/json" \
  -d '{"object_type": "street", "object_name": "Арбат"}'

4. POST /generate - Полная генерация поста

curl -X POST http://localhost:8000/generate \
  -H "Content-Type: application/json" \
  -d '{"object_type": "street", "object_id": "arbat_street"}'

5. GET /workflow - Ежедневный рабочий процесс

curl http://localhost:8000/workflow

6. POST /image/process - Обработка изображения

curl -X POST http://localhost:8000/image/process \
  -H "Content-Type: application/json" \
  -d '{"image_url": "https://example.com/image.jpg", "object_name": "Арбат", "object_type": "street"}'

7. GET /image/status - Статус задачи обработки изображения

curl "http://localhost:8000/image/status?task_id=task_12345678"

8. GET /image/test - Тест API обработки изображений

curl http://localhost:8000/image/test

🧪 Примеры использования

Генерация поста о районе:

curl -X POST http://localhost:8000/generate \
  -H "Content-Type: application/json" \
  -d '{"object_type": "district", "object_id": "district_1"}'

Генерация поста об улице:

curl -X POST http://localhost:8000/generate \
  -H "Content-Type: application/json" \
  -d '{"object_type": "street", "object_id": "arbat_street"}'

Генерация поста о здании:

curl -X POST http://localhost:8000/generate \
  -H "Content-Type: application/json" \
  -d '{"object_type": "building", "object_id": "building_1"}'

📊 Структура ответа

Успешная генерация поста:

{
  "success": true,
  "object": {
    "type": "street",
    "id": "arbat_street",
    "name": "Улица Арбат"
  },
  "post": {
    "text": "Улица Арбат - одна из самых известных улиц Москвы...",
    "character_count": 950,
    "ready_for_publication": true
  },
  "facts": {
    "used": 5,
    "source": "perplexity",
    "list": ["Факт 1", "Факт 2", "..."]
  },
  "image": {
    "success": true,
    "image_type": "architectural_illustration",
    "style": "архитектурная акварель в духе Jean-Jacques Sempé",
    "nano_banano_prompt": "Сделай фото рисованным..."
  },
  "quality_control": {
    "passed": true,
    "checks": {
      "text_length": true,
      "facts_count": true,
      "uniqueness": true,
      "no_emojis": true,
      "no_links": true
    },
    "ready_for_publication": true
  },
  "generated_at": "2024-01-15T10:30:00"
}

🗓️ Ежедневный рабочий процесс

Сервер автоматически:

  1. Выбирает район дня
  2. Генерирует пост о районе
  3. Выбирает улицы из этого района
  4. Генерирует посты об улицах
  5. Переходит к домам при необходимости

Получение плана на день:

curl http://localhost:8000/workflow

🖼️ Обработка изображений

Тестирование API:

curl http://localhost:8000/image/test

Обработка изображения:

curl -X POST http://localhost:8000/image/process \
  -H "Content-Type: application/json" \
  -d '{
    "image_url": "https://example.com/photo.jpg",
    "object_name": "Улица Арбат",
    "object_type": "street"
  }'

Проверка статуса обработки:

curl "http://localhost:8000/image/status?task_id=your_task_id"

Особенности обработки:

  • Размер изображения: 1:1 (квадратное)
  • Формат: PNG
  • Стили:
    • "архитектурная акварель в духе Jean-Jacques Sempé"
    • "Sempé + pastel illustration"
  • Для районов: Официальные гербы
  • Для улиц/домов: Архитектурные иллюстрации

🔧 Конфигурация

config/mcp_config.yaml:

server:
  name: "moscow-history-pipeline"
  version: "1.0.0"
  description: "MCP сервер для генерации исторического контента о Москве"
  port: 8000

content:
  daily_posts: 30
  min_facts_required: 3
  text_limits:
    min_chars: 900
    max_chars: 1000
  
  priorities:
    - "Уникальные и малоизвестные истории"
    - "Интересные истории, легенды, байки"
    - "Исторические факты с датами"
    - "Связь с известными личностями"
    - "Архитектурные особенности"
  
  image_styles:
    - "архитектурная акварель в духе Jean-Jacques Sempé"
    - "Sempé + pastel illustration"

🛠️ Развертывание на сервере

1. Подготовка сервера:

apt update && apt upgrade -y
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh
apt install docker-compose -y

2. Развертывание:

mkdir -p /opt/moscow-history-mcp
cd /opt/moscow-history-mcp
git clone https://github.com/semen243/MoscowHistoryMCP.git .

# Создание .env файла
cat > .env << 'EOF'
MIN_FACTS_REQUIRED=3
MAX_POSTS_PER_DAY=30
MCP_SERVER_HOST=0.0.0.0
MCP_SERVER_PORT=8000
OPENAI_API_KEY=your_openai_api_key_here
PERPLEXITY_API_KEY=your_perplexity_api_key_here
EOF

# Запуск
docker-compose up -d --build

3. Проверка:

curl http://localhost:8000/info

🔧 Управление сервисом

Проверка статуса:

docker-compose ps
docker-compose logs --tail=50

Перезапуск:

docker-compose restart

Обновление:

git pull
docker-compose up -d --build

🚨 Устранение неполадок

Сервер не запускается:

  1. Проверьте логи: docker-compose logs
  2. Проверьте .env файл
  3. Проверьте API ключи

API не отвечает:

  1. Проверьте статус: docker-compose ps
  2. Проверьте порт: netstat -tlnp | grep 8000

Ошибки генерации:

  1. Проверьте API ключи Perplexity и OpenAI
  2. Проверьте доступность интернета
  3. Проверьте логи сервера

📊 Мониторинг

Логи:

docker-compose logs -f

Статистика:

curl http://localhost:8000/info

🔐 Безопасность

Рекомендации:

  1. Используйте HTTPS для внешних подключений
  2. Ограничьте доступ через файрвол
  3. Регулярно обновляйте зависимости
  4. Мониторьте логи

Файрвол:

ufw allow 8000
ufw allow 22
ufw enable

📞 Поддержка

  • GitHub: https://github.com/semen243/MoscowHistoryMCP
  • Документация: См. README.md

🎯 Заключение

Moscow History MCP Server - это полнофункциональный сервер, который следует детальной инструкции по созданию качественного контента об истории Москвы. Сервер автоматизирует весь процесс от сбора фактов до контроля качества, обеспечивая высокое качество генерируемых постов.