Перейти к содержимому

Связывание процессоров

Процессоры в воронке работают не изолированно — они соединяются между собой, образуя цепочку обработки данных. Каждое соединение определяет, что выходные DataPackets одного процессора станут входными для другого.

Связывание создается в визуальном редакторе: вы проводите линию от выхода одного процессора ко входу другого. Направление линии показывает направление потока данных.

Данные в воронке передаются строго по направлению соединений:

Процессор A (источник) --> Процессор B (приёмник)

Когда процессор A завершает работу и создаёт DataPackets, эти пакеты становятся доступны для процессора B. При запуске процессор B берёт необработанные пакеты от A и выполняет свою задачу, создавая собственные выходные пакеты.

Каждый выходной пакет хранит ссылку на входной пакет (parent_packet_id), что позволяет отследить всю историю обработки.

Одно из ключевых преимуществ связывания — доступ к данным любого предка через механизм цепочечных данных (chain data).

Рассмотрим цепочку:

search --> enrichment --> gptFilter --> crmUpdate

При обработке пакета в процессоре crmUpdate система автоматически собирает данные от всех предков:

  • Данные из search (исходный поиск)
  • Данные из enrichment (обогащение)
  • Данные из gptFilter (результат фильтрации ИИ)

Это означает, что crmUpdate может использовать поля из любого предшествующего процессора через переменные:

{{search.companyName}}
{{enrichment.revenue}}
{{gptFilter.isRelevant}}

Система строит цепочечные данные автоматически, поднимаясь по ссылкам parent_packet_id от текущего пакета до самого начала цепочки.

Процессоры выполняются последовательно, в порядке их зависимостей:

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

Процессоры можно запускать по одному вручную или запустить всю воронку целиком — тогда система сама определит правильный порядок выполнения.

Один ко многим (один источник — несколько приёмников)

Заголовок раздела «Один ко многим (один источник — несколько приёмников)»

Один процессор может передавать данные сразу нескольким процессорам:

search --> enrichment
search --> gptAnalysis
search --> crmUpdate

В этом случае все три процессора получат одни и те же DataPackets от search и будут обрабатывать их независимо друг от друга.

Это полезно, когда нужно выполнить параллельную обработку: одновременно обогатить данные, проанализировать их через ИИ и записать в CRM.

Много к одному (несколько источников — один приёмник)

Заголовок раздела «Много к одному (несколько источников — один приёмник)»

Один процессор может принимать данные от нескольких источников:

searchByInn --> merge
searchByName --> merge

Процессор merge получит DataPackets от обоих процессоров поиска. Это позволяет объединять результаты из разных источников в одном месте.

Самый распространённый паттерн — последовательная цепочка:

search --> enrichment --> filter --> crmUpdate

Каждый процессор обрабатывает результаты предыдущего и передаёт свои результаты дальше.

  • Циклы запрещены: нельзя создать соединение, которое образует замкнутый цикл. Система автоматически проверяет это при попытке создания связи и блокирует циклические зависимости.
  • Направление фиксировано: данные всегда идут в одном направлении — от источника к приёмнику. Обратная передача данных невозможна.

Не пытайтесь делать всё в одном процессоре. Лучше создать цепочку из нескольких небольших шагов: сначала обогатить данные, затем отфильтровать, затем проанализировать.

Чем раньше в цепочке вы отсеиваете нерелевантные данные, тем меньше токенов тратится на последующую обработку. Если из 500 найденных компаний вам нужны только 50, поставьте фильтр сразу после поиска.

Давайте процессорам понятные имена (alias), чтобы переменные были читаемыми. {{companySearch.inn}} намного понятнее, чем {{proc1.inn}}.

Перед запуском на полном объёме данных протестируйте цепочку с ограничением maxPackets на каждом процессоре. Это позволит убедиться, что все связи работают корректно, прежде чем тратить токены на обработку всего набора данных.