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 берёт на себя самую муторную часть — первоначальный сбор и структурирование информации.
Ценность ведь не в самом сгенерированном тексте (контенте), который и так можно надергать из сети. Ценность в том, чтобы на основе этого черновика сделать выводы, добавить собственную экспертизу и создать что-то действительно новое. А на это пока способны только человеки 🧠