️ Nota: O desenvolvimento ativo deste projeto está suspenso por enquanto, devido a limitações de tempo. Enquanto isso, sinta-se à vontade para fazer um fork do repositório ou entrar em contato se desejar manter o projeto.
Pruju AI é um assistente de ensino que permite aos alunos interagir com os materiais do curso do professor. O assistente foi projetado para responder a qualquer pergunta do aluno, mas somente se a resposta puder ser encontrada nos materiais do curso fornecidos pelo professor (por exemplo, plano de estudos, slides, transcrições de palestras). O assistente também pode ser orientado a responder de forma alinhada aos objetivos pedagógicos do curso. Por exemplo, o assistente pode ser instruído a não responder a certas perguntas ou a responder de uma maneira específica.
O projeto existe para tornar a criação de assistentes de ensino virtuais o mais fácil possível. Do ponto de vista pedagógico, é fundamental poder controlar a base de conhecimentos do auxiliar, bem como os tipos de respostas que o auxiliar dá às questões do aluno.
O aplicativo pode ser configurado para funcionar com materiais do próprio professor sem qualquer codificação. Você precisa modificar alguns arquivos de texto e executar um script Python para torná-lo seu. Você também pode usar o código como ponto de partida para configurações mais sofisticadas e personalizadas. Se o seu curso usa Moodle, agora você pode importar dados do seu próprio curso!
O aplicativo funciona com API da OpenAI, Azure OpenAI Service da Microsoft e Ollama. Ollama suporta uma gama mais ampla de modelos de código aberto (por exemplo, Mistral 7B, Llama 2). Apenas o Mistral 7B foi testado.
Pruju é uma gíria universitária finlandesa para apostila de estudo. De acordo com o Dicionário Urbano (Finlandês), prujus "pode variar em qualidade, desde um bom livro [...] até uma pilha de slides de palestras enigmáticas que não fazem nenhum sentido."
As instruções são para macOS, mas devem funcionar com Linux e (com pequenas modificações) com Windows também.
Clone o repositório e crie um ambiente virtual para o projeto. Instale as dependências necessárias:
pip install -r requirements.txt
textract
. As etapas a seguir devem ajudá-lo a evitar problemas.
pip install --upgrade pip==24.0
six
após instalar os requisitos: pip install --upgrade six
Você deve criar um arquivo .env que contenha pelo menos o seguinte:
# 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
Atualmente você pode escolher entre "openai" (API própria da OpenAI), "azure" (serviço Azure OpenAI da Microsoft) ou "ollama" (Ollama).
Se você escolher openai, deverá definir a chave API:
LLM_PROVIDER="openai"
MODEL_NAME="gpt-4"
OPENAI_API_KEY="your-secret-key-goes-here"
Se você escolher o Azure, deverá definir o endpoint da API e a chave da 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"
Se você escolher ollama, será necessário definir o modelo a ser utilizado.
LLM_PROVIDER="ollama"
MODEL_NAME="mistral"
No caso do Ollama, você precisa instalar o Ollama e executar ollama serve <modelname>
para servir o modelo em 127.0.0.1:11434
. Apenas o Mistral 7B foi testado até agora. A funcionalidade básica funciona, mas não foi testada extensivamente.
Correr:
gradio app.py
Assim que o aplicativo estiver em execução, ele informará o endereço onde você pode encontrar a interface do chatbot.
Para começar, crie uma cópia do diretório prujuai_resources
e dê a ele um nome de sua preferência (por exemplo, mycourse_resources
). Em seguida, modifique o arquivo .env para que o aplicativo saiba onde procurar os arquivos (por exemplo, CHAT_DATA_FOLDER="mycourse_resources"
). Neste novo diretório, modifique os seguintes arquivos ao seu gosto:
prompt_template.txt
fornece as instruções gerais do sistema para o chatbotexamples_ui.txt
define os exemplos que ajudam o usuário a começar a fazer perguntas úteisfavicon.ico
é o ícone do aplicativochat_header.md
fornece uma descrição modificável do seu aplicativo que é exibida acima da interface de chatchat_footer.md
como acima, mas abaixo da interface de chatPara ler seus próprios materiais em uma loja de vetores, você deve executar:
python3 read_to_vectorstore.py
O script lerá os materiais do seu curso em um determinado local ( ./course_material
por padrão) e os armazenará em um armazenamento de vetores FAISS (por padrão ./course_material_vdb
). Quando terminar, mova os arquivos index.faiss
e index.pkl
para CHAT_DATA_FOLDER/faiss_index
. Se você quiser mais opções, como executar o script no modo não interativo com padrões razoáveis, execute o script com -h:
python3 read_to_vectorstore.py -h
Os materiais padrão do curso são de um curso imaginário chamado Primer on Business Analytics with Python , produzido com a ajuda do ChatGPT (GPT-4) para fins de demonstração. Os materiais de exemplo ( course_materials
) incluem slides de palestras, transcrições de palestras e tutoriais de scripts Python.
Pense cuidadosamente a quais dados você (não) deseja que seu aplicativo tenha acesso!
Você pode importar os materiais de uma instância do Moodle. Crie um arquivo chamado .moodle
e modifique-o para conter o seguinte:
COURSE_ID="12345"
WS_TOKEN="your-token"
WS_ENDPOINT="https://your-moodle-instance.edu/webservice/rest/server.php"
WS_STORAGE="moodle_data"
A execução do script moodle.py
fará o download dos arquivos (dos recursos de arquivos e pastas ). Postagens do fórum de anúncios podem ser incluídas com o sinalizador -p
. O script irá, por padrão, incorporar o conteúdo em um armazenamento vetorial FAISS em um diretório especificado na variável de ambiente WS_STORAGE
, seguido por " _vdb
" (por exemplo, moode_data_vdb
).
python3 moodle.py
Você pode então copiar os arquivos index.faiss
e index.pkl
para a pasta de material do curso ( CHAT_DATA_FOLDER/faiss_index
). O script também inclui links do Moodle para os blocos de texto consumidos pelo armazenamento de vetores, por isso é aconselhável adicionar algo assim ao prompt do sistema: Make sure to include hyperlinks to allow easy access to the materials.
Isso permite ao usuário navegar facilmente para ver o conteúdo original no Moodle. Certifique-se de que o token de acesso esteja associado às permissões apropriadas no Moodle.
Você também pode usar um banco de dados vetorial qdrant, executado localmente em um contêiner ou usando o serviço hospedado. Você pode especificar o aplicativo para usar sua coleção qdrant modificando .env da seguinte maneira:
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
Se você estiver importando os materiais do seu curso do Moodle usando moodle.py
, adicione as linhas acima ao seu .moodle
também. Você pode considerar executar o script de importação do Moodle periodicamente para manter a base de conhecimento do chatbot atualizada. Novamente, esteja atento às permissões no lado do Moodle .
Existem alguns novos recursos no aplicativo que ainda não estão devidamente documentados. As funcionalidades pré-existentes não são afetadas. Estes incluem:
O projeto está atualmente em estado de demonstração funcional, com muito espaço para melhorias. Algumas direções possíveis para um maior desenvolvimento:
Enrico Glerean forneceu conselhos valiosos sobre muitos aspectos do projeto. Thomas Pfau contribuiu com código e forneceu muitos insights técnicos cruciais ao longo do caminho.