С появ­лени­ем боль­ших язы­ковых моделей при­выч­ки поль­зовате­лей ста­ли менять­ся. «Тебя в гуг­ле забани­ли?» сме­нилось на «спро­си у ChatGPT». Но как зас­тавить модель дать качес­твен­ный ответ? На помощь при­ходит механизм Deep Research, и сегод­ня мы пос­мотрим, как раз­вернуть его у себя, что­бы сде­лать свой ана­лог Perplexity. Лег­ко не будет, но мы спра­вим­ся!

info

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

Си­туация с гал­люцини­рова­нием, ког­да модель при­думы­вает ответ вмес­то того, что­бы хотя бы ска­зать «не знаю», ста­ла менять­ся толь­ко тог­да, ког­да LLM (и пока мы говорим толь­ко о круп­ных облачных моделях) научи­лись поль­зовать­ся инс­тру­мен­тами, зап­рашивая недос­тающую информа­цию из интерне­та. Теперь вмес­то уве­рен­ных гал­люцина­ций модель может вый­ти в сеть, поис­кать информа­цию — и офор­мить в виде кра­сиво­го отче­та.

По­иск — это еще не Deep Research. Модель генери­рует один зап­рос, смот­рит резуль­таты и на их осно­ве дает ответ. Сле­дом появи­лись аген­ты — авто­ном­ные сущ­ности, которые могут самос­тоятель­но зап­рашивать и ана­лизи­ровать дан­ные.

На сме­ну клас­сичес­ким, хоть и умным поис­ковикам приш­ли сис­темы глу­боко­го иссле­дова­ния (Deep Research). Эти сис­темы не прос­то находят ссыл­ки, как это дела­ет Google, и даже не прос­то генери­руют обзорную статью «по мотивам», а выпол­няют мно­гоэтап­ный ана­лити­чес­кий про­цесс: ана­лизи­руют слож­ный зап­рос поль­зовате­ля и раз­бива­ют его на час­ти, самос­тоятель­но ищут в интерне­те информа­цию по каж­дой под­задаче, ска­чива­ют и дис­тилли­руют веб‑стра­ницы и рас­позна­ют PDF-докумен­ты, пос­тоян­но про­веряя себя: най­ден ли ответ на зап­рос поль­зовате­ля? А точ­но най­ден? А точ­но на ори­гиналь­ный зап­рос или мы закопа­лись в ненуж­ные деб­ри? И толь­ко пос­ле того, как кри­терии будут выпол­нены (или у сис­темы закон­чатся выделен­ные ресур­сы), сис­тема сге­нери­рует ито­говый ана­лити­чес­кий отчет со все­ми ссыл­ками и цитата­ми.

Зву­чит как фан­тасти­ка? Но это работа­ет. Если ты еще не про­бовал сер­вис Perplexity — поп­робуй, даже бес­плат­ная вер­сия спо­соб­на заменить тра­дици­онные поис­ковики, если тебе нужен не набор ссы­лок, а ответ на кон­крет­ный воп­рос. Если же у тебя есть дос­туп к плат­ной вер­сии, то тебе будут дос­тупны как более мощ­ные модели‑оркес­тра­торы, так и фир­менный режим Deep Research, который не прос­то выдаст ответ на воп­рос, а напишет по теме целую дис­серта­цию. Подоб­ные режимы есть у боль­шинс­тва круп­ных облачных моделей — где‑то за день­ги, но где‑то и бес­плат­но. Gemini, Claude, ChatGPT, Grok — режим иссле­дова­теля есть во всех этих моделях.

Ес­ли у тебя нет дос­тупа ни к одной из них — не проб­лема. Deep Research есть, нап­ример, у Kimi K2.5. Это мощ­ная модель с откры­тыми весами на 1Т парамет­ров. У нее есть режимы Agent и Agent Swarm.

Еще вари­ант — GLM-5 от z.ai. Здесь мож­но прос­то вклю­чить режимы Advanced Search и Deep Thinking, а мож­но поп­робовать новый режим Agent. Запус­ти иссле­дова­ние, и модель будет выдавать тебе под­робный лог: какие инс­тру­мен­ты исполь­зовались, какие скрип­ты вызыва­лись, какие имен­но поис­ковые зап­росы; стро­ки кода и коман­ды кра­сиво и убе­дитель­но бегут в тер­минале.

