Files
core/Техническое задание Интеграция AI-аналитики с помощью Ollama.md
2026-02-22 16:43:55 +00:00

6.8 KiB
Raw Permalink Blame History

Техническое задание (Версия 2.0): Интеграция AI-аналитики в parser-service

Задача: Модифицировать существующий parser-service для обогащения новостей аналитическими данными (саммари, теги, тональность) в момент парсинга, перед сохранением в базу данных.

Контекст: Мы отказываемся от создания отдельного analytics-service в пользу более простой, монолитной архитектуры. Аналитика должна стать неотъемлемой частью процесса парсинга. Каждая новость, попадающая в базу данных, должна уже содержать сгенерированные AI-данные.


1. Архитектурные изменения

  • Никаких новых сервисов. Вся логика реализуется внутри существующего parser-service.
  • Синхронный процесс: Новый воркфлоу для каждой новости: Парсинг -> Аналитика -> Сохранение в MongoDB.
  • Новый компонент: Внутри parser-service необходимо создать новый сервис/компонент (например, OllamaAnalyticsService), который будет отвечать за все взаимодействия с API Ollama.

2. Основные требования

2.1. Создание OllamaAnalyticsService

В проекте parser-service создайте новый сервис, который будет инкапсулировать логику общения с Ollama.

  • Взаимодействие с API Ollama:
    • Хост: http://185.35.223.45:11434
    • Модель: gemma3:1b
    • Клиент: Использовать WebClient для HTTP-запросов к эндпоинту /api/generate.
  • Основной метод: У сервиса должен быть публичный метод, например Analytics analyzeText(String text), который принимает сырой текст статьи и возвращает готовый объект Analytics со всеми заполненными полями.

2.2. Модификация существующих парсеров

Необходимо изменить логику каждого существующего парсера (KursivParserService, KapitalParserService и т.д.).

Новый алгоритм работы для метода parseAndSaveRssFeed():

  1. Получить и разобрать данные из RSS-ленты.
  2. Для каждой новости, после извлечения raw_text, вызвать метод analyzeText из нового OllamaAnalyticsService.
  3. Получить в ответ заполненный объект Analytics.
  4. Установить этот объект в поле analytics у сущности MarketItem.
  5. Только после этого сохранить полностью обогащенный MarketItem в MongoDB.

Примерный псевдокод для KursivParserService:

@Service
public class KursivParserService implements ParserService {

    @Autowired
    private OllamaAnalyticsService analyticsService; // Новый сервис
    @Autowired
    private MarketItemRepository repository;

    @Override
    public List<MarketItem> parseAndSaveRssFeed() {
        // ... логика получения данных из RSS ...

        for (RssItem rssItem : feedItems) {
            MarketItem marketItem = new MarketItem();
            marketItem.setTitle(rssItem.getTitle());
            marketItem.setRawText(rssItem.getText());
            // ... установить остальные поля ...

            // === НОВЫЙ ШАГ ===
            // Вызываем аналитику ПЕРЕД сохранением
            Analytics analyticsData = analyticsService.analyzeText(rssItem.getText());
            marketItem.setAnalytics(analyticsData);
            // ==================

            // Сохраняем уже обогащенный объект
            repository.save(marketItem);
        }
        // ... вернуть результат ...
    }
}

2.3. Промпты для Ollama

Используйте следующие промпты для каждой аналитической задачи внутри OllamaAnalyticsService:

  • Саммари: Напиши краткое саммари следующей новостной статьи на русском языке. Ответ должен содержать только саммари из 3-4 предложений, без лишних вступлений. Статья: [Текст статьи]
  • Теги: Извлеки 5-7 ключевых слов или тегов из текста новостной статьи. В ответе дай только список тегов через запятую, без нумерации и заголовков. Статья: [Текст статьи]
  • Тональность: Определи тональность текста новостной статьи. В ответе дай только одно слово латиницей: positive, negative или neutral. Статья: [Текст статьи]
  • Сущности (JSON): Извлеки из текста имена людей, названия компаний и географические локации. В ответе дай только JSON объект следующей структуры: {"persons": [], "companies": [], "locations": []}. Статья: [Текст статьи]

Критерии выполнения

  • Новый сервис OllamaAnalyticsService создан внутри проекта parser-service.
  • Существующие парсеры (KursivParserService и др.) модифицированы для вызова OllamaAnalyticsService перед сохранением данных.
  • Все новые записи, сохраняемые в MongoDB, сразу содержат заполненное поле analytics.
  • Процесс парсинга теперь может занимать больше времени, это ожидаемое поведение.
  • Реализована базовая обработка ошибок (например, если Ollama недоступен, поле analytics остается пустым, но парсинг не прерывается).