Files
portal/app/app/Services/Autopodbor/Agent/ChannelA/QueryAnalyzer.php
T
Дмитрий f295351504 feat(автоподбор): Конкурентное поле — финальный проход склейки, вскрыть всё, группы дублей, телефоны, отсев рекламных номеров 2ГИС
Шаг 1 «Конкурентное поле» — чекпоинт:
- Финальный проход «Найти и объединить дубли» на поле и предложениях; клиент решает по каждой группе, ничего не склеиваем молча.
- Тихая склейка только по сайту и коду справочника; телефон и людный номер у более чем 4 фирм — на решение клиента.
- Колонка phones jsonb; телефон-дубли видны уже на «Предложениях».
- Sonar даёт только имя и тип, сайт всегда через EXA; вскрываем все карточки без гейта «есть сайт».
- Яндекс-карточки через локальный Playwright параллельно; рубрика из заголовка идёт в описание.
- Фикс рекламных номеров: 2ГИС-парсер разбирает телефоны пообъектно и выкидывает рекламные кнопки с platforms/caption чужих фирм.

Тесты: автоподбор 224/224 unit, 105/105 feature; фронт-спеки зелёные. Времянки app/scripts/diag-*/probe-* в гит не входят.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-03 17:34:03 +03:00

21 lines
1.2 KiB
PHP

<?php
declare(strict_types=1);
namespace App\Services\Autopodbor\Agent\ChannelA;
/**
* Шаг АНАЛИЗ канала А: из описания деятельности клиента → НЕСКОЛЬКО коротких запросов-рубрик для
* скрейпа категории 2ГИС/Яндекса (ZAFIKSIROVANO §0-БИС / §12.7 — в тесте Омеги было ~6 запросов).
* Реализация решает, какой моделью (по умолчанию — мелкая chat-модель). За границей — для офлайн-теста.
*/
interface QueryAnalyzer
{
/**
* @param string $selfSite сайт клиента из запроса на поиск (пусто — не добавляем в промт)
* @param list<string> $competitorExamples сайты/карточки конкурентов из запроса (пусто — не добавляем)
* @return list<string> короткие запросы-рубрики (напр. «автоломбард», «займ под залог авто»).
*/
public function analyze(string $description, string $region, string $selfSite = '', array $competitorExamples = []): array;
}