Sobes.tech
Senior

Καθήκον ζωντανής κωδικοποίησης: σχεδιάστε ένα γράφημα καταστάσεων LangGraph για ένα σύστημα ανάλυσης συμβάντων σε βιομηχανικό εξοπλισμό με παράλληλη αναζήτηση σε έγγραφα και SQL

sobes.tech AI

Απάντηση από AI

Для системы анализа инцидентов на промышленном оборудовании с параллельным поиском по документам и SQL можно спроектировать граф состояний LangGraph следующим образом:

  1. Состояния:
  • Idle — ожидание новых данных или запроса
  • DataIngestion — получение и подготовка данных инцидентов
  • Preprocessing — очистка и нормализация данных
  • ParallelSearch — параллельный запуск поисков:
    • DocSearch — поиск по документам
    • SQLSearch — поиск по базе данных
  • MergeResults — объединение результатов поиска
  • Analysis — анализ объединённых данных, выявление закономерностей
  • AlertGeneration — генерация предупреждений или отчетов
  • Completed — завершение обработки
  1. Переходы:
  • IdleDataIngestion при поступлении новых данных
  • DataIngestionPreprocessing после загрузки
  • PreprocessingParallelSearch
  • В ParallelSearch одновременно запускаются DocSearch и SQLSearch
  • После завершения обеих поисков — переход в MergeResults
  • MergeResultsAnalysis
  • AnalysisAlertGeneration при обнаружении инцидентов
  • AlertGenerationCompleted
  • CompletedIdle
  1. Пример кода на Java (упрощённый):
enum State { IDLE, DATA_INGESTION, PREPROCESSING, DOC_SEARCH, SQL_SEARCH, MERGE_RESULTS, ANALYSIS, ALERT_GENERATION, COMPLETED }

class LangGraph {
    private State currentState = State.IDLE;

    void onNewData() {
        currentState = State.DATA_INGESTION;
        // загрузка данных
        currentState = State.PREPROCESSING;
        // очистка
        currentState = State.DOC_SEARCH;
        // параллельно запускаем SQL_SEARCH
        // после завершения обоих
        currentState = State.MERGE_RESULTS;
        // объединение
        currentState = State.ANALYSIS;
        // анализ
        currentState = State.ALERT_GENERATION;
        // генерация
        currentState = State.COMPLETED;
        currentState = State.IDLE;
    }
}

Такой граф позволяет чётко контролировать состояние системы и параллельно выполнять поиск по разным источникам.