본문으로 건너뛰기

© 2026 Molayo

GH Trending릴리즈2026. 06. 19. 20:46

stanford-oval/storm

요약

STORM은 인터넷 조사를 통해 인용이 포함된 긴 글을 생성하는 연구 프레임워크입니다. 사전 작성 단계에서 주제에 대한 다양한 관점의 질문을 생성하고, 이를 바탕으로 체계적인 개요와 참고 문헌을 수집하여 기사를 작성합니다.

핵심 포인트

  • 인터넷 기반 조사와 인용이 포함된 긴 글 생성 프로세스 제공
  • 관점 가이드 질문 생성 전략을 통한 질문의 깊이와 넓이 확보
  • Co-STORM을 통한 인간-AI 협업 지식 큐레이션 지원
  • EMNLP 2024 및 NAACL 2024 등 주요 학회 채택 및 발표

| 연구 프리뷰 (Research preview) | STORM 논문 (STORM Paper)| Co-STORM 논문 (Co-STORM Paper) | 웹사이트 (Website) |

[2025/01] knowledge-storm v1.1.0에 언어 모델 (Language Models) 및 임베딩 모델 (Embedding Models)을 위한 litellm 통합을 추가했습니다.

[2024/09] Co-STORM 코드베이스가 출시되어 knowledge-storm Python 패키지 v1.0.0에 통합되었습니다. 확인하려면 pip install knowledge-storm --upgrade를 실행하세요.

[2024/09] 인간-AI 협업 지식 큐레이션 (Knowledge Curation)을 지원하기 위해 협업형 STORM (Co-STORM)을 소개합니다! Co-STORM 논문이 EMNLP 2024 메인 컨퍼런스에 채택되었습니다.

[2024/07] 이제 pip install knowledge-storm 명령어로 패키지를 설치할 수 있습니다!

