️ 注: このプロジェクトのアクティブな開発は、時間の制約により当面保留されます。それまでの間、プロジェクトを維持したい場合は、リポジトリをフォークするか、ご連絡ください。
Pruju AI は、生徒が教師のコース教材と対話できるようにするティーチング アシスタントです。アシスタントは生徒のあらゆる質問に答えるように設計されていますが、その答えが教師が提供するコース資料 (シラバス、スライド、講義録など) にある場合に限られます。アシスタントは、コースの教育目的に沿った方法で回答するように誘導することもできます。たとえば、アシスタントには、特定の質問に答えないように、または特定の方法で答えるように指示することができます。
このプロジェクトは、仮想ティーチングアシスタントの作成をできるだけ簡単にするために存在します。教育的な観点から見ると、アシスタントの知識ベースと、学生の質問に対してアシスタントが提供する回答の種類を制御できることが不可欠です。
このアプリは、コーディングを行わずに教師自身の教材を操作できるように構成できます。いくつかのテキスト ファイルを変更し、Python スクリプトを 1 つ実行して独自のものにする必要があります。このコードを、より洗練されたカスタマイズされたセットアップの開始点として使用することもできます。コースで Moodle を使用している場合は、独自のコースからデータをインポートできるようになりました。
このアプリは、OpenAI の API、Microsoft の Azure OpenAI サービス、および Ollama で動作します。 Ollama は、より広範囲のオープンソース モデル (Mistral 7B、Llama 2 など) をサポートしています。ミストラル 7B のみがテストされています。
Pruju はフィンランドの大学のスラングで、研究の配布資料を指します。 (フィンランドの)都市辞典によると、プルジュは「良質な本から、まったく意味のない不可解な講義スライドの山まで、その質はさまざまである」。
この手順は 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"
ollam を選択した場合は、使用するモデルを定義する必要があります。
LLM_PROVIDER="ollama"
MODEL_NAME="mistral"
Ollama の場合、Ollama をインストールし、 ollama serve <modelname>
を実行してモデルを127.0.0.1:11434
に提供する必要があります。これまでにテストされたのはミストラル 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 はコードを提供し、その過程で多くの重要な技術的洞察を提供しました。