Dieses Projekt generiert sehr lange Daten zur Lehrbuchqualität. Hier ist ein 70 -m -Token -Beispiel. Es kann Generationen parallel, gegen OpenAI oder Ihre eigene API ausführen. Es kann die Themen von Grund auf neu erzeugen oder eine Reihe von Samen verwenden, die Sie zur Verfügung stellen.
Der Generator verwendet das Abrufen, um die Qualität zu verbessern. Standardmäßig wird es Serply verwendet, um das Abrufen durchzuführen, aber Sie können auch Serpapi verwenden oder das Abrufen deaktivieren.
Der Kern ist erweiterbar, sodass Sie Ihre eigenen Adapter hinzufügen können, um eine Verbindung zu neuen APIs und Abruf -Backends herzustellen.
brew install postgres auf einem Mac installieren. psql postgres -c "create database textbook;"git clone https://github.com/VikParuchuri/textbook_quality.gitcd textbook_qualitypoetry installinvoke migrate-dev Erstellen Sie zunächst eine local.env -Datei im Stammverzeichnis des Repo, um Ihre geheimen Schlüssel zu speichern. Alternativ können Sie den folgenden Schlüssel als Env Var festlegen.
Sie können alle verfügbaren Konfigurationswerte in app/settings.py sehen.
OPENAI_KEY=sk-xxxxxxSERPLY_KEY="..." ) oder serpapi -Schlüssel ( SERPAPI_KEY="..." ) hinzu.SEARCH_BACKEND=serply oder SEARCH_BACKEND=serpapi hinzu, um das entsprechende Backend zu verwenden. Standardmäßig wird dies gpt-3.5 verwendet. Sie können gpt-4 verwenden, indem Sie die Env Vars LLM_TYPE , LLM_INSTRUCT_TYPE auf gpt-4 einstellen. Möglicherweise können Sie auch mit der Einstellung LLM_EXTENDED_TYPE auf gpt-4 davonkommen, aber Sie benötigen möglicherweise länger als 8K-Kontext.
OPENAI_KEY auf den Wert Ihrer API -Schlüssel oder eines Dummy -Werts.OPENAI_BASE_URL auf die URL Ihrer API (wie https://vllm-api.com/v1)LLM_TYPE , LLM_INSTRUCT_TYPE und LLM_EXTENDED_TYPE auf Ihren Modellnamen (wie llama )LLM_TYPES fest. Der Generator benötigt idealerweise eine Kontextlänge von bis zu 16k , aber Sie können mit 12k davonkommen, wenn Sie müssen. Wenn Sie Ihr eigenes Modell für das Lehrbuchgengen (basierend auf den in diesem Repo zwischengespeicherten Eingabeaufforderungen) beendet haben, können Sie die FINETUNED verwenden und Einstellungen für die Verringerung der Token -Nutzung INCLUDE_EXAMPLES .
SEARCH_BACKEND=none Es gibt drei Hauptskripte im Repo. Sie können jedes Skript auf der Ausgabe des vorherigen ausführen. Alle Ausgänge werden standardmäßig in app/data angezeigt, was die angegebene DATA_DIR in Einstellungen ist.
Sie geben ein Thema, eine Datei ein, in der Sie die Themen speichern möchten, und die Anzahl der Iterationen. Die Themen werden bestimmt.
Verwendungsbeispiel:
python topic_generator.py "computer science with python" python_cs_titles.json --iterations 50
Nehmen Sie eine Datei mit vorhandenen Samen (in einer flachen JSON -Liste) und erweitern Sie sie. Sie können die Ausgabedatei vom Themengenerator als Seed -Datei übergeben oder Ihre eigenen Samen verwenden. Domain ist eine optionale Flagge, um die Themen in einer Domäne einzuschränken.
Dies wird auch die Themen semantisch widmen.
Verwendungsbeispiel:
python topic_augmentor.py python_titles.json python_topics.json --domain python
Dadurch wird eine Datei mit einer flachen JSON -Liste von Themen erfolgen und ein Lehrbuch pro Thema generiert. Die Arbeiter fügen die Anzahl der parallelen Generationen. Senken Sie es, wenn Sie die Ratengrenzen treffen.
Verwendungsbeispiel:
python book_generator.py topics.json books.jsonl --workers 5
Sie können Einstellungen auch mit Umgebungsvariablen überschreiben (anstelle von local.env ). In diesem Beispiel wird eine VLLM -API anstelle von OpenAI verwendet:
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
Sie können alle Optionen sehen, indem Sie python book_generator.py --help ausführen.
Beachten Sie, dass die Kurse standardmäßig zwischengespeichert werden. Daher wird die Wiederherstellung eines Kurs mit demselben Namen zweimal nicht wieder die API treffen. Der Cache ist spezifisch für jedes Modell und jedes Thema. Sie können den Cache mit der Option --revision -Option überspringen, um eine Revisionsnummer für die Kurse anzugeben.
Sie können auch ein Buch aus einer vorhandenen Gliederung erstellen, indem Sie eine JSONL -Datei mit den folgenden Feldern erstellen:
topic - das Thema/Titel des Buchesoutline - Der Umriss des Buches als flache JSON -Liste. Dies muss in einem bestimmten Format stattfinden, siehe "sauberes Inhaltsverzeichnis" unten.queries - bis zu 2 Suchanfragen zum Abrufen zu verwenden. Wenn Sie das Abrufen nicht verwenden möchten, stellen Sie diese auf eine leere Liste ein. Dies erfolgt in einer JSONL -Datei mit einem vorhandenen Inhalts- und Titeltabel und verarbeitet sie in das richtige Format für die Buchgenerierung.
Verwendungsbeispiel:
python toc_cleaner.py toc.jsonl clean_toc.jsonl
toc.jsonl sollte die folgenden Felder in jeder Zeile haben:
title - Der Titel des Buchestoc - Eine Zeichenfolge, die das Inhaltsverzeichnis enthält. Dies kann schlecht formatiert werdenSie können dies erweitern, um neue LLM -Adapter, Abrufmethoden oder Aufgaben hinzuzufügen. PRs sind sehr willkommen.
app/llm/adaptorsapp/services/adaptors . Möglicherweise müssen Sie auch Einstellungen in services/generators/pdf.py anpassenapp/llm/generators Standardmäßig werden viele Ausnahmen versteckt, um Konsolenrauschen zu vermeiden. Verwenden Sie DEBUG=true , um sie wie folgt anzuzeigen:
DEBUG=true python book_generator.py python_topics.json books.jsonl --max 5 --workers 5