Этот проект генерирует очень длинные данные о качественном учебнике. Вот пример токена 70 м. Он может управлять поколениями параллельно, против Openai или вашего собственного API. Он может генерировать темы с нуля или использовать набор семян, которые вы предоставляете.
Генератор использует поиск для улучшения качества. По умолчанию он будет использовать Serply для поиска, но вы также можете использовать Serpapi или отключить поиск.
Ядро расширяется, поэтому вы можете добавить свои собственные адаптеры для подключения к новым API и бэкэндам поиска.
brew install postgres на Mac. psql postgres -c "create database textbook;"git clone https://github.com/VikParuchuri/textbook_quality.gitcd textbook_qualitypoetry installinvoke migrate-dev Во -первых, создайте файл local.env в корневом каталоге репо для хранения ваших секретных ключей. В качестве альтернативы вы можете установить любой ключ ниже в качестве Env Var.
Вы можете увидеть все доступные значения конфигурации в app/settings.py .
OPENAI_KEY=sk-xxxxxxSERPLY_KEY="..." ) или клавиша Serpapi ( SERPAPI_KEY="..." ).SEARCH_BACKEND=serply или SEARCH_BACKEND=serpapi чтобы использовать соответствующий бэкэнд. По умолчанию это будет использовать gpt-3.5 . Вы можете использовать gpt-4 , установив Env vars LLM_TYPE , LLM_INSTRUCT_TYPE на gpt-4 . Возможно, вы сможете уйти с настройкой LLM_EXTENDED_TYPE для gpt-4 , но вам может потребоваться более 8K контекст.
OPENAI_KEY на значение вашего ключа API или фиктивное значение.OPENAI_BASE_URL на URL вашего API (например, https://vllm-api.com/v1)LLM_TYPE , LLM_INSTRUCT_TYPE и LLM_EXTENDED_TYPE на имя модели (например, llama )LLM_TYPES . Генератор в идеале нуждается в длине контекста до 16k , Но вы можете уйти с 12k Если вам нужно. Если вы разработали свою собственную модель для Gen Demportbours Gen (на основе подсказок, кэшированных в этом репо), вы можете использовать настройки FINETUNED и INCLUDE_EXAMPLES чтобы уменьшить использование токенов.
SEARCH_BACKEND=none В репо есть три основных сценария. Вы можете запустить каждый скрипт на выходе предыдущего. Все выходы будут отображаться по умолчанию в app/data , который является указанным DATA_DIR в настройках.
Вы вводите тему, файл, в который вы хотите сохранить темы, и количество итераций. Темы будут дедуплифицированы.
Пример использования:
python topic_generator.py "computer science with python" python_cs_titles.json --iterations 50
Возьмите файл с существующими семенами (в плоском списке JSON) и увеличите их. Вы можете передать выходной файл из генератора тем в качестве семян или использовать свои собственные семена. Домен является необязательным флагом для ограничения тем в домене.
Это также будет семантически дедуплизировать темы.
Пример использования:
python topic_augmentor.py python_titles.json python_topics.json --domain python
Это займет файл с плоским списком тем по JSON и генерирует один учебник по теме. Флаг работников контролирует количество параллельных поколений. Снимите его, если вы достигнете ограничения.
Пример использования:
python book_generator.py topics.json books.jsonl --workers 5
Вы также можете переопределить настройки с переменными среды (вместо использования local.env ). В этом примере будет использоваться API VLLM вместо 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
Вы можете увидеть все варианты, используя python book_generator.py --help .
Обратите внимание, что курсы кэшируются по умолчанию, поэтому дважды восстановление курса с одним и тем же именем больше не попадет в API. Кэш специфичен для каждой модели и каждой темы. Вы можете пропустить кэш, используя параметр --revision , чтобы указать номер ревизии для курсов.
Вы также можете генерировать книгу из существующего схемы, создав файл JSONL с помощью следующих полей:
topic - тема/название книгиoutline - схема книги, как список JSON. Это должно быть в определенном формате, см. «Чистая таблица содержимого» ниже.queries - до 2 поисковых запросов для поиска для поиска. Если вы не хотите использовать поиск, установите это в пустой список. Это займет файл JSONL с существующим содержанием и заголовком, а также обрабатывает его в правильный формат для генерации книг.
Пример использования:
python toc_cleaner.py toc.jsonl clean_toc.jsonl
toc.jsonl должен иметь следующие поля в каждой строке:
title - Название книгиtoc - строка, содержащая содержание. Это может быть плохо отформатированоВы можете расширить это, чтобы добавить новые адаптеры LLM, методы поиска или задачи. PRS очень приветствуются.
app/llm/adaptorsapp/services/adaptors . Вам также может потребоваться настройка настроек в services/generators/pdf.pyapp/llm/generators По умолчанию многие исключения будут скрыты, чтобы избежать консольного шума. Используйте DEBUG=true , чтобы отобразить их, например:
DEBUG=true python book_generator.py python_topics.json books.jsonl --max 5 --workers 5