Sistema de curadoria de conhecimento de IA desenvolvido pela Universidade de Stanford, capaz de pesquisar automaticamente tópicos e gerar relatórios longos no estilo da Wikipédia com citações.
Descrição Detalhada do Projeto STORM
Visão Geral do Projeto
STORM (Synthesis of Topic Outlines through Retrieval and Multi-perspective Question Asking) é um sistema de curadoria de conhecimento de IA de código aberto desenvolvido pelo Stanford Open Virtual Assistant Lab (OVAL) da Universidade de Stanford. Este sistema é capaz de escrever artigos semelhantes aos da Wikipédia do zero, com base em pesquisas na internet, e gerar automaticamente referências completas.
Até o momento, mais de 70.000 pessoas experimentaram a versão de pré-visualização da pesquisa online do STORM, o que demonstra o valor prático e o amplo interesse no sistema.
Principais Características e Funcionalidades
1. Processo de Geração de Artigos em Duas Fases
STORM divide a geração de artigos longos em duas fases cruciais:
- Fase de Pré-escrita: O sistema realiza pesquisas na internet, coleta materiais de referência e gera um esboço do artigo.
- Fase de Escrita: O sistema utiliza o esboço e os materiais de referência para gerar o artigo completo com citações.
2. Mecanismo de Perguntas e Respostas Multiperspectiva
STORM emprega duas estratégias para aumentar a profundidade e a amplitude das perguntas:
- Perguntas Orientadas por Perspectiva: Descobre diferentes perspectivas através da pesquisa de artigos existentes sobre tópicos semelhantes, que são usadas para controlar o processo de perguntas e respostas.
- Diálogo Simulado: Simula uma conversa entre um editor da Wikipédia e um especialista no assunto, discutindo com base em recursos da internet.
3. Co-STORM: Versão Colaborativa Aprimorada
Co-STORM é a versão aprimorada e colaborativa do STORM, que suporta a curadoria de conhecimento em colaboração humano-máquina:
- Agentes LLM de Múltiplos Tipos: Inclui agentes especialistas Co-STORM e um moderador.
- Mapa Mental Dinâmico: Mantém um mapa mental dinamicamente atualizado, organizando as informações coletadas em uma estrutura conceitual hierárquica.
- Protocolo de Colaboração Humano-Máquina: Implementa estratégias de gerenciamento de transição para suportar uma colaboração fluida entre humanos e sistemas de IA.
Arquitetura Técnica
Componentes Suportados
Modelos de Linguagem:
- Suporta todos os modelos de linguagem suportados por litellm.
- Pode configurar diferentes modelos para diferentes componentes de tarefa.
Módulos de Recuperação: Suporta vários motores de busca e recuperadores: YouRM, BingSearch, VectorRM, SerperRM, BraveRM, SearXNG, DuckDuckGoSearchRM, TavilySearchRM, GoogleSearch e AzureAISearch.
Modelos de Embedding:
- Suporta todos os modelos de embedding suportados por litellm.
Design Modular
STORM adota um design altamente modular, implementado com base na estrutura dspy, e inclui quatro módulos principais:
- Módulo de Curadoria de Conhecimento: Coleta informações abrangentes sobre um determinado tópico.
- Módulo de Geração de Esboço: Organiza as informações coletadas gerando um esboço hierárquico.
- Módulo de Geração de Artigos: Preenche e gera o artigo com base no esboço e nas informações coletadas.
- Módulo de Polimento de Artigos: Otimiza e aprimora a apresentação do artigo escrito.
Instalação e Uso
Instalação Rápida
# Instalar via pip
pip install knowledge-storm
# Ou instalar a partir do código-fonte
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
Exemplo de Uso Básico
import os
from knowledge_storm import STORMWikiRunnerArguments, STORMWikiRunner, STORMWikiLMConfigs
from knowledge_storm.lm import LitellmModel
from knowledge_storm.rm import YouRM
# Configurar modelos de linguagem
lm_configs = STORMWikiLMConfigs()
openai_kwargs = {
'api_key': os.getenv("OPENAI_API_KEY"),
'temperature': 1.0,
'top_p': 0.9,
}
# Definir modelos para diferentes componentes
gpt_35 = LitellmModel(model='gpt-3.5-turbo', max_tokens=500, **openai_kwargs)
gpt_4 = LitellmModel(model='gpt-4o', max_tokens=3000, **openai_kwargs)
lm_configs.set_conv_simulator_lm(gpt_35)
lm_configs.set_question_asker_lm(gpt_35)
lm_configs.set_outline_gen_lm(gpt_4)
lm_configs.set_article_gen_lm(gpt_4)
lm_configs.set_article_polish_lm(gpt_4)
# Configurar módulo de recuperação
engine_args = STORMWikiRunnerArguments(...)
rm = YouRM(ydc_api_key=os.getenv('YDC_API_KEY'), k=engine_args.search_top_k)
runner = STORMWikiRunner(engine_args, lm_configs, rm)
# Executar geração
topic = input('Topic: ')
runner.run(
topic=topic,
do_research=True,
do_generate_outline=True,
do_generate_article=True,
do_polish_article=True,
)
Exemplo de Uso do Co-STORM
from knowledge_storm.collaborative_storm.engine import CollaborativeStormLMConfigs, RunnerArgument, CoStormRunner
# Configurar Co-STORM
lm_config = CollaborativeStormLMConfigs()
# ... Configurar vários modelos de linguagem ...
topic = input('Topic: ')
runner_argument = RunnerArgument(topic=topic, ...)
costorm_runner = CoStormRunner(lm_config=lm_config, ...)
# Iniciar o sistema
costorm_runner.warm_start()
# Realizar diálogo colaborativo
conv_turn = costorm_runner.step()
# Ou injetar fala do usuário
costorm_runner.step(user_utterance="YOUR UTTERANCE HERE")
# Gerar relatório
costorm_runner.knowledge_base.reorganize()
article = costorm_runner.generate_report()
Pesquisa Acadêmica e Conjuntos de Dados
Artigos de Pesquisa
Os resultados da pesquisa do STORM foram publicados na conferência NAACL 2024, com o título do artigo "Assisting in Writing Wikipedia-like Articles From Scratch with Large Language Models". O artigo do Co-STORM foi aceito para a conferência principal EMNLP 2024.
Contribuições de Conjuntos de Dados
Conjunto de Dados FreshWiki: Contém uma coleção de 100 artigos de alta qualidade da Wikipédia, focados nas páginas mais editadas entre fevereiro de 2022 e setembro de 2023.
Conjunto de Dados WildSeek: Usado para estudar o interesse do usuário em tarefas complexas de busca de informações, onde cada ponto de dados inclui um tópico e o objetivo do usuário para uma busca aprofundada.
Avaliação e Feedback
Resultados da Avaliação Automática
STORM superou as poderosas linhas de base de geração aumentada por recuperação em todas as métricas automáticas, incluindo avaliação de LM e métricas de comparação com artigos escritos por humanos.
Avaliação de Especialistas
Em uma avaliação humana com editores experientes da Wikipédia, todos os participantes concordaram que o sistema foi útil para a fase de pré-escrita. Em comparação com artigos gerados por linhas de base de recuperação aumentada baseadas em esboços, mais artigos do STORM foram considerados organizados (aumento absoluto de 25%) e abrangentes (aumento de 10%).
Cenários de Aplicação
Grupos de Usuários Aplicáveis
- Estudantes: Para criar trabalhos de pesquisa e relatórios com citações.
- Pesquisadores: Para compilar revisões de literatura abrangentes.
- Criadores de Conteúdo: Para gerar artigos estruturados e aprofundados.
- Editores da Wikipédia: Como ferramenta auxiliar na fase de pré-escrita.
Limitações de Uso
Embora o sistema não possa produzir artigos prontos para publicação (que geralmente exigem edição extensiva), editores experientes da Wikipédia o consideraram útil na fase de pré-escrita.
Desenvolvimento do Projeto
Últimos Avanços
- Janeiro de 2025: Adicionada integração litellm para modelos de linguagem e embedding.
- Setembro de 2024: O código-fonte do Co-STORM foi lançado e integrado ao pacote python knowledge-storm v1.0.0.
- Julho de 2024: Disponível para instalação via
pip install knowledge-storm
.
Direções Futuras
A equipe está desenvolvendo ativamente:
- Funcionalidades de Interação Humano-Máquina: Para suportar a participação do usuário no processo de curadoria de conhecimento.
- Abstração de Informações: Para desenvolver abstrações de informações curadas, a fim de suportar formatos de apresentação além dos relatórios estilo Wikipédia.
Contribuição de Código Aberto
Este projeto é totalmente de código aberto e as contribuições da comunidade são bem-vindas. PRs que integrem mais motores de busca/recuperadores em knowledge_storm/rm.py
são especialmente bem-vindos.
Endereço do Projeto: https://github.com/stanford-oval/storm Demonstração Online: https://storm.genie.stanford.edu/ Website do Projeto: https://storm-project.stanford.edu/
Informações de Citação
Se você usar o STORM em sua pesquisa, por favor, cite o artigo relevante:
@inproceedings{shao-etal-2024-assisting,
title = "Assisting in Writing {W}ikipedia-like Articles From Scratch with Large Language Models",
author = "Shao, Yijia and Jiang, Yucheng and Kanell, Theodore and Xu, Peter and Khattab, Omar and Lam, Monica",
booktitle = "Proceedings of the 2024 Conference of the North American Chapter of the Association for Computational Linguistics: Human Language Technologies (Volume 1: Long Papers)",
month = jun,
year = "2024",
address = "Mexico City, Mexico",
publisher = "Association for Computational Linguistics",
pages = "6252--6278",
}
O projeto STORM representa um avanço significativo no campo da curadoria de conhecimento assistida por IA, oferecendo uma ferramenta e metodologia poderosas para pesquisa e escrita automatizadas.