5a65165114
Замена вырожденного «одна фраза → одна страница» на §12/§11.3 финал: - Шаг АНАЛИЗ (ChannelA\AitunnelQueryAnalyzer): описание → запросы-рубрики (мелкая модель). - Канал А (ChannelA\CategoryScraper): скрейп категории 2ГИС с пагинацией → резолв карточек. - Канал В (ChannelB\*): ОДНА модель sonar-reasoning-pro × 2 прохода → ТОЛЬКО имена федералов; стоп-лист = имена из А + примеры; сайт федерала через EXA (ExaSiteFinder), т.к. у федерала нет карточки в 2ГИС/Яндексе на регион. - Оркестратор LiveFindCompetitors переписан: АНАЛИЗ→А→В→слияние→отсев→дедуп→похожесть→DTO. - Провайдер перепрошит; config services.php +research_model/exa. Похожесть — эмбеддер-модель (математически), резолвер/дедуп — без изменений. Всё за тонкими границами, офлайн-тесты на фикстурах: модуль 130 unit + 74 feature зелёные. Провайдер за флагом autopodbor.real_find; на проде не меняется. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
17 lines
871 B
PHP
17 lines
871 B
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Services\Autopodbor\Agent\ChannelA;
|
|
|
|
/**
|
|
* Шаг АНАЛИЗ канала А: из описания деятельности клиента → НЕСКОЛЬКО коротких запросов-рубрик для
|
|
* скрейпа категории 2ГИС/Яндекса (ZAFIKSIROVANO §0-БИС / §12.7 — в тесте Омеги было ~6 запросов).
|
|
* Реализация решает, какой моделью (по умолчанию — мелкая chat-модель). За границей — для офлайн-теста.
|
|
*/
|
|
interface QueryAnalyzer
|
|
{
|
|
/** @return list<string> короткие запросы-рубрики (напр. «автоломбард», «займ под залог авто»). */
|
|
public function analyze(string $description, string $region): array;
|
|
}
|