หมายเหตุ: การพัฒนาโครงการนี้ถูกระงับไว้ในขณะนี้ เนื่องจากข้อจำกัดด้านเวลา ในระหว่างนี้ คุณสามารถแยกพื้นที่เก็บข้อมูลหรือติดต่อหากคุณต้องการดูแลรักษาโปรเจ็กต์ต่อไป
Pruju AI เป็นผู้ช่วยสอนที่ช่วยให้นักเรียนโต้ตอบกับสื่อการเรียนการสอนของครู ผู้ช่วยได้รับการออกแบบมาเพื่อตอบคำถามของนักเรียน แต่ เฉพาะในกรณีที่ สามารถหาคำตอบได้จากเอกสารประกอบการเรียนที่อาจารย์จัดเตรียมไว้ให้ (เช่น หลักสูตร สไลด์ สำเนาการบรรยาย) ผู้ช่วยยังสามารถได้รับคำแนะนำให้ตอบในลักษณะที่สอดคล้องกับวัตถุประสงค์การสอนของหลักสูตร ตัวอย่างเช่น ผู้ช่วยสามารถถูกบอกให้ ไม่ ตอบคำถามบางข้อหรือตอบด้วยวิธีใดวิธีหนึ่งโดยเฉพาะ
โปรเจ็กต์นี้มีไว้เพื่อให้การสร้างผู้ช่วยสอนเสมือนเป็นเรื่องง่ายที่สุด จากมุมมองด้านการสอน จำเป็นอย่างยิ่งที่จะต้องสามารถควบคุมฐานความรู้ของผู้ช่วยตลอดจนประเภทของคำตอบที่ผู้ช่วยตอบคำถามของนักเรียน
สามารถกำหนดค่าแอปให้ทำงานกับสื่อการสอนของครูได้โดยไม่ต้องเขียนโค้ดใดๆ คุณจำเป็นต้องแก้ไขไฟล์ข้อความบางไฟล์และเรียกใช้สคริปต์ Python หนึ่งสคริปต์เพื่อทำให้เป็นไฟล์ของคุณเอง คุณยังสามารถใช้โค้ดเป็นจุดเริ่มต้นสำหรับการตั้งค่าที่ซับซ้อนและปรับแต่งได้มากขึ้น หากหลักสูตรของคุณใช้ Moodle คุณสามารถนำเข้าข้อมูลจากหลักสูตรของคุณเองได้แล้ว!
แอปนี้ทำงานร่วมกับ API ของ OpenAI, Azure OpenAI Service ของ Microsoft และ Ollama Ollama รองรับโมเดลโอเพ่นซอร์สที่หลากหลายมากขึ้น (เช่น Mistral 7B, Llama 2) มีการทดสอบเฉพาะ Mistral 7B เท่านั้น
Pruju เป็นคำสแลงมหาวิทยาลัยของฟินแลนด์สำหรับเอกสารประกอบการศึกษา ตามพจนานุกรม Urban Dictionary (ฟินแลนด์) คำว่า prujus "อาจมีคุณภาพตั้งแต่หนังสือดีๆ [...] ไปจนถึงกองสไลด์บรรยายคลุมเครือที่ไม่สมเหตุสมผลแต่อย่างใด"
คำแนะนำนี้มีไว้สำหรับ macOS แต่ควรใช้งานได้กับ Linux และ Windows (ที่มีการปรับเปลี่ยนเล็กน้อย) เช่นกัน
โคลน repo และสร้างสภาพแวดล้อมเสมือนสำหรับโปรเจ็กต์ ติดตั้งการพึ่งพาที่จำเป็น:
pip install -r requirements.txt
textract
ขั้นตอนต่อไปนี้จะช่วยคุณหลีกเลี่ยงปัญหาใดๆ
pip install --upgrade pip==24.0
six
หลังจากติดตั้งข้อกำหนด: pip install --upgrade six
คุณควรสร้างไฟล์ .env ที่มีสิ่งต่อไปนี้เป็นอย่างน้อย:
# Specify LLM provider and model
LLM_PROVIDER="openai"
MODEL_NAME="gpt-4"
# Directory for your course data:
CHAT_DATA_FOLDER ="prujuai_resources"
# Total model call quota:
TOTAL_MODEL_QUOTA=5
# Max number of tokens per call
MAX_PROMPT_TOKENS=2000
# Capacity management:
MAX_CONCURRENCY=2
MAX_QUEUE=10
ขณะนี้คุณสามารถเลือกระหว่าง "openai" (API ของ OpenAI), "azure" (บริการ Azure OpenAI ของ Microsoft) หรือ "ollama" (Ollama)
หากคุณเลือก openai คุณต้องกำหนดคีย์ API:
LLM_PROVIDER="openai"
MODEL_NAME="gpt-4"
OPENAI_API_KEY="your-secret-key-goes-here"
หากคุณเลือก Azure คุณต้องกำหนดจุดสิ้นสุด API และคีย์ API:
LLM_PROVIDER="azure"
MODEL_NAME="gpt-4"
OPENAI_API_KEY = "your-secret-key-goes-here"
MODEL_ENDPOINT="https://your-azure-endpoint"
# Optionally, you can define:
AZURE_OPENAI_CUSTOM_BACKEND = "/custom/url/back/end/other/than/chat/completions"
AZURE_OPENAI_CUSTOM_HEADER="Some-Custom-Authentication-Header"
หากคุณเลือก ollama คุณจะต้องกำหนดโมเดลที่จะใช้
LLM_PROVIDER="ollama"
MODEL_NAME="mistral"
ในกรณีของ Ollama คุณต้องติดตั้ง Ollama และรัน ollama serve <modelname>
เพื่อรองรับโมเดล 127.0.0.1:11434
จนถึงขณะนี้มีเพียง Mistral 7B เท่านั้นที่ได้รับการทดสอบ ฟังก์ชั่นพื้นฐานใช้งานได้ แต่ยังไม่ได้รับการทดสอบอย่างกว้างขวาง
วิ่ง:
gradio app.py
เมื่อแอปทำงาน แอปจะแจ้งที่อยู่ที่คุณสามารถค้นหาอินเทอร์เฟซแชทบอตได้
ในการเริ่มต้น ให้สร้างสำเนาของไดเร็กทอรี prujuai_resources
และตั้งชื่อที่คุณต้องการ (เช่น mycourse_resources
) จากนั้นแก้ไขไฟล์ .env เพื่อให้แอปรู้ว่าจะค้นหาไฟล์ได้ที่ไหน (เช่น CHAT_DATA_FOLDER="mycourse_resources"
) ในไดเร็กทอรีใหม่นี้ ให้แก้ไขไฟล์ต่อไปนี้ตามที่คุณต้องการ:
prompt_template.txt
ให้คำแนะนำระบบทั่วไปสำหรับแชทบอทexamples_ui.txt
กำหนดตัวอย่างที่ช่วยให้ผู้ใช้เริ่มถามคำถามที่เป็นประโยชน์favicon.ico
คือไอคอนของแอปchat_header.md
ให้คำอธิบายที่แก้ไขได้สำหรับแอปของคุณซึ่งแสดงอยู่เหนืออินเทอร์เฟซแชทchat_footer.md
เหมือนด้านบน แต่อยู่ด้านล่างอินเทอร์เฟซการแชทหากต้องการอ่านสื่อของคุณเองไปยังร้านเวกเตอร์ คุณควรเรียกใช้:
python3 read_to_vectorstore.py
สคริปต์จะอ่านเนื้อหาหลักสูตรของคุณจากตำแหน่งที่กำหนด ( ./course_material
โดยค่าเริ่มต้น) และจัดเก็บไว้ในที่เก็บเวกเตอร์ FAISS (โดยค่าเริ่มต้น . ./course_material_vdb
) เมื่อเสร็จแล้ว ให้ย้ายไฟล์ index.faiss
และ index.pkl
ไปที่ CHAT_DATA_FOLDER/faiss_index
หากคุณต้องการตัวเลือกเพิ่มเติม เช่น การรันสคริปต์ในโหมดที่ไม่มีการโต้ตอบด้วยค่าเริ่มต้นที่สมเหตุสมผล ให้รันสคริปต์ด้วย -h:
python3 read_to_vectorstore.py -h
เนื้อหาหลักสูตรเริ่มต้นมาจากหลักสูตรจินตภาพที่เรียกว่า Primer on Business Analytics ด้วย Python ซึ่งสร้างขึ้นด้วยความช่วยเหลือของ ChatGPT (GPT-4) เพื่อวัตถุประสงค์ในการสาธิต สื่อตัวอย่าง ( course_materials
) ประกอบด้วยสไลด์การบรรยาย สำเนาการบรรยาย และบทช่วยสอนการเขียนสคริปต์ Python
โปรดคิดให้รอบคอบว่าคุณ (ไม่) ต้องการให้แอปของคุณเข้าถึงข้อมูลใด!
คุณสามารถนำเข้าวัสดุจากอินสแตนซ์ Moodle สร้างไฟล์ชื่อ .moodle
และแก้ไขให้มีสิ่งต่อไปนี้:
COURSE_ID="12345"
WS_TOKEN="your-token"
WS_ENDPOINT="https://your-moodle-instance.edu/webservice/rest/server.php"
WS_STORAGE="moodle_data"
การเรียกใช้สคริปต์ moodle.py
จะดาวน์โหลดไฟล์ (จากทรัพยากร ไฟล์ และ โฟลเดอร์ ) โพสต์จากฟอรัม ประกาศ สามารถรวมเข้ากับแฟล็ก -p
ตามค่าเริ่มต้น สคริปต์จะฝังเนื้อหาไว้ในที่เก็บเวกเตอร์ FAISS ในไดเร็กทอรีที่ระบุในตัวแปรสภาพแวดล้อม WS_STORAGE
ตามด้วย " _vdb
" (เช่น moode_data_vdb
)
python3 moodle.py
จากนั้น คุณสามารถคัดลอกไฟล์ index.faiss
และ index.pkl
ไปยังโฟลเดอร์เนื้อหาหลักสูตรของคุณ ( CHAT_DATA_FOLDER/faiss_index
) สคริปต์ยังรวมลิงก์ Moodle ไปยังส่วนข้อความที่ใช้โดยร้านค้าเวกเตอร์ ดังนั้นจึงแนะนำให้เพิ่มสิ่งนี้ลงในข้อความแจ้งเตือนของระบบ: Make sure to include hyperlinks to allow easy access to the materials.
ช่วยให้ผู้ใช้สามารถนำทางเพื่อดูเนื้อหาต้นฉบับบน Moodle ได้อย่างง่ายดาย ตรวจสอบให้แน่ใจว่าโทเค็นการเข้าถึงเชื่อมโยงกับสิทธิ์ที่เหมาะสมในส่วนท้ายของ Moodle
คุณยังสามารถใช้ฐานข้อมูลเวกเตอร์ qdrant รันแบบโลคัลในคอนเทนเนอร์ หรือใช้บริการที่โฮสต์ได้ คุณสามารถระบุแอปเพื่อใช้คอลเลกชัน qdrant ของคุณโดยการแก้ไข .env ดังนี้:
VECTOR_STORE="qdrant" # If you use qdrant
VECTOR_STORE_COLLECTION="my_collection" # qdrant collection name
VECTOR_STORE_ENDPOINT="localhost" #"localhost" or hosted service endpoint
VECTOR_STORE_API_KEY="your-secret" # If you use qdrant's hosted service
หากคุณกำลังนำเข้าสื่อการสอนจาก Moodle โดยใช้ moodle.py
ให้เพิ่มบรรทัดด้านบนลงใน .moodle
ของคุณด้วย คุณสามารถพิจารณาเรียกใช้สคริปต์นำเข้า Moodle เป็นระยะๆ เพื่อให้ฐานความรู้ของแชทบอทเป็นปัจจุบันอยู่เสมอ ขอย้ำอีกครั้ง ว่าโปรดคำนึงถึงการอนุญาตในส่วนท้ายของ Moodle
มีฟีเจอร์ใหม่ๆ บางอย่างในแอปที่ยังไม่มีการจัดทำเอกสารอย่างถูกต้อง ฟังก์ชันการทำงานที่มีอยู่แล้วจะไม่ได้รับผลกระทบ ซึ่งรวมถึง:
ขณะนี้โครงการอยู่ในสถานะสาธิตที่ใช้งานได้ และยังมีพื้นที่อีกมากมายให้ปรับปรุง แนวทางที่เป็นไปได้สำหรับการพัฒนาเพิ่มเติม:
Enrico Glerean ให้คำแนะนำอันล้ำค่าในหลายแง่มุมของโครงการ Thomas Pfau มีส่วนร่วมในการเขียนโค้ดและให้ข้อมูลเชิงลึกทางเทคนิคที่สำคัญมากมายตลอดการทำงาน