Все это прек­расно, но… это об­лачные модели со все­ми вытека­ющи­ми: отсутс­твие при­ват­ности, про­писан­ная в полити­ках безопас­ность и сох­ранение всех тво­их зап­росов на сер­верах моделей, а так­же более (у запад­ных моделей) или менее (у китай­ских) жес­ткие цен­зурные рам­ки. Что делать, если Claude прос­то заб­локиру­ет твой акка­унт, потому что ты зашел из «неп­равиль­ной» локации? Да и завес­ти у себя подоб­ную сис­тему, у которой в сеть будут ухо­дить толь­ко ано­ним­ные зап­росы к поис­ковикам, хочет­ся как минимум из спор­тивно­го инте­реса.

Да­вай раз­берем­ся, что пред­лага­ет сооб­щес­тво раз­работ­чиков с откры­тым исходным кодом.

 

Кто есть кто на GitHub

Ры­нок сис­тем авто­ном­ного поис­ка и агре­гации дан­ных сегод­ня перена­сыщен про­екта­ми раз­ной сте­пени пар­шивос­ти. Что­бы отде­лить зер­на от пле­вел, мы сфо­куси­руем­ся исклю­читель­но на опен­сор­сных про­ектах, име­ющих репози­тории на GitHub, высокую популяр­ность сре­ди раз­работ­чиков и активную под­дер­жку. Про­екты, не получав­шие ком­митов боль­ше года, мы рас­смат­ривать не будем, так как в индус­трии ИИ год без обновле­ний рав­носилен смер­ти.

В статье «Аген­ты ИИ. Как работа­ет режим Deep Research и как его раз­вернуть у себя» я упо­минал Perplexica (уже пере­име­нован в ItzCrazyKns/Vane), langchain-ai/open_deep_research, zilliztech/deep-searcher, LearningCircuit/local-deep-research и HKUDS/Auto-Deep-Research. Добав­лю к ним про­екты dzhng/deep-research и assafelovic/gpt-researcher, пос­ле чего спи­сок мож­но счи­тать дос­таточ­но под­робным.

Впро­чем, для наших целей подой­дет далеко не каж­дый из этих про­ектов. Так, сис­тема Open Deep Research, раз­работан­ная соз­дателя­ми популяр­ного фрей­мвор­ка LangChain, — это прек­расный инс­тру­мент для пос­тро­ения пай­плай­нов глу­боко­го ана­лиза. В осно­ве сис­темы лежит архи­тек­тура гра­фовой оркес­тра­ции аген­тов LangGraph, поз­воля­ющая гиб­ко нас­тра­ивать сос­тояния и перехо­ды меж­ду фазами иссле­дова­ния.

Про­цесс раз­делен на три логичес­ких эта­па: опре­деле­ние мас­шта­ба (scope), непос­редс­твен­но само иссле­дова­ние с исполь­зовани­ем поис­ковых инс­тру­мен­тов и финаль­ный отчет. Сис­тема прек­расно показы­вает себя в бен­чмар­ках, а интегра­ция с сер­верами MCP поз­воля­ет нат­равли­вать аген­та не толь­ко на веб, но и на локаль­ные базы дан­ных. Тем не менее нам он не подой­дет: слиш­ком сло­жен. Это ско­рее фрей­мворк для гиков и раз­работ­чиков, чем готовый про­дукт.

Про­ект DeepSearcher от Zilliz тоже не наш вари­ант: он ори­енти­рован на Enterprise Knowledge Management — кор­поратив­ный поиск по при­ват­ным дан­ным. Инте­рес­но, но не для нас.

Сю­да же запишем Local Deep Research — инс­тру­мент, соз­данный спе­циаль­но для глу­боких иссле­дова­ний в домаш­них усло­виях. Мне он показал­ся избы­точ­но слож­ным; он отли­чает­ся парано­идаль­ным под­ходом к безопас­ности: все локаль­ные базы дан­ных шиф­руют­ся, учет­ные дан­ные живут толь­ко в рам­ках сес­сии. Пожалуй, перебор.

 

Что будем пробовать

Од­ним из фавори­тов, сов­местив­ших локаль­ные модели и прос­той интерфейс в виде стро­ки в бра­узе­ре, стал про­ект Perplexica, в начале мар­та сме­нив­ший наз­вание на Vane. Изна­чаль­но он задумы­вал­ся как опен­сор­сный клон извес­тно­го поис­ковика Perplexity. Vane пред­став­ляет собой при­ват­ный поис­ковый ИИ, который раз­ворачи­вает­ся локаль­но и работа­ет пря­мо в окне бра­узе­ра.

