該項目生成很長的教科書質量預讀取數據。這是一個70m的令牌示例。它可以並行運行,與OpenAI或您自己的API並行運行。它可以從頭開始生成主題,或使用您提供的一組種子。
發電機使用檢索來提高質量。默認情況下,它將使用Serprical進行檢索,但是您也可以使用SERPAPI或禁用檢索。
核心是可擴展的,因此您可以添加自己的適配器以連接到新的API和檢索後端。
brew install postgres安裝它。 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 。您可以通過將env vars LLM_TYPE , LLM_INSTRUCT_TYPE設置為gpt-4來使用gpt-4 。您也許也可以將LLM_EXTENDED_TYPE設置為gpt-4 ,但是您可能需要超過8K上下文。
OPENAI_KEY設置為API密鑰的值或虛擬值。OPENAI_BASE_URL設置為API的URL(例如https://vllm-api.com/v1)LLM_TYPE , LLM_INSTRUCT_TYPE和LLM_EXTENDED_TYPE設置設置為模型名稱(如llama )LLM_TYPES設置中設置模型名稱和最大令牌。理想情況下,發電機的上下文長度最多需要16k ,但是如果需要的話,您可以逃脫12k 。如果您對教科書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 )覆蓋設置。此示例將使用VLLM API而不是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適配器,檢索方法或任務。 PR非常歡迎。
app/llm/adaptors中app/services/adaptors中。您可能還需要調整services/generators/pdf.py的設置app/llm/generators中默認情況下,將隱藏許多例外,以避免控制台噪聲。使用DEBUG=true顯示它們,這樣:
DEBUG=true python book_generator.py python_topics.json books.jsonl --max 5 --workers 5