️ 참고: 이 프로젝트의 활발한 개발은 시간 제약으로 인해 당분간 보류됩니다. 그 동안에는 저장소를 포크하거나 프로젝트를 유지 관리하려는 경우 언제든지 문의하세요.
푸르주 AI는 학생들이 교사의 수업 자료와 상호 작용할 수 있게 해주는 조교입니다. 보조자는 학생의 모든 질문에 답변하도록 설계되었지만 교사가 제공한 강의 자료(예: 강의 계획서, 슬라이드, 강의 성적표)에서 답변을 찾을 수 있는 경우에만 가능합니다. 또한 보조자는 코스의 교육적 목표에 부합하는 방식으로 답변하도록 안내받을 수 있습니다. 예를 들어, 보조자에게 특정 질문에 대답 하지 않거나 특정 방식으로 대답하라는 지시를 내릴 수 있습니다.
이 프로젝트는 가상 조교를 최대한 쉽게 만들기 위해 존재합니다. 교육학적 관점에서 조교가 학생의 질문에 제공하는 답변 유형뿐만 아니라 조교의 지식 기반을 제어할 수 있는 것이 필수적입니다.
코딩 없이 교사가 직접 만든 자료를 사용하여 작동하도록 앱을 구성할 수 있습니다. 일부 텍스트 파일을 수정하고 하나의 Python 스크립트를 실행하여 자신만의 것으로 만들어야 합니다. 더욱 정교하고 사용자 정의된 설정을 위한 시작점으로 코드를 사용할 수도 있습니다. 귀하의 강좌에서 Moodle을 사용하는 경우 이제 귀하의 강좌에서 데이터를 가져올 수 있습니다!
이 앱은 OpenAI의 API, Microsoft의 Azure OpenAI 서비스 및 Ollama와 함께 작동합니다. Ollama는 더 넓은 범위의 오픈 소스 모델(예: Mistral 7B, Llama 2)을 지원합니다. Mistral 7B만 테스트되었습니다.
Pruju는 학습 자료를 뜻하는 핀란드 대학 속어입니다. (핀란드) Urban Dictionary에 따르면, 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"(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"
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
기본 강좌 자료는 데모용으로 ChatGPT(GPT-4)의 도움으로 제작된 Python을 사용한 비즈니스 분석 입문서 라는 가상 강좌에서 가져온 것입니다. 예제 자료( 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는 코드에 기여하고 그 과정에서 많은 중요한 기술적 통찰력을 제공했습니다.