Perplexica может исполь­зовать любую локаль­ную модель LLM, которую ты заведешь на сво­ем компь­юте­ре; для поис­ка — дви­жок SearXNG, который ано­ним­но пар­сит Google, Bing и дру­гие плат­формы, не оставляя циф­ровых сле­дов. Есть «быс­трый» и «качес­твен­ный» режимы, мож­но заг­ружать PDF, искать по изоб­ражени­ям.

При­ятно, что SearXNG уже вхо­дит в сос­тав кон­тей­нера — не нуж­но возить­ся с Docker Compose. Уста­нав­лива­ется прос­то, работа­ет инту­итив­но, обновле­ния выходят регуляр­но, а архи­тек­тура поз­воля­ет запус­кать весь ком­байн одной коман­дой.

GPT Researcher, соз­данный Асса­фом Эло­виком, тоже инте­рес­ный про­ект, по край­ней мере на бумаге; поп­робу­ем запус­тить и его. GPT Researcher уме­ет про­водить парал­лель­ный сбор дан­ных из мно­жес­тва источни­ков и генери­ровать отче­ты с цитиро­вани­ем, под­держи­вает облачные и локаль­ные модели. В общем, будем про­бовать!

На­конец, мно­гообе­щающе — опять же на бумаге — смот­рится про­ект dzhng/deep-research, написан­ный на Node.js и под­купа­ющий прос­тотой, нас­трой­ками глу­бины и охва­та иссле­дова­ния и обе­щан­ной инте­рак­тивностью (задаст тебе уточ­няющие воп­росы по теме иссле­дова­ния). Рас­смот­рим и его.

 

Модель-оркестратор

Ум­ный поиск тре­бует не столь­ко зна­ний, сколь­ко логики. Для Deep Research вов­се не обя­затель­но исполь­зовать модель с трил­лионом парамет­ров — впол­не при­лич­ные резуль­таты, срав­нимые с бес­плат­ной вер­сией Perplexity, мож­но получить и с ком­пак­тной моделью.

Об­щие рекомен­дации прос­ты: бери сов­ремен­ную модель мак­сималь­ного раз­мера, который (вмес­те с кешем кон­тек­ста) помес­тится в виде­опа­мять тво­его компь­юте­ра с кван­том Q4_K_M, Q5_K_M или выше. Если же ты исполь­зуешь сов­ремен­ную модель с архи­тек­турой MoE, то слои экспер­тов впол­не мож­но раз­местить и в обыч­ной памяти компь­юте­ра (в KoboldCpp это либо галоч­ка Auto Fit, либо руч­ной под­бор парамет­ра MoE CPU Layers) с нез­начитель­ным падени­ем про­изво­дитель­нос­ти.

Для работы тебе пот­ребу­ется локаль­ная язы­ковая модель, запущен­ная на тво­ем компь­юте­ре, — она будет исполь­зовать­ся в качес­тве оркес­тра­тора и генера­тора финаль­ного отче­та. В качес­тве бэкен­да исполь­зуем KoboldCpp — я писал о его нас­трой­ке в одной из ста­тей, но, если ты пред­почита­ешь llama.cpp или ik_llama, это тоже отличный выбор. От движ­ка тебе нужен API, сов­мести­мый с OpenAI.

Да­лее нуж­но выб­рать язы­ковую модель, которая будет обра­баты­вать зап­росы, управлять аген­тами и генери­ровать финаль­ный отчет. Для иссле­дова­ния тебе понадо­бит­ся окно кон­тек­ста поряд­ка 32K токенов (32 768), при­чем умес­тить его край­не желатель­но в виде­опа­мять, ина­че работать все будет очень мед­ленно.

В то же вре­мя собс­твен­ные зна­ния модели нам не слиш­ком важ­ны: ее роль — понять зап­рос, суметь раз­бить его на под­задачи и суметь сде­лать внят­ную выжим­ку из най­ден­ных матери­алов (в раз­ных про­ектах исполь­зуют­ся раз­ные под­ходы, от очи­щен­ного тек­ста веб‑стра­ниц в фор­мате JSON до век­торно­го пред­став­ления для RAG).

