决策辅助系统

Simple MCP 是一个基于Spring Boot的AI决策辅助系统,提供个性化建议、决策记录和模式分析功能。

  • by jenjd228
  • Java
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 jenjd228/simple-mcp

使用说明

Simple MCP (Model Context Protocol)

Приложение на Spring Boot, которое предоставляет интеллектуальную систему для принятия решений и получения советов с использованием искусственного интеллекта.

Что это такое?

Simple MCP - это веб-приложение, которое помогает пользователям:

  • Получать персонализированные советы на основе вопросов и контекста
  • Записывать и анализировать принятые решения
  • Отслеживать результаты и эмоциональное состояние при принятии решений
  • Получать анализ паттернов в поведении

Технологический стек

  • Java 21 - основной язык программирования
  • Spring Boot 4.0.2 - фреймворк для создания веб-приложений
  • Spring AI 2.0.0-M2 - интеграция с моделями искусственного интеллекта
  • OpenAI API - используется для генерации советов и анализа
  • SpringDoc OpenAPI 3 - автоматическая генерация документации API
  • Swagger UI - интерактивная документация API
  • Maven - система сборки
  • Lombok - для сокращения шаблонного кода

Требования

  • Java 21 или выше
  • Maven 3.6+
  • API ключ OpenAI (настроить в application.yml)
  • Интернет-соединение для работы с OpenAI API

Установка и запуск

1. Клонирование репозитория

git clone <repository-url>
cd simple-mcp

2. Настройка OpenAI API

Откройте файл src/main/resources/application.yml и добавьте ваш API ключ:

spring:
  ai:
    openai:
      api-key: "ваш-openai-api-ключ"

3. Сборка и запуск

# Сборка проекта
mvn clean compile

# Запуск приложения
mvn spring-boot:run

Приложение будет доступно по адресу: http://localhost:8080

API Документация

После запуска приложения вы можете получить доступ к интерактивной документации Swagger UI:

  • Swagger UI: http://localhost:8080/swagger-ui.html
  • OpenAPI JSON: http://localhost:8080/api-docs

Доступные эндпоинты

AI Controller (/ai)

  • POST /ai/tools - Обработка сообщений с помощью искусственного интеллекта

MCP Controller (/mcp)

  • POST /mcp/advice - Получение советов на основе вопросов и контекста
  • POST /mcp/decision - Создание новых решений

Функции документации

  • Интерактивное тестирование - попробуйте API прямо в браузере
  • Автоматическая валидация - проверка запросов и ответов
  • Подробные описания - для всех параметров и моделей данных
  • Примеры запросов - готовые примеры для каждого эндпоинта

Основные функции

1. Получение советов

Отправьте вопрос и контекст, чтобы получить персонализированный совет от ИИ.

Endpoint: POST /mcp/advice

Пример запроса:

{
  "question": "Как улучшить производительность приложения?",
  "context": "Приложение написано на Java с использованием Spring Boot"
}

Пример ответа:

{
  "advice": "Рекомендую использовать кэширование и оптимизировать запросы к базе данных",
  "patterns": {
    "performance": 3,
    "optimization": 2
  }
}

2. Создание решений

Запишите решение, которое вы приняли, с указанием вариантов и обоснования.

Endpoint: POST /mcp/decision

Пример запроса:

{
  "question": "Менять ли работу?",
  "options": ["Остаться", "Уйти"],
  "chosenOption": "Уйти",
  "reasoning": "Предлагают лучшие условия и зарплату",
  "emotionalState": "Взволнованно, но оптимистично"
}

3. Обработка сообщений AI

Отправьте текстовое сообщение для обработки искусственным интеллектом.

Endpoint: POST /ai/tools

Пример запроса:

{
  "text": "Помоги мне принять решение о смене работы"
}

Пример ответа:

{
  "text": "Рассмотрите следующие факторы при принятии решения о смене работы..."
}

4. Отражение решений

Добавьте результат принятого решения и оцените, было ли оно правильным.

Endpoint: POST /mcp/decision/{id}/reflect

Пример запроса:

