Sistema de curación de conocimiento de IA desarrollado por la Universidad de Stanford, capaz de investigar temas automáticamente y generar informes extensos al estilo de Wikipedia con citas.
Descripción detallada del proyecto STORM
Resumen del proyecto
STORM (Synthesis of Topic Outlines through Retrieval and Multi-perspective Question Asking) es un sistema de curación de conocimiento de IA de código abierto desarrollado por el Laboratorio de Asistentes Virtuales Abiertos de Stanford (Stanford Open Virtual Assistant Lab, OVAL) de la Universidad de Stanford. Este sistema es capaz de redactar artículos similares a los de Wikipedia desde cero, basándose en búsquedas en internet y generando automáticamente citas completas.
Hasta la fecha, más de 70.000 personas han probado la versión preliminar de investigación en línea de STORM, lo que demuestra el valor práctico y el amplio interés que ha generado el sistema.
Características principales
1. Proceso de generación de artículos en dos fases
STORM descompone la generación de artículos extensos en dos fases clave:
- Fase de preescritura: El sistema realiza una investigación basada en internet, recopila referencias y genera un esquema del artículo.
- Fase de escritura: El sistema utiliza el esquema y las referencias para generar el artículo completo con sus citas.
2. Mecanismo de preguntas y respuestas multiperspectiva
STORM emplea dos estrategias para mejorar la profundidad y amplitud de las preguntas:
- Preguntas y respuestas orientadas a la perspectiva: Se descubren diferentes perspectivas mediante la investigación de artículos existentes sobre temas similares, que luego se utilizan para controlar el proceso de preguntas y respuestas.
- Simulación de diálogo: Se simula una conversación entre un editor de Wikipedia y un experto en la materia, discutiendo basándose en recursos de internet.
3. Co-STORM: Versión colaborativa mejorada
Co-STORM es la versión colaborativa mejorada de STORM, que permite la curación de conocimiento mediante la colaboración humano-máquina:
- Agentes LLM de múltiples tipos: Incluye agentes expertos de Co-STORM y un moderador.
- Mapa mental dinámico: Mantiene un mapa mental que se actualiza dinámicamente, organizando la información recopilada en una estructura conceptual jerárquica.
- Protocolo de colaboración humano-máquina: Implementa estrategias de gestión de transiciones para una colaboración fluida entre humanos y sistemas de IA.
Arquitectura técnica
Componentes compatibles
Modelos de lenguaje:
- Compatible con todos los modelos de lenguaje soportados por litellm.
- Se pueden configurar diferentes modelos para distintos componentes de tareas.
Módulo de recuperación: Compatible con varios motores de búsqueda y recuperadores: YouRM, BingSearch, VectorRM, SerperRM, BraveRM, SearXNG, DuckDuckGoSearchRM, TavilySearchRM, GoogleSearch y AzureAISearch.
Modelos de incrustación (embedding):
- Compatible con todos los modelos de incrustación soportados por litellm.
Diseño modular
STORM adopta un diseño altamente modular, implementado sobre el framework dspy, y consta de cuatro módulos principales:
- Módulo de curación de conocimiento: Recopila información extensa sobre un tema dado.
- Módulo de generación de esquemas: Organiza la información recopilada generando un esquema jerárquico.
- Módulo de generación de artículos: Rellena y genera el artículo basándose en el esquema y la información recopilada.
- Módulo de pulido de artículos: Optimiza y mejora la presentación del artículo redactado.
Instalación y uso
Instalación rápida
# Instalar usando pip
pip install knowledge-storm
# O instalar desde el código fuente
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
Ejemplo 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 lenguaje
lm_configs = STORMWikiLMConfigs()
openai_kwargs = {
'api_key': os.getenv("OPENAI_API_KEY"),
'temperature': 1.0,
'top_p': 0.9,
}
# Establecer 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 el módulo de recuperación
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)
# Ejecutar la generación
topic = input('Topic: ')
runner.run(
topic=topic,
do_research=True,
do_generate_outline=True,
do_generate_article=True,
do_polish_article=True,
)
Ejemplo de uso de Co-STORM
from knowledge_storm.collaborative_storm.engine import CollaborativeStormLMConfigs, RunnerArgument, CoStormRunner
# Configurar Co-STORM
lm_config = CollaborativeStormLMConfigs()
# ... Configurar varios modelos de lenguaje ...
topic = input('Topic: ')
runner_argument = RunnerArgument(topic=topic, ...)
costorm_runner = CoStormRunner(lm_config=lm_config, ...)
# Arrancar el sistema (warm start)
costorm_runner.warm_start()
# Realizar diálogo colaborativo
conv_turn = costorm_runner.step()
# O inyectar una intervención del usuario
costorm_runner.step(user_utterance="YOUR UTTERANCE HERE")
# Generar informe
costorm_runner.knowledge_base.reorganize()
article = costorm_runner.generate_report()
Investigación académica y conjuntos de datos
Artículos de investigación
Los resultados de la investigación de STORM se publicaron en la conferencia NAACL 2024, con el título del artículo "Assisting in Writing Wikipedia-like Articles From Scratch with Large Language Models". El artículo de Co-STORM fue aceptado en la conferencia principal de EMNLP 2024.
Contribución de conjuntos de datos
Conjunto de datos FreshWiki: Contiene una colección de 100 artículos de Wikipedia de alta calidad, centrados en las páginas más editadas entre febrero de 2022 y septiembre de 2023.
Conjunto de datos WildSeek: Utilizado para investigar los intereses de los usuarios en tareas complejas de búsqueda de información; cada punto de datos incluye un tema y el objetivo del usuario para una búsqueda en profundidad.
Evaluación y retroalimentación
Resultados de evaluación automática
STORM supera a las potentes líneas base de generación aumentada por recuperación en todos los indicadores automáticos, incluyendo la evaluación de modelos de lenguaje y las métricas de comparación con artículos escritos por humanos.
Evaluación de expertos
En una evaluación humana realizada con editores experimentados de Wikipedia, todos los participantes estuvieron de acuerdo en que el sistema era útil para su fase de preescritura. En comparación con los artículos generados por una línea base de recuperación aumentada basada en esquemas, un mayor número de artículos de STORM fueron considerados bien organizados (un aumento absoluto del 25%) y de amplia cobertura (un aumento del 10%).
Escenarios de aplicación
Grupos de usuarios aplicables
- Estudiantes: Para crear trabajos de investigación e informes con citas.
- Investigadores: Para compilar revisiones bibliográficas exhaustivas.
- Creadores de contenido: Para generar artículos estructurados y profundos.
- Editores de Wikipedia: Como herramienta de asistencia en la fase de preescritura.
Limitaciones de uso
Aunque el sistema no puede producir artículos listos para su publicación (que suelen requerir una edición considerable), los editores experimentados de Wikipedia lo encuentran útil en la fase de preescritura.
Desarrollo del proyecto
Últimos avances
- Enero de 2025: Se añadió la integración de litellm para modelos de lenguaje y modelos de incrustación.
- Septiembre de 2024: El código base de Co-STORM fue lanzado e integrado en el paquete python knowledge-storm v1.0.0.
- Julio de 2024: Disponible para instalar a través de
pip install knowledge-storm
.
Direcciones futuras
El equipo está desarrollando activamente:
- Funcionalidades de interacción humano-máquina: Para apoyar la participación del usuario en el proceso de curación de conocimiento.
- Abstracción de información: Para desarrollar abstracciones de la información curada, con el fin de soportar formatos de presentación más allá de los informes estilo Wikipedia.
Contribución de código abierto
Este proyecto es completamente de código abierto y se agradecen las contribuciones de la comunidad. Se aceptan especialmente las solicitudes de extracción (PR) para integrar más motores de búsqueda/recuperadores en knowledge_storm/rm.py
.
Dirección del proyecto: https://github.com/stanford-oval/storm Demostración en línea: https://storm.genie.stanford.edu/ Sitio web del proyecto: https://storm-project.stanford.edu/
Información de citación
Si utiliza STORM en su investigación, por favor cite el artículo 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",
}
El proyecto STORM representa un avance significativo en el campo de la curación de conocimiento asistida por IA, proporcionando una potente herramienta y metodología para la investigación y escritura automatizadas.