В теории с этим спра­вит­ся даже модель с 7–9B парамет­ров, но луч­ше взять что‑то с 12–15B (для плот­ных моделей) или 30–35B (для MoE). Если же ты можешь себе поз­волить запус­тить с при­емле­мой ско­ростью плот­ную модель на 24–27B, то ты смо­жешь работать даже с рус­ско­языч­ными иссле­дова­ниями.

Я про­верил сле­дующие модели:

  • Gemma 3 27B на моих зап­росах показа­ла луч­шие резуль­таты. Если будешь качать эту модель (нап­ример, квант Q4_M), обра­ти вни­мание на орга­низа­цию кон­тек­ста: нуж­но обя­затель­но акти­виро­вать режим SWA (Sliding Window Attention) в нас­трой­ках KoboldCpp. Для это­го выб­рать Context → Use SWA (Sliding Window Attention), раз­мер кон­тек­ста ука­зать 32 768 (или столь­ко, сколь­ко помес­тится), а в Hardware → Batch Size ука­жи мак­симум, который поз­воля­ет виде­опа­мять (я сде­лал 4096). Для моделей семей­ства Gemma 3 пос­ледний параметр вли­яет на эффектив­ный раз­мер окна.
  • Qwen 3.5 27B (плот­ная) или 35B (MoE) — отличные модели, но архи­тек­тура Qwen 3.5 пока слиш­ком новая: иног­да модели могут надол­го «задумы­вать­ся»; нес­коль­ко раз зацик­ливались. Впол­не воз­можно, что на момент выхода этой статьи под­дер­жку моделей семей­ства Qwen 3.5 допилят. Модели инте­рес­ны сво­ей гиб­ридной архи­тек­турой: кеш кон­тек­ста занима­ет у них зна­читель­но мень­ше виде­опа­мяти, чем у тра­дици­онных моделей; окно кон­тек­ста мож­но зна­читель­но рас­ширять без осо­бых проб­лем.
  • GLM 4.7 Flash — еще одна сов­ремен­ная MoE-модель на 30B парамет­ров. Очень и очень неп­лохо.

Для всех перечис­ленных моделей есть аб­литери­рован­ные вари­анты. Для Gemma это gemma-3-27b-it-ultra-uncensored-heretic, для моделей семей­ства Qwen 3.5 пред­почти­тель­нее исполь­зовать вер­сии Derestricted от ArliAi (в моих тес­тах они луч­ше работа­ли с инс­тру­мен­тами по срав­нению с вер­сиями heretic), для GLM 4.7 Flash — вер­сию absolute herecy.

Кро­ме них, мож­но исполь­зовать и спе­циали­зиро­ван­ные модели, заточен­ные под Deep Research, нап­ример модели семей­ства Nemotron или Alibaba-NLP/Tongyi-DeepResearch-30B-A3B. Разуме­ется, ник­то не меша­ет тебе запус­тить и чрез­вычай­но быс­трый, работа­ющий и на крыш­ке от кон­сер­вной бан­ки GPT-OSS 20B (MoE с натив­ным кван­том MXFP4), для которо­го тоже есть абли­тери­рован­ная вер­сия. Вари­антов мно­жес­тво, про­буй!

По­мимо кон­тек­ста, сто­ит ука­зать параметр Default Gen Amount — это мак­сималь­ное чис­ло токенов, которое за один про­ход будет генери­ровать модель. С одной сто­роны, он вли­яет на объ­ем финаль­ного отче­та, но с дру­гой — если что‑то пой­дет не так (нап­ример, на одном из про­межу­точ­ных эта­пов модель зацик­лится), тебе при­дет­ся ждать окон­чания генера­ции всех этих токенов. Нач­ни с 4096, потом мож­но будет поменять.

 

Подготовка: WSL 2 и Docker Desktop

Боль­шинс­тво про­ектов дос­тупно в виде готовых кон­тей­неров Docker. Если ты работа­ешь в Windows, нуж­но будет нас­тро­ить сре­ду WSL 2, уста­новить в ней дис­три­бутив Linux, нас­тро­ить вир­туали­зацию, уста­новить и нас­тро­ить Docker Desktop. Если у тебя все это уже есть — перехо­ди сра­зу к сле­дующе­му раз­делу.

Продолжение доступно только участникам

Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».

Присоединяйся к сообществу «Xakep.ru»!

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    14 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии