STORM: Как LLM от Стэнфорда автоматизирует ресёрч и пишет статьи за вас
Вот вам нужно погрузиться в новую сложную тему. Впереди часы гуглежа, десятки открытых вкладок, попытки отделить зёрна от плевел и собрать всё в единую картину. Процесс мучительный и не всегда продуктивный.
И вот, кажется, ребята из Стэнфорда решили эту проблему если не полностью, то хотя бы частично автоматизировать. Они выкатили опенсорсный проект STORM — систему на базе LLM, которая берёт на себя самую нудную часть работы: исследование темы и создание структурированного черновика статьи в стиле Википедии. Сразу с цитатами и ссылками на источники.
Конечно, это не волшебная кнопка «сделать зашибись». Сами авторы честно говорят, что на выходе получается не готовая к публикации работа, а скорее очень качественный и подробный репорт, который нужно дорабатывать.
Что это за STORM такой и как он работает?
На первый взгляд, идея не нова — обернуть LLM в поисковик. Но дьявол, как всегда, в деталях. Вместо того чтобы тупо промптить модель в стиле «расскажи мне о X», STORM подходит к задаче куда хитрее. Весь процесс делится на два этапа:
- Pre-writing (Исследование): Система проводит интернет-исследование, чтобы собрать материал и составить план статьи.
- Writing (Написание): На основе собранных данных и плана генерируется полноценная статья с цитатами.
Ключевая фишка — в первом этапе. Чтобы сделать исследование глубоким и разносторонним, STORM использует две стратегии:
- Perspective-Guided Question Asking: Система сначала изучает похожие статьи, чтобы понять, с каких разных точек зрения (например, академической, индустриальной, исторической) можно взглянуть на тему. А потом использует эти «перспективы», чтобы генерировать вопросы.
- Simulated Conversation: STORM имитирует диалог между автором статьи и экспертом по теме. Эксперт «опирается» на найденные в интернете источники. Это помогает LLM не просто вываливать факты, а углублять своё понимание темы и задавать уточняющие, релевантные вопросы по ходу дела.
По сути, STORM не просто ищет информацию, а пытается воссоздать мыслительный процесс исследователя: сначала определяет разные углы обзора, а потом ведёт внутренний диалог, чтобы разобраться в теме. Это и отличает его от простых «summarizer»-ов.
Co-STORM: А если я хочу влезть в процесс?
Понимая, что полная автоматизация не всегда гуд, разработчики добавили режим Co-STORM. Он позволяет человеку активно участвовать в процессе. В этой симуляции есть три типа агентов:
- LLM-эксперты: Отвечают на вопросы, опираясь на внешние источники.
- Модератор: Задаёт наводящие вопросы, чтобы дискуссия не затухала.
- Человек: Может либо просто наблюдать за процессом, либо в любой момент вмешаться, задать свой вопрос и направить исследование в нужное русло.
Для удобства вся собранная информация организуется в виде динамической ментальной карты (mind map), что должно снижать когнитивную нагрузку, когда исследование становится слишком глубоким.
Как это пощупать?
Проект доступен на GitHub и легко ставится через pip:
pip install knowledge-storm
Дальше всё довольно модульно. Можно настраивать разные LLM (под капотом litellm, так что поддерживается почти всё, включая OpenAI, Azure и др.) и разные поисковые движки (Bing, You.com, Google, DuckDuckGo и т.д.).
Вот упрощённый пример запуска из документации:
import os from knowledge_storm import STORMWikiRunnerArguments, STORMWikiRunner, STORMWikiLMConfigs from knowledge_storm.lm import LitellmModel from knowledge_storm.rm import YouRM # Или BingSearch, GoogleSearch... # 1. Настраиваем модели lm_configs = STORMWikiLMConfigs() # Для симуляции диалога можно взять модель попроще и побыстрее gpt_35 = LitellmModel(model='gpt-3.5-turbo', ...) # А для генерации самой статьи — что-то помощнее gpt_4o = LitellmModel(model='gpt-4o', ...) lm_configs.set_conv_simulator_lm(gpt_35) lm_configs.set_article_gen_lm(gpt_4o) # ... и другие компоненты # 2. Настраиваем поисковик (retriever) rm = YouRM(ydc_api_key=os.getenv('YDC_API_KEY')) # 3. Запускаем движок engine_args = STORMWikiRunnerArguments(...) runner = STORMWikiRunner(engine_args, lm_configs, rm) runner.run( topic="Challenges in Python's Global Interpreter Lock (GIL)", do_research=True, do_generate_outline=True, do_generate_article=True, do_polish_article=True, ) runner.summary()
Выглядит довольно гибко. Можно запускать только нужные этапы, подсовывать свои поисковики и модели, что для кастомных задач самое то.
А для тех, кто не хочет ничего ставить, есть демо-сайт.
Так это заменит исследователей и авторов?
Конечно, нет. И заявления типа "STORM writes research papers like a PhD" — это классический пример заигрывания с мечтами людей, которые хотят волшебную таблетку.
STORM — это инструмент. Примерно как продвинутый IDE для программиста. Он не напишет за вас весь проект, но избавит от рутины, подсветит ошибки и ускорит работу. Здесь то же самое: STORM берёт на себя самую муторную часть — первоначальный сбор и структурирование информации.
Ценность ведь не в самом сгенерированном тексте (контенте), который и так можно надергать из сети. Ценность в том, чтобы на основе этого черновика сделать выводы, добавить собственную экспертизу и создать что-то действительно новое. А на это пока способны только человеки 🧠