{
  "outcome": "Смена работы оказалась удачной",
  "regret": false
}

Структура проекта

src/main/java/com/ai/simple_mcp/
├── api/                    # Контроллеры REST API
│   ├── AiController.java   # Контроллер для обработки AI сообщений
│   └── McpController.java  # Основной контроллер MCP эндпоинтов
├── config/                 # Конфигурация приложения
│   ├── AiConfig.java       # Настройка Spring AI и ChatClient
│   └── SwaggerConfig.java  # Конфигурация Swagger/OpenAPI документации
├── domain/                 # Модели данных
│   ├── AdviceRequest.java  # Запрос на совет
│   ├── AdviceResponse.java # Ответ с советом
│   ├── CreateDecisionRequest.java # Запрос на создание решения
│   ├── Decision.java       # Сущность решения
│   ├── MessageDto.java     # Сообщение для AI обработки
│   ├── ReflectDecisionRequest.java # Запрос на отражение решения
│   └── UserProfile.java    # Профиль пользователя с паттернами
├── repository/             # Слой доступа к данным
│   └── DecisionRepository.java # Хранилище решений (in-memory)
├── service/                # Бизнес-логика
│   ├── AdviceService.java  # Сервис получения советов
│   ├── DecisionService.java # Сервис управления решениями
│   └── PatternAnalysisService.java # Сервис анализа паттернов
└── ai/                     # Интеграция с ИИ
    ├── DecisionAdvisor.java # Советчик по решениям
    └── PromptBuilder.java  # Построитель промптов для ИИ

Как это работает?

  1. Получение советов: Приложение отправляет ваш вопрос и контекст в OpenAI API, где ИИ анализирует ситуацию и возвращает персонализированный совет с выявленными паттернами.

  2. Управление решениями: Вы можете записывать свои решения, указывая вопрос, варианты, выбранный ответ и эмоциональное состояние. Все решения сохраняются в памяти приложения.

  3. Анализ паттернов: Система может анализировать ваши прошлые решения для выявления поведенческих паттернов и ценностей.

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

Сценарий 1: Карьерный совет

curl -X POST http://localhost:8080/mcp/advice \
  -H "Content-Type: application/json" \
  -d '{
    "question": "Стоит ли переходить на удаленную работу?",
    "context": "Сейчас работаю в офисе, есть семья с маленькими детьми"
  }'

Сценарий 2: Запись решения

curl -X POST http://localhost:8080/mcp/decision \
  -H "Content-Type: application/json" \
  -d '{
    "question": "Купить ли новую машину?",
    "options": ["Купить", "Не покупать", "Подождать"],
    "chosenOption": "Подождать",
    "reasoning": "Текущая машина еще в хорошем состоянии",
    "emotionalState": "Спокойно"
  }'

Сценарий 3: Обработка AI сообщения

curl -X POST http://localhost:8080/ai/tools \
  -H "Content-Type: application/json" \
  -d '{
    "text": "Помоги мне принять решение о смене работы"
  }'

Сценарий 4: Оценка результата

curl -X POST http://localhost:8080/mcp/decision/{decision-id}/reflect \
  -H "Content-Type: application/json" \
  -d '{
    "outcome": "Через 6 месяцев старая машина потребовала ремонта",
    "regret": true
  }'

Ограничения

  • Решения хранятся в памяти приложения и будут потеряны при перезапуске
  • Требуется действующий API ключ OpenAI
  • Количество запросов к OpenAI API ограничено тарифным планом

Разработка

Добавление новых функций

  1. Создайте новую модель данных в domain/
  2. Добавьте бизнес-логику в service/
  3. Создайте эндпоинт в соответствующем контроллере (api/)
  4. Добавьте Swagger аннотации для документации:
    • @Tag для контроллеров
    • @Operation и @ApiResponses для эндпоинтов
    • @Schema для моделей данных
  5. Обновите README при необходимости

Работа с Swagger документацией

  • Все эндпоинты автоматически документируются через SpringDoc OpenAPI
  • Используйте аннотации @io.swagger.v3.oas.annotations.* для детализации
  • Доступ к интерактивной документации: http://localhost:8080/swagger-ui.html
  • Конфигурация Swagger находится в config/SwaggerConfig.java

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

# Запуск тестов
mvn test

# Запуск с тестовым профилем
mvn spring-boot:run -Dspring-boot.run.profiles=test

Поддержка

Если у вас возникли вопросы или проблемы:

  1. Проверьте настройки в application.yml
  2. Убедитесь, что API ключ OpenAI действителен
  3. Проверьте логи приложения на наличие ошибок

Результаты работы

Пример 1: Анализ сожаления об увольнении

Запрос пользователя: "Я принял решение и бросил работу и теперь думаю об этом и сожалею"

Ответ модели:

{
  "text": "Я зафиксировал ваше решение бросить работу и ваше сожаление об этом. Если хотите, могу помочь вам проанализировать ситуацию или предложить варианты, как справиться с этим чувством. Что бы вы хотели сделать дальше?"
}

Логи системы:

2026-01-31T23:17:59.234+03:00  INFO 11740 --- [simple-mcp] [nio-8080-exec-1] com.ai.simple_mcp.ai.DecisionAdvisor     : processUserMessage Я принял решение и бросил работу и теперь думаю об этом и сожалею
2026-01-31T23:18:02.155+03:00  INFO 11740 --- [simple-mcp] [nio-8080-exec-1] c.ai.simple_mcp.service.DecisionService  : create: CreateDecisionRequest(question=Стоило ли мне бросать работу?, option=бросил работу, reasoning=Я принял решение бросить работу, но теперь сожалею об этом., emotionalState=сожаление, regret=true)

Пример 2: Совет о новой работе с учетом паттернов

Запрос пользователя: "Я нашел новую работу и хочу ее бросить как думаешь нужно ли мне это делать ? Думаю буду ли я сожалеть об этом"

Ответ модели:

{
  "text": "Судя по твоей истории и ценностям, резкое решение бросить новую работу может привести к сожалениям и нестабильности. У тебя уже были случаи, когда смена работы сопровождалась сомнениями и негативными эмоциями. Рекомендую не торопиться с увольнением, а сначала тщательно проанализировать, что именно тебя не устраивает, и попробовать найти способы улучшить ситуацию на текущем месте. Если хочешь, могу помочь составить критерии для оценки работы или план действий на случай, если решишь уйти. Как ты хочешь поступить?"
}

Логи системы:

2026-01-31T23:18:25.976+03:00  INFO 11740 --- [simple-mcp] [nio-8080-exec-3] com.ai.simple_mcp.ai.DecisionAdvisor     : processUserMessage Я нашел новую работу и хочу ее бросить как думаешь нужно ли мне это делать ? Думаю буду ли я сожалеть об этом
2026-01-31T23:18:27.378+03:00  INFO 11740 --- [simple-mcp] [nio-8080-exec-3] c.ai.simple_mcp.service.AdviceService    : Получение совета: AdviceRequest(question=Стоит ли бросать новую работу? Будет ли сожаление об этом?, context=Пользователь нашел новую работу и думает, стоит ли ее бросить.)
2026-01-31T23:18:27.379+03:00  INFO 11740 --- [simple-mcp] [nio-8080-exec-3] c.a.s.service.PatternAnalysisService     : buildProfile [Decision(timestamp=2026-01-31T20:18:02.157537300Z, situation=Стоило ли мне бросать работу?, option=бросил работу, reasoning=Я принял решение бросить работу, но теперь сожалею об этом., emotionalState=сожаление, outcome=null, regret=true)]

Ключевые особенности продемонстрированной работы:

  1. Контекстуальная память: Система запоминает предыдущие решения пользователя (увольнение с сожалением)
  2. Анализ паттернов: При формировании совета учитывается история решений и эмоциональных состояний
  3. Персонализированные рекомендации: Ответы адаптируются под индивидуальный опыт пользователя
  4. Эмоциональный интеллект: Система анализирует и учитывает эмоциональное состояние при принятии решений

Лицензия

Этот проект предназначен для образовательных целей.