โครงการนี้สร้างข้อมูลการเตรียมการที่มีคุณภาพของตำราเรียนยาวมาก นี่คือตัวอย่างโทเค็น 70m มันสามารถเรียกใช้รุ่นเดียวกันกับ 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 ในไดเรกทอรีรูทของ repo เพื่อจัดเก็บกุญแจลับของคุณ หรือคุณสามารถตั้งค่าคีย์ใด ๆ ด้านล่างเป็น env var
คุณสามารถดูค่าการกำหนดค่าที่มีอยู่ทั้งหมดใน app/settings.py 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 ตำราเรียน (ขึ้นอยู่กับคำแนะนำที่แคชไว้ใน repo นี้) คุณสามารถใช้การตั้งค่า FINETUNED และ INCLUDE_EXAMPLES เพื่อลดการใช้โทเค็น
SEARCH_BACKEND=none มีสามสคริปต์หลักใน repo คุณสามารถเรียกใช้แต่ละสคริปต์บนเอาต์พุตของสคริปต์ก่อนหน้า เอาต์พุตทั้งหมดจะปรากฏขึ้นตามค่าเริ่มต้นใน 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 แบน สิ่งนี้จะต้องอยู่ในรูปแบบเฉพาะให้ดู "สารบัญ Clean Clean" ด้านล่าง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