[2024/07] 기존의 검색 엔진 (YouRM, BingSearch) 지원을 보완하여, 사용자가 제공한 문서에 대한 그라운딩 (Grounding)을 지원하기 위해 VectorRM을 추가했습니다. (#58 확인)

[2024/07] 개발자를 위한 데모 라이트 (Demo light)를 출시했습니다. Python의 streamlit 프레임워크로 구축된 최소한의 사용자 인터페이스로, 로컬 개발 및 데모 호스팅에 유용합니다. (#54 확인)

[2024/06] NAACL 2024에서 STORM을 발표할 예정입니다! 6월 17일 포스터 세션 2에서 저희를 찾아주시거나 발표 자료를 확인해 주세요.

[2024/05] rm.py에 Bing Search 지원을 추가했습니다. GPT-4o로 STORM을 테스트해 보세요. - 이제 데모의 기사 생성 부분을 GPT-4o 모델을 사용하여 구성합니다.

[2024/04] STORM 코드베이스의 리팩토링된 버전을 출시합니다! STORM 파이프라인 (Pipeline)을 위한 인터페이스를 정의하고, 파이프라인 인스턴스화 방법을 보여주기 위해 STORM-wiki (src/storm_wiki 확인)를 재구현했습니다. 다양한 언어 모델 및 검색/탐색 통합의 커스터마이징을 지원하기 위한 API를 제공합니다.

이 시스템은 상당한 양의 편집이 필요한 출판용 기사를 직접 생성할 수는 없지만, 숙련된 Wikipedia 편집자들은 사전 작성 단계에서 이 도구가 도움이 된다는 것을 확인했습니다.

7만 명 이상의 사람들이 저희의 라이브 연구 프리뷰를 사용해 보았습니다. STORM이 여러분의 지식 탐색 여정에 어떻게 도움이 될 수 있는지 직접 체험해 보시고, 시스템 개선을 위해 피드백을 남겨주세요 🙏!

STORM은 인용(citations)이 포함된 긴 글을 생성하는 과정을 두 단계로 나눕니다:

사전 작성 단계 (Pre-writing stage): 시스템이 인터넷 기반 조사를 수행하여 참고 문헌을 수집하고 개요(outline)를 생성합니다.
작성 단계 (Writing stage): 시스템이 개요와 참고 문헌을 사용하여 인용이 포함된 전체 길이의 기사를 생성합니다.

STORM은 연구 프로세스 자동화의 핵심을 질문할 좋은 질문을 자동으로 도출하는 것으로 식별합니다. 언어 모델(language model)에 직접 질문을 하라고 프롬프팅(prompting)하는 것은 효과가 좋지 않습니다. 질문의 깊이와 넓이를 개선하기 위해, STORM은 두 가지 전략을 채택합니다:

관점 가이드 질문 생성 (Perspective-Guided Question Asking): 입력된 주제가 주어지면, STORM은 유사한 주제의 기존 기사들을 조사하여 다양한 관점을 발견하고, 이를 질문 생성 프로세스를 제어하는 데 사용합니다.
시뮬레이션 대화 (Simulated Conversation): STORM은 인터넷 소스에 근거하여 Wikipedia 작성자와 주제 전문가 사이의 대화를 시뮬레이션함으로써, 언어 모델이 주제에 대한 이해를 업데이트하고 후속 질문을 던질 수 있도록 합니다.

Co-STORM은 다음 구성 요소 간의 원활한 협업을 지원하기 위해 턴 관리 정책(turn management policy)을 구현하는 **협업 담화 프로토콜 (collaborative discourse protocol)**을 제안합니다:

Co-STORM LLM 전문가 (Co-STORM LLM experts): 이 유형의 에이전트(agent)는 외부 지식 소스에 근거하여 답변을 생성하거나 담화 이력(discourse history)을 바탕으로 후속 질문을 제기합니다.
중재자 (Moderator): 이 에이전트는 검색기(retriever)가 발견했지만 이전 턴에서 직접 사용되지 않은 정보에서 영감을 얻어, 사고를 자극하는 질문을 생성합니다. 질문 생성 또한 근거를 가질 수 있습니다!
인간 사용자 (Human user): 인간 사용자는 (1) 주제에 대한 더 깊은 이해를 얻기 위해 담화를 관찰하거나, (2) 대화의 초점을 조절하기 위해 발화(utterances)를 주입함으로써 대화에 적극적으로 참여하는 주도권을 갖습니다.

Co-STORM은 또한 수집된 정보를 계층적인 개념 구조로 정리하는 동적으로 업데이트되는 **마인드 맵 (mind map)**을 유지하며, 이를 통해 인간 사용자과 시스템 사이의 공유된 개념 공간 (shared conceptual space)을 구축하는 것을 목표로 합니다. 마인드 맵은 담화가 길어지고 심화될 때 정신적 부하 (mental load)를 줄이는 데 도움이 된다는 것이 입증되었습니다.

STORM과 Co-STORM은 모두 dspy를 사용하여 매우 모듈화된 방식으로 구현되었습니다.

knowledge-storm 라이브러리를 설치하려면 pip install knowledge-storm을 사용하세요.

STORM 엔진의 동작을 직접 수정할 수 있는 소스 코드를 설치할 수도 있습니다.

Git 저장소를 클론합니다.

git clone https://github.com/stanford-oval/storm.git cd storm

필요한 패키지를 설치합니다.

conda create -n storm python=3.11 conda activate storm pip install -r requirements.txt

현재 저희 패키지는 다음을 지원합니다:

  • 언어 모델 (Language model) 구성 요소: 여기에 나열된 litellm이 지원하는 모든 언어 모델
  • 임베딩 모델 (Embedding model) 구성 요소: 여기에 나열된 litellm이 지원하는 모든 임베딩 모델
  • 검색 모듈 (retrieval module) 구성 요소:
    YouRM
    , BingSearch
    , VectorRM
    , SerperRM
    , BraveRM
    , SearXNG
    , DuckDuckGoSearchRM
    , TavilySearchRM
    , GoogleSearch
    , 그리고 AzureAISearch

🌟 knowledge_storm/rm.py에 더 많은 검색 엔진/리트리버 (retrievers)를 통합하기 위한 PR (Pull Requests)을 적극 환영합니다!

STORM과 Co-STORM은 모두 정보 큐레이션 계층 (information curation layer)에서 작동하므로, 각각의 Runner 클래스를 생성하기 위해 정보 검색 모듈 (information retrieval module)과 언어 모델 모듈 (language model module)을 설정해야 합니다.

STORM 지식 큐레이션 엔진은 단순한 Python STORMWikiRunner 클래스로 정의됩니다. 다음은 You.com 검색 엔진과 OpenAI 모델을 사용하는 예시입니다.

import os
from knowledge_storm import STORMWikiRunnerArguments, STORMWikiRunner, STORMWikiLMConfigs
from knowledge_storm.lm import LitellmModel
...

STORMWikiRunner 인스턴스는 간단한 run 메서드로 호출할 수 있습니다:

topic = input('Topic: ')
runner.run(
topic=topic,
...

do_research

do_research: True이면, 주제에 대한 정보를 수집하기 위해 다양한 관점에서의 대화를 시뮬레이션합니다. 그렇지 않으면, 결과를 로드합니다.

do_generate_outline: True이면, 주제에 대한 개요 (outline)를 생성합니다. 그렇지 않으면, 결과를 로드합니다.

do_generate_article: True이면, 개요와 수집된 정보를 바탕으로 주제에 대한 기사 (article)를 생성합니다. 그렇지 않으면, 결과를 로드합니다.

do_polish_article: True이면, 요약 섹션을 추가하고 (선택적으로) 중복된 콘텐츠를 제거하여 기사를 다듬습니다 (polish). 그렇지 않으면, 결과를 로드합니다.

Co-STORM 지식 큐레이션 엔진은 단순한 Python CoStormRunner 클래스로 정의됩니다. 다음은 Bing 검색 엔진과 OpenAI 모델을 사용하는 예시입니다.

from knowledge_storm.collaborative_storm.engine import CollaborativeStormLMConfigs, RunnerArgument, CoStormRunner
from knowledge_storm.lm import LitellmModel
from knowledge_storm.logging_wrapper import LoggingWrapper
...

CoStormRunner 인스턴스는 warmstart()step(...) 메서드로 호출할 수 있습니다.

# Co-STORM과 사용자 간의 공유된 개념 공간을 구축하기 위해 시스템을 웜 스타트 (Warm start) 합니다.
costorm_runner.warm_start()
# 협업적 담론 (collaborative discourse)을 단계별로 진행합니다.
...

우리는 다양한 설정으로 STORM 및 Co-STORM을 빠르게 실행할 수 있도록 examples 폴더에 스크립트를 제공합니다.

API 키를 설정하기 위해 secrets.toml을 사용하는 것을 권장합니다. 루트 디렉토리에 secrets.toml 파일을 생성하고 다음 내용을 추가하세요:

# ============ 언어 모델 설정 (language model configurations) =============
# OpenAI API 키를 설정합니다.
OPENAI_API_KEY="your_openai_api_key"
...

기본 설정으로 gpt 계열 모델을 사용하여 STORM을 실행하려면:

다음 명령어를 실행하세요.

python examples/storm_examples/run_storm_wiki_gpt.py \
--output-dir $OUTPUT_DIR \
--retriever bing \
...

선호하는 언어 모델을 사용하거나 자체 코퍼스 (corpus)를 기반으로 STORM을 실행하려면: examples/storm_examples/README.md를 확인하세요.

기본 설정으로 gpt 계열 모델을 사용하여 Co-STORM을 실행하려면,

  • secrets.toml
    BING_SEARCH_API_KEY="xxx"
    ENCODER_API_TYPE="xxx"를 추가하세요.

  • 다음 명령어를 실행하세요.

python examples/costorm_examples/run_costorm_gpt.py \
--output-dir $OUTPUT_DIR \
--retriever bing

소스 코드를 설치했다면, 사용자의 유스케이스 (use case)에 맞춰 STORM을 커스텀할 수 있습니다. STORM 엔진은 4개의 모듈로 구성됩니다:

  • 지식 큐레이션 모듈 (Knowledge Curation Module): 주어진 주제에 대해 광범위한 정보를 수집합니다.
  • 개요 생성 모듈 (Outline Generation Module): 수집된 정보를 바탕으로 계층적 개요를 생성하여 정보를 정리합니다.
  • 기사 생성 모듈 (Article Generation Module): 생성된 개요에 수집된 정보를 채워 넣습니다.
  • 기사 다듬기 모듈 (Article Polishing Module): 작성된 기사를 더 나은 표현을 위해 정제하고 향상시킵니다.

각 모듈의 인터페이스 (interface)는 knowledge_storm/interface.py에 정의되어 있으며, 실제 구현체는 knowledge_storm/storm_wiki/modules/*에서 인스턴스화됩니다. 이러한 모듈들은 사용자의 특정 요구 사항(예: 전체 문단 대신 불렛 포인트 형식으로 섹션 생성)에 따라 커스텀할 수 있습니다.

소스 코드를 설치했다면, 사용자의 유스케이스 (use case)에 맞춰 Co-STORM을 커스텀할 수 있습니다.

  • Co-STORM은 여러 종류의 LLM 에이전트 (LLM agent) 타입(즉, Co-STORM 전문가 및 Moderator)을 도입합니다. LLM 에이전트 인터페이스는 knowledge_storm/interface.py에 정의되어 있으며, 구현체는 knowledge_storm/collaborative_storm/modules/co_storm_agents.py에서 인스턴스화됩니다. 서로 다른 LLM 에이전트 정책 (policy)을 커스텀할 수 있습니다.
  • Co-STORM은 협업적 담화 프로토콜 (collaborative discourse protocol)을 도입하며, 그 핵심 기능은 턴 정책 (turn policy) 관리에 집중되어 있습니다. 저희는 knowledge_storm/collaborative_storm/engine.py에 있는 DiscourseManager를 통해 턴 정책 관리의 예시 구현을 제공합니다. 이는 커스텀하거나 추가로 개선할 수 있습니다.

자동 지식 큐레이션 및 복잡한 정보 탐색 연구를 용이하게 하기 위해, 본 프로젝트는 다음과 같은 데이터셋을 공개합니다:

FreshWiki 데이터셋은 2022년 2월부터 2023년 9월까지 가장 많이 편집된 페이지에 초점을 맞춘 100개의 고품질 Wikipedia 문서 모음입니다. 자세한 내용은 STORM 논문의 섹션 2.1을 참조하십시오.

데이터셋은 huggingface에서 직접 다운로드할 수 있습니다. 데이터 오염 (data contamination) 문제를 완화하기 위해, 향후에도 재현 가능한 데이터 구축 파이프라인의 소스 코드를 아카이브로 보관하고 있습니다.

실제 환경 (in the wild)에서의 복잡한 정보 탐색 (information seeking) 작업에 대한 사용자 관심사를 연구하기 위해, 웹 리서치 프리뷰에서 수집된 데이터를 활용하여 WildSeek 데이터셋을 생성했습니다. 주제의 다양성과 데이터 품질을 보장하기 위해 데이터를 다운샘플링 (downsampled) 했습니다. 각 데이터 포인트는 주제 (topic)와 해당 주제에 대한 심층 검색 (deep search)을 수행하려는 사용자의 목표 (goal)로 구성된 쌍입니다. 자세한 내용은 Co-STORM 논문의 섹션 2.2 및 부록 A를 참조하십시오.

WildSeek 데이터셋은 [여기]에서 이용 가능합니다.

STORM 논문 실험을 위해서는 [여기]의 NAACL-2024-code-backup 브랜치로 전환해 주세요.

Co-STORM 논문 실험을 위해서는 [여기]의 EMNLP-2024-code-backup 브랜치로 전환해 주세요 (현재는 플레이스홀더이며, 곧 업데이트될 예정입니다).

저희 팀은 현재 다음 사항들을 활발히 작업 중입니다:

  • Human-in-the-Loop 기능: 지식 큐레이션 (knowledge curation) 과정에 사용자의 참여를 지원합니다.
  • 정보 추상화 (Information Abstraction): Wikipedia 스타일의 보고서를 넘어 다양한 제시 형식을 지원하기 위해 큐레이션된 정보에 대한 추상화를 개발하고 있습니다.

질문이나 제안 사항이 있다면 언제든지 이슈 (issue) 또는 풀 리퀘스트 (pull request)를 생성해 주세요. 시스템과 코드베이스를 개선하기 위한 기여를 환영합니다!

담당자: Yijia Shao 및 Yucheng Jiang

훌륭한 오픈 소스 콘텐츠를 제공해 준 Wikipedia에 감사드립니다. FreshWiki 데이터셋은 Wikipedia에서 가져왔으며, Creative Commons Attribution-ShareAlike (CC BY-SA) 라이선스 하에 제공됩니다.

이 프로젝트의 로고를 디자인해 준 Michelle Lam과 UI 개발을 이끌어 준 Dekun Ma에게 깊은 감사를 표합니다.

오픈 소스 소프트웨어를 지원해 준 Vercel에 감사드립니다.

이 코드 또는 코드의 일부를 귀하의 작업에 사용하신다면, 저희 논문을 인용해 주세요:

@inproceedings{jiang-etal-2024-unknown,
title = "Into the Unknown Unknowns: Engaged Human Learning through Participation in Language Model Agent Conversations",
author = "Jiang, Yucheng and
...

AI 자동 생성 콘텐츠

본 콘텐츠는 GitHub Trending Python (daily)의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0