️ Примечание. Активная разработка этого проекта на данный момент приостановлена из-за нехватки времени. А пока вы можете создать форк репозитория или связаться с нами, если хотите сохранить проект.
Pruju AI — это помощник преподавателя, который позволяет студентам взаимодействовать с материалами курса учителя. Помощник предназначен для ответа на любой вопрос студента, но только в том случае, если ответ можно найти в материалах курса, предоставленных преподавателем (например, в программе, слайдах, стенограммах лекций). Ассистенту также можно помочь ответить так, чтобы это соответствовало педагогическим целям курса. Например, ассистенту можно сказать, чтобы он не отвечал на определенные вопросы или отвечал определенным образом.
Проект существует для того, чтобы максимально упростить создание виртуальных помощников преподавателя. С педагогической точки зрения важно иметь возможность контролировать базу знаний ассистента, а также типы ответов, которые ассистент дает на вопросы студента.
Приложение можно настроить для работы с собственными материалами преподавателя без какого-либо программирования. Вам нужно изменить некоторые текстовые файлы и запустить один скрипт Python, чтобы сделать его своим. Вы также можете использовать код в качестве отправной точки для более сложных и индивидуальных настроек. Если ваш курс использует Moodle, теперь вы можете импортировать данные из своего курса!
Приложение работает с API OpenAI, службой Microsoft Azure OpenAI и Ollama. Ollama поддерживает более широкий спектр моделей с открытым исходным кодом (например, Mistral 7B, Llama 2). Испытанию подвергся только Мистраль 7Б.
Прую — это на финском университетском жаргоне учебное пособие. Согласно (финскому) Городскому словарю, качество пруюса «может варьироваться от хорошей книги [...] до стопки загадочных слайдов лекций, которые не имеют никакого смысла».
Инструкции предназначены для macOS, но должны работать и с Linux, а также (с небольшими изменениями) с Windows.
Клонируйте репозиторий и создайте виртуальную среду для проекта. Установите необходимые зависимости:
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» (служба Microsoft 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"
Если вы выберете олламу, вам необходимо определить модель, которая будет использоваться.
LLM_PROVIDER="ollama"
MODEL_NAME="mistral"
В случае Ollama вам необходимо установить Ollama и запустить ollama serve <modelname>
для обслуживания модели по адресу 127.0.0.1:11434
. Пока испытан только Мистраль 7Б. Базовая функциональность работает, но тщательно не тестировалась.
Бегать:
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
. Сценарий по умолчанию встраивает содержимое векторного хранилища 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 .
В приложении есть некоторые новые функции, которые еще не документированы должным образом. Существующие ранее функции не затрагиваются. К ним относятся:
В настоящее время проект находится в рабочем демонстрационном состоянии и имеет множество возможностей для улучшения. Некоторые возможные направления дальнейшего развития:
Энрико Глереан предоставил неоценимые советы по многим аспектам проекта. Томас Пфау предоставил код и попутно предоставил множество важных технических идей.