Ce projet génère des données de pré-formation de qualité des manuels très longues. Voici un exemple de jeton de 70 m. Il peut exécuter des générations en parallèle, contre OpenAI ou votre propre API. Il peut générer les sujets à partir de zéro ou utiliser un ensemble de graines que vous fournissez.
Le générateur utilise la récupération pour améliorer la qualité. Par défaut, il utilisera Serply pour effectuer la récupération, mais vous pouvez également utiliser SERPAPI ou désactiver la récupération.
Le noyau est extensible, vous pouvez donc ajouter vos propres adaptateurs pour vous connecter à de nouvelles API et des backends de récupération.
brew install postgres sur un Mac. psql postgres -c "create database textbook;"git clone https://github.com/VikParuchuri/textbook_quality.gitcd textbook_qualitypoetry installinvoke migrate-dev Tout d'abord, créez un fichier local.env dans le répertoire racine du dépôt pour stocker vos clés secrètes. Alternativement, vous pouvez définir n'importe quelle clé ci-dessous en tant que var env.
Vous pouvez voir toutes les valeurs de configuration disponibles dans app/settings.py .
OPENAI_KEY=sk-xxxxxxSERPLY_KEY="..." ) ou serpapi key ( SERPAPI_KEY="..." ).SEARCH_BACKEND=serply ou SEARCH_BACKEND=serpapi pour utiliser le backend approprié. Par défaut, cela utilisera gpt-3.5 . Vous pouvez utiliser gpt-4 en définissant l'envars LLM_TYPE , LLM_INSTRUCT_TYPE sur gpt-4 . Vous pourrez peut-être vous en sortir avec le définition LLM_EXTENDED_TYPE à gpt-4 , mais vous pourriez avoir besoin de plus de 8K de contexte.
OPENAI_KEY sur la valeur de votre clé API ou une valeur factice.OPENAI_BASE_URL à l'URL de votre API (comme https://vllm-api.com/v1)LLM_TYPE , LLM_INSTRUCT_TYPE et LLM_EXTENDED_TYPE sur le nom de votre modèle (comme llama )LLM_TYPES . Le générateur a idéalement besoin d'une longueur de contexte allant jusqu'à 16k , mais vous pouvez vous en sortir avec 12k si vous en avez besoin. Si vous avez finet votre propre modèle pour les manuels (basé sur les invites mises en cache dans ce référentiel), vous pouvez utiliser les paramètres FINETUNED et INCLUDE_EXAMPLES pour réduire l'utilisation de jetons.
SEARCH_BACKEND=none Il y a trois scripts principaux dans le dépôt. Vous pouvez exécuter chaque script sur la sortie de la précédente. Toutes les sorties apparaîtront par défaut dans app/data , qui est le DATA_DIR spécifié dans les paramètres.
Vous entrez un sujet, un fichier sur lequel vous souhaitez enregistrer les sujets et le nombre d'itérations. Les sujets seront dédupliqués.
Exemple d'utilisation:
python topic_generator.py "computer science with python" python_cs_titles.json --iterations 50
Prenez un dossier avec les semences existantes (dans une liste JSON plate) et augmentez-les. Vous pouvez transmettre le fichier de sortie du générateur de sujets comme fichier de semences ou utiliser vos propres graines. Le domaine est un drapeau facultatif pour contraindre les sujets dans un domaine.
Cela déduira également les sujets sémantiquement.
Exemple d'utilisation:
python topic_augmentor.py python_titles.json python_topics.json --domain python
Cela prendra un fichier avec une liste JSON plate et générera un manuel par sujet. Le drapeau des travailleurs contrôle le nombre de générations parallèles. Abaissez-le si vous atteignez des limites de taux.
Exemple d'utilisation:
python book_generator.py topics.json books.jsonl --workers 5
Vous pouvez également remplacer les paramètres avec des variables d'environnement (au lieu d'utiliser local.env ). Cet exemple utilisera une API VLLM au lieu d'Openai:
LLM_TYPE=llama LLM_INSTRUCT_TYPE=llama LLM_EXTENDED_TYPE=llama OPENAI_KEY="llama" OPENAI_BASE_URL="https://vllm-api.com/v1" python book_generator.py topics.json books.jsonl --workers 10
Vous pouvez voir toutes les options en exécutant python book_generator.py --help .
Notez que les cours sont mis en cache par défaut, donc régénérer un cours avec le même nom deux fois ne frappera plus l'API. Le cache est spécifique à chaque modèle et à chaque sujet. Vous pouvez ignorer le cache en utilisant l'option --revision pour spécifier un numéro de révision pour les cours.
Vous pouvez également générer un livre à partir d'un plan existant en créant un fichier JSONL avec les champs suivants:
topic - Le sujet / titre du livreoutline - Le contour du livre, en tant que liste JSON plate. Cela doit être dans un format spécifique, voir "Table des matières propres" ci-dessous.queries - jusqu'à 2 requêtes de recherche à utiliser pour la récupération. Si vous ne souhaitez pas utiliser la récupération, définissez ceci sur une liste vide. Cela prendra un fichier JSONL avec une table des matières et du titre existante, et la transformera dans le format correct pour la génération de livres.
Exemple d'utilisation:
python toc_cleaner.py toc.jsonl clean_toc.jsonl
toc.jsonl devrait avoir les champs suivants dans chaque ligne:
title - le titre du livretoc - Une chaîne contenant la table des matières. Cela peut être mal formatéVous pouvez étendre cela pour ajouter de nouveaux adaptateurs LLM, méthodes de récupération ou tâches. Les PR sont les bienvenus.
app/llm/adaptorsapp/services/adaptors . Vous devrez peut-être également ajuster les paramètres services/generators/pdf.pyapp/llm/generators Par défaut, de nombreuses exceptions seront cachées pour éviter le bruit de la console. Utilisez DEBUG=true pour les afficher, comme ceci:
DEBUG=true python book_generator.py python_topics.json books.jsonl --max 5 --workers 5