人狼知能コンテスト(自然言語部門) のサンプルエージェントです。
Important
最新情報はaiwolfdial.github.ioを参照してください。
人狼ゲームの役職や流れなどのルールについては、logic.mdを参照してください。
大会参加者はエージェントを実装したうえで、ご自身の端末でエージェントを実行、大会運営が提供するゲームサーバに接続する必要があります。エージェントの実装については、実装言語を含め、制限はありません。
自己対戦では、5体,13体のエージェントをご自身の端末で実行し、大会運営が提供する自己対戦用のゲームサーバに接続しすることで、エージェント同士の対戦を行うことができます。
ローカル内での動作確認ならびに自己対戦するためのゲームサーバについては、aiwolfdial/aiwolf-nlp-serverを参照してください。
Important
Python 3.11以上が必要です。
git clone https://github.com/aiwolfdial/aiwolf-nlp-agent.git
cd aiwolf-nlp-agent
cp config/config.yml.example config/config.yml
python -m venv .venv
source .venv/bin/activate
pip install -e .
Note
aiwolf-nlp-commonとは、役職や接続方式に関するプログラムが定義されているPythonパッケージです。
詳細はaiwolfdial/aiwolf-nlp-commonを参照してください。
python src/main.py
デフォルトではconfig/config.yml
の設定を参照して起動します。
指定して起動する方法や複数の設定ファイルを同時に実行する方法は以下のとおりです。
python src/main.py -c config/config_1.yml # config/config_1.ymlを指定する場合
python src/main.py -c config/config_1.yml config/config_2.yml # config/config_1.ymlとconfig/config_2.ymlを指定する場合
python src/main.py -c config/config_*.yml # config/config_*.ymlを指定する場合
事前にゲームサーバを立ち上げる必要があります。
aiwolfdial/aiwolf-nlp-serverを参照してください。
予選は参加登録後に招待されるSlack上で公開されるアドレスに接続することで、対戦できます。
設定の該当項目を変更したうえで、エージェントを実行してください。
本戦は参加登録後に招待されるSlack上で公開されるアドレスに接続することで、対戦できます。
本戦ではweb_socket.auto_reconnect
をtrue
にしてください。
設定の該当項目を変更したうえで、エージェントを実行してください。
対戦状況によって大会運営サーバを停止している時間帯があるため、接続エラー([Errno 61] Connection refused
)が発生し、自動で再接続を繰り返す可能性があります。
url
: ゲームサーバのURLです。ローカル内のゲームサーバに接続する場合はデフォルト値で問題ありません。
token
: ゲームサーバに接続するためのトークンです。大会運営から提供されるトークンを設定してください。
auto_reconnect
: 対戦終了後に自動で再接続するかどうかの設定です。
num
: 起動するエージェントの数です。自己対戦の場合はデフォルト値で問題ありません。
team
: エージェントのチーム名です。大会運営から提供されるチーム名を設定してください。
kill_on_timeout
: アクションタイムアウト時にリクエストの処理を中断するかどうかの設定です。
console_output
: コンソールにログを出力するかどうかの設定です。
file_output
: ファイルにログを出力するかどうかの設定です。
output_dir
: ログを保存するディレクトリのパスです。
level
: ログの出力レベルです。DEBUG
, INFO
, WARNING
, ERROR
, CRITICAL
のいずれかを設定してください。
name
, initialize
, daily_initialize
, whisper
, talk
, daily_finish
, divine
, guard
, vote
, attack
, finish
: 各リクエストのログを出力するかどうかの設定です。
すべての役職に共通する動作を定義するファイルです。
ゲームサーバから送信されるリクエストに対応するメソッドは下記の通りです。
メソッド名 | 変更推奨度 | 処理 |
---|---|---|
name |
非推奨 | 名前リクエストに対する応答を返す |
initialize |
中 | ゲーム開始リクエストに対する初期化処理を行う |
daily_initialize |
中 | 昼開始リクエストに対する処理を行う |
talk |
高 | トークリクエストに対する応答を返す |
daily_finish |
中 | 昼終了リクエストに対する処理を行う |
divine |
高 | 占いリクエストに対する応答を返す |
vote |
高 | 投票リクエストに対する応答を返す |
finish |
中 | ゲーム終了リクエストに対する処理を行う |
人狼の動作を定義するファイルです。
すべての役職に共通する動作とは別に以下のメソッドがあります。
メソッド名 | 変更推奨度 | 処理 |
---|---|---|
whisper |
高 | 囁きリクエストに対する応答を返す |
attack |
高 | 襲撃リクエストに対する応答を返す |
狂人の動作を定義するファイルです。
人狼の動作を定義するファイルです。
すべての役職に共通する動作とは別に以下のメソッドがあります。
メソッド名 | 変更推奨度 | 処理 |
---|---|---|
divine |
高 | 占いリクエストに対する応答を返す |
占いフェーズ以降の昼開始リクエスト内のinfo.divine_result
から取得できます。
詳細はjudge.pyを参照してください。
騎士の動作を定義するファイルです。
すべての役職に共通する動作とは別に以下のメソッドがあります。
メソッド名 | 変更推奨度 | 処理 |
---|---|---|
guard |
高 | 護衛リクエストに対する応答を返す |
村人の動作を定義するファイルです。
霊媒師の動作を定義するファイルです。
追放フェーズ以降の昼開始リクエスト内のinfo.medium_result
から取得できます。
詳細はjudge.pyを参照してください。