本システムは,OpenAI 社が開発した ChatGPT API を用いて,Java 言語を対象としたプログラミング演習問題の自動生成(自動作問)を行うシステムである.以降では,本システムのセットアップ手順および使用方法を示す.
- Python 3.11 以上
- 本システムのセットアップおよび使用に必要な以下のツールをインストールする.
- OpenAI 社の API キー発行ページにアクセスしてアカウントを作成し,API キーを取得する.
- 以下のコマンドを実行し,本システムをインストールする.
pip install -U git+https://github.com/igakilab/javaans.git
- 以下のコマンドを正常に実行可能か確認する.
javagen -h
- プロジェクト名を指定してプロジェクトを作成する.作成後,プロジェクト名のディレクトリに移動する.
javagen init <プロジェクト名>
cd <プロジェクト名>
-
.env
ファイルのYOUR_OPENAI_API_KEY
の部分を,取得した API キーに置き換える. -
必要に応じて設定ファイルを編集する.各種設定ファイルの詳細はこちらに記載している.
以下に実行例を示す.
# 授業回はlecXXの形式で指定する(第10回であればlec10)
# 問題番号は1から始まる整数で指定する
# 以下のコマンドを実行すると,data.csvの情報をもとに第10回の1番目の問題が生成される
$ javagen generate lec10 1
課題10- 1の解答を生成中... 完了
Token check: OK
Compile check: OK
課題10- 1の問題を生成中... 完了
WorkA1Test.mainTest1() passed. (0.033s)
# 解答例コードのみを生成する場合は,-aオプションを付与する
$ javagen generate -a lec10 1
課題10- 1の解答を生成中... 完了
Token check: OK
Compile check: OK
# 仕様・実行例のみを生成する場合は,-qオプションを付与する(解答例コードの生成後のみ使用可)
$ javagen generate -q lec10 1
課題10- 1の問題を生成中... 完了
WorkA1Test.mainTest1() passed. (0.033s)
$
問題の生成後は以下のディレクトリが生成される.
lecXX # 授業回ディレクトリ
├─generated # 生成された問題を格納するディレクトリ
│ ├─answer # 解答例コード
│ ├─question # 仕様・実行例
│ └─test # テストコード
└─log # ログファイルを格納するディレクトリ
├─answer # 解答例コード生成時のログ
├─question # 仕様・実行例生成時のログ
└─xml # テスト実行時のログ
難易度は規模(解答例コードの総行数)の大小と抽象度(問題文の抽象度)の高低によって構成される.作問時に難易度に関するオプションを指定することで,指定された難易度に応じたサンプル問題が読み込まれ,生成される問題の難易度が調整される.デフォルトでは規模小,抽象度低のサンプル問題が用いられる.難易度を変更する場合や難易度を考慮しない場合は,作問時に以下のオプションを指定する.
--long
オプション- 規模の大きい(解答例コードの行数が長い)サンプル問題を用いる
--abstract
オプション- 問題文の抽象度が高いサンプル問題を用いる
--no-difficulty
オプション- 難易度に関するパラメータを持たないサンプル問題を用いる
# 規模小,抽象度高のサンプル問題を用いて問題を生成する場合
$ javagen generate --abstract lec10 1
課題10- 1の解答を生成中... 完了
Token check: OK
Compile check: OK
課題10- 1の問題を生成中... 完了
WorkA1Test.mainTest1() passed. (0.033s)
# 規模大,抽象度高のサンプル問題を用いて問題を生成する場合
$ javagen generate --long --abstract lec10 1
課題10- 1の解答を生成中... 完了
Token check: OK
Compile check: OK
課題10- 1の問題を生成中... 完了
WorkA1Test.mainTest1() passed. (0.033s)
# 難易度に関するパラメータを持たないサンプル問題を用いて問題を生成する場合
$ javagen generate --no-difficulty lec10 1
課題10- 1の解答を生成中... 完了
Token check: OK
Compile check: OK
課題10- 1の問題を生成中... 完了
WorkA1Test.mainTest1() passed. (0.033s)
$
特定のサンプル問題を用いて問題を生成する場合,以下のディレクトリ構成に従ってサンプル問題を配置する.構成例については本リポジトリのlec00/
を参照されたい.
lecXX # サンプル問題の授業回ディレクトリ
├─data # サンプル問題を格納するディレクトリ
│ ├─answer # 解答例コード
│ ├─example # 実行例
│ └─spec # 仕様
サンプル問題を指定する場合は-s <WorkXY>
の形式で指定する.WorkXY
について,X は授業回を 16 進数大文字で表したもので,Y は問題番号を 16 進数小文字で表したものである.以下にサンプル問題として第 2 回の 5 番目の問題(Work25)を用いる場合の実行例を示す.
$ javagen generate -s Work25 lec10 1
課題10- 1の解答を生成中... 完了
Token check: OK
Compile check: OK
課題10- 1の問題を生成中... 完了
WorkA1Test.mainTest1() passed. (0.033s)
$
--model
オプション- 使用する ChatGPT API のモデルを指定する
--model <モデル名>
の形式で指定する- デフォルトは
gpt-4o
- 利用可能なモデルについてはこちらの
/v1/chat/completions
を参照