️ 注:由于时间限制,该项目的积极开发暂时被搁置。同时,如果您想维护该项目,请随意分叉存储库或联系我们。
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 贡献了代码,并在此过程中提供了许多重要的技术见解。