该项目生成很长的教科书质量预读取数据。这是一个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