Un système de curation de connaissances basé sur l'IA, développé par l'université de Stanford, capable de rechercher automatiquement des sujets et de générer de longs rapports de style Wikipédia avec des citations.
Présentation Détaillée du Projet STORM
Aperçu du Projet
STORM (Synthesis of Topic Outlines through Retrieval and Multi-perspective Question Asking) est un système open-source de curation de connaissances basé sur l'IA, développé par le Stanford Open Virtual Assistant Lab (OVAL) de l'Université de Stanford. Ce système est capable de rédiger des articles de type Wikipédia à partir de zéro, en se basant sur des recherches Internet, et de générer automatiquement des citations complètes.
À ce jour, plus de 70 000 personnes ont essayé la version préliminaire de recherche en ligne de STORM, ce qui témoigne de la valeur pratique et de l'intérêt généralisé pour ce système.
Caractéristiques Fonctionnelles Clés
1. Processus de Génération d'Articles en Deux Étapes
STORM décompose la génération d'articles longs en deux étapes cruciales :
- Phase de pré-rédaction : Le système effectue des recherches sur Internet, collecte des références et génère un plan d'article.
- Phase de rédaction : Le système utilise le plan et les références pour générer un article complet avec citations.
2. Mécanisme de Questions-Réponses Multi-perspectives
STORM utilise deux stratégies pour améliorer la profondeur et l'étendue des questions :
- Questions-réponses orientées par la perspective : Découvre différentes perspectives en examinant des articles existants sur des sujets similaires, utilisées pour contrôler le processus de questions-réponses.
- Simulation de dialogue : Simule une conversation entre un éditeur Wikipédia et un expert en la matière, discutant sur la base de ressources Internet.
3. Co-STORM : Version Collaborative Améliorée
Co-STORM est une version améliorée et collaborative de STORM, prenant en charge la curation de connaissances en collaboration homme-machine :
- Agents LLM multi-types : Inclut des agents experts Co-STORM et des modérateurs.
- Carte mentale dynamique : Maintient une carte mentale mise à jour dynamiquement, organisant les informations collectées en une structure conceptuelle hiérarchique.
- Protocole de collaboration homme-machine : Met en œuvre des stratégies de gestion des transitions pour une collaboration fluide entre les humains et les systèmes d'IA.
Architecture Technique
Composants Pris en Charge
Modèles de langage :
- Prend en charge tous les modèles de langage pris en charge par litellm.
- Permet de configurer différents modèles pour différents composants de tâche.
Modules de récupération : Prend en charge plusieurs moteurs de recherche et récupérateurs : YouRM, BingSearch, VectorRM, SerperRM, BraveRM, SearXNG, DuckDuckGoSearchRM, TavilySearchRM, GoogleSearch et AzureAISearch.
Modèles d'intégration (Embedding) :
- Prend en charge tous les modèles d'intégration pris en charge par litellm.
Conception Modulaire
STORM adopte une conception hautement modulaire, implémentée sur la base du framework dspy, et comprend quatre modules principaux :
- Module de curation de connaissances : Collecte des informations étendues sur un sujet donné.
- Module de génération de plan : Organise les informations collectées en générant un plan hiérarchique.
- Module de génération d'articles : Rédige l'article en se basant sur le plan et les informations collectées.
- Module de polissage d'articles : Optimise et améliore la présentation de l'article rédigé.
Installation et Utilisation
Installation Rapide
# Installation avec pip
pip install knowledge-storm
# Ou installation depuis les sources
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
Exemple d'Utilisation Basique
import os
from knowledge_storm import STORMWikiRunnerArguments, STORMWikiRunner, STORMWikiLMConfigs
from knowledge_storm.lm import LitellmModel
from knowledge_storm.rm import YouRM
# Configuration des modèles de langage
lm_configs = STORMWikiLMConfigs()
openai_kwargs = {
'api_key': os.getenv("OPENAI_API_KEY"),
'temperature': 1.0,
'top_p': 0.9,
}
# Définition des modèles pour différents composants
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)
# Configuration du module de récupération
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)
# Exécution de la génération
topic = input('Topic: ')
runner.run(
topic=topic,
do_research=True,
do_generate_outline=True,
do_generate_article=True,
do_polish_article=True,
)
Exemple d'Utilisation de Co-STORM
from knowledge_storm.collaborative_storm.engine import CollaborativeStormLMConfigs, RunnerArgument, CoStormRunner
# Configuration de Co-STORM
lm_config = CollaborativeStormLMConfigs()
# ... Configurer divers modèles de langage ...
topic = input('Topic: ')
runner_argument = RunnerArgument(topic=topic, ...)
costorm_runner = CoStormRunner(lm_config=lm_config, ...)
# Démarrage à chaud du système
costorm_runner.warm_start()
# Effectuer un tour de conversation collaboratif
conv_turn = costorm_runner.step()
# Ou injecter une utterance utilisateur
costorm_runner.step(user_utterance="YOUR UTTERANCE HERE")
# Générer le rapport
costorm_runner.knowledge_base.reorganize()
article = costorm_runner.generate_report()
Recherche Académique et Jeux de Données
Articles de Recherche
Les résultats de la recherche sur STORM ont été publiés lors de la conférence NAACL 2024, sous le titre « Assisting in Writing Wikipedia-like Articles From Scratch with Large Language Models ». L'article sur Co-STORM a été accepté pour la conférence principale EMNLP 2024.
Contributions aux Jeux de Données
Jeu de données FreshWiki : Contient une collection de 100 articles Wikipédia de haute qualité, se concentrant sur les pages les plus éditées entre février 2022 et septembre 2023.
Jeu de données WildSeek : Utilisé pour étudier l'intérêt des utilisateurs dans des tâches complexes de recherche d'informations, chaque point de données comprend un sujet et l'objectif de l'utilisateur pour une recherche approfondie.
Évaluation et Retour d'Expérience
Résultats de l'Évaluation Automatique
STORM surpasse les puissantes bases de référence de génération augmentée par la récupération sur toutes les métriques automatiques, y compris l'évaluation des modèles de langage et les métriques de comparaison avec des articles rédigés par des humains.
Évaluation par des Experts
Lors d'évaluations humaines menées avec des éditeurs Wikipédia expérimentés, tous les participants ont convenu que le système était utile pour leur phase de pré-rédaction. Comparé aux articles générés par des bases de référence de récupération augmentée basées sur des plans, un plus grand nombre d'articles STORM ont été jugés bien organisés (augmentation absolue de 25 %) et complets (augmentation de 10 %).
Scénarios d'Application
Public Cible
- Étudiants : Pour créer des travaux de recherche et des rapports avec citations.
- Chercheurs : Pour compiler des revues de littérature complètes.
- Créateurs de contenu : Pour générer des articles structurés et approfondis.
- Éditeurs Wikipédia : Comme outil d'assistance pour la phase de pré-rédaction.
Limites d'Utilisation
Bien que le système ne puisse pas produire d'articles prêts à être publiés (ce qui nécessite généralement des modifications importantes), les éditeurs Wikipédia expérimentés le trouvent utile pour la phase de pré-rédaction.
Développement du Projet
Derniers Développements
- Janvier 2025 : Intégration de litellm ajoutée pour les modèles de langage et d'intégration.
- Septembre 2024 : Le code source de Co-STORM a été publié et intégré dans le package Python knowledge-storm v1.0.0.
- Juillet 2024 : Disponible via
pip install knowledge-storm
.
Orientations Futures
L'équipe développe activement :
- Fonctionnalités d'interaction homme-machine : Pour permettre aux utilisateurs de participer au processus de curation de connaissances.
- Abstraction d'informations : Développement d'abstractions pour les informations curatées, afin de prendre en charge des formats de présentation allant au-delà des rapports de style Wikipédia.
Contribution Open Source
Ce projet est entièrement open source et les contributions de la communauté sont les bienvenues. Les PRs (Pull Requests) intégrant davantage de moteurs de recherche/récupérateurs dans knowledge_storm/rm.py
sont particulièrement appréciées.
Adresse du projet : https://github.com/stanford-oval/storm Démo en ligne : https://storm.genie.stanford.edu/ Site web du projet : https://storm-project.stanford.edu/
Informations de Citation
Si vous utilisez STORM dans vos recherches, veuillez citer l'article correspondant :
@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",
}
Le projet STORM représente une avancée majeure dans le domaine de la curation de connaissances assistée par l'IA, offrant des outils et des méthodes puissants pour la recherche et la rédaction automatisées.