️ 註:由於時間限制,該專案的積極開發暫時被擱置。同時,如果您想維護該項目,請隨意分叉儲存庫或聯絡我們。
Pruju AI 是一款教學助手,可以讓學生與老師的課程教材互動。助理旨在回答任何學生問題,但前提是可以在教師提供的課程材料(例如教學大綱、幻燈片、講座記錄)中找到答案。也可以指導助理以符合課程教學目標的方式回答。例如,可以告訴助理不要回答某些問題或以特定方式回答。
這個專案的存在是為了盡可能輕鬆地創建虛擬助教。從教學的角度來看,能夠控制助理的知識庫以及助理對學生問題提供的答案類型至關重要。
該應用程式可以配置為使用教師自己的材料,無需任何編碼。您確實需要修改一些文字檔案並執行一個 Python 腳本以使其成為您自己的檔案。您也可以使用該程式碼作為更複雜和自訂設定的起點。如果您的課程使用 Moodle,您現在可以從您自己的課程匯入資料!
該應用程式可與 OpenAI 的 API、微軟的 Azure OpenAI 服務和 Ollama 搭配使用。 Ollama 支援更廣泛的開源模型(例如,Mistral 7B、Llama 2)。僅 Mistral 7B 進行過測試。
Pruju 是芬蘭大學俚語,意為學習講義。根據(芬蘭語)城市字典,prujus「的品質範圍可以從一本好書[...]到一堆毫無意義的神秘講座幻燈片」。
這些說明適用於 macOS,但也適用於 Linux 和(稍作修改)Windows。
克隆儲存庫並為專案建立虛擬環境。安裝所需的依賴項:
pip install -r requirements.txt
textract
相關的已知依賴性問題(#554 和 #465)。以下步驟應該可以幫助您避免任何問題。
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」(OpenAI 自己的 API)、「azure」(微軟的 Azure OpenAI 服務)或「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 with 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
標誌中。預設情況下,該腳本會將內容嵌入到WS_STORAGE
環境變數中指定的目錄中的 FAISS 向量儲存中,後面接著「 _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 向量資料庫,在容器中本地運行或使用託管服務。您可以透過修改 .env 來指定應用程式使用您的 qdrant 集合,如下所示:
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.py
從Moodle匯入課程材料,請將以上行也加入您的.moodle
。您可以考慮定期執行 Moodle 匯入腳本,以保持聊天機器人的知識庫最新。再次,請注意 Moodle 端的權限。
該應用程式中有一些新功能尚未正確記錄。預先存在的功能不受影響。這些包括:
該專案目前處於工作演示狀態,還有很大的改進空間。進一步發展的一些可能的方向:
Enrico Glerean 對該專案的許多方面提供了寶貴的建議。 Thomas Pfau 貢獻了程式碼,並在此過程中提供了許多重要的技術見解。