sugitora
AI面接システム - 初回リリース (Streamlit + Claude API)
6d1fe52
import argparse
import sys
from config import load_config
from csv_loader import load_questions
from interviewer import Interviewer
def parse_args() -> argparse.Namespace:
parser = argparse.ArgumentParser(
description="AI面接システム - 音声による自動面接・評価ツール"
)
parser.add_argument(
"--questions",
type=str,
default=None,
help="質問CSVファイルのパス (デフォルト: data/questions.csv)",
)
parser.add_argument(
"--output",
type=str,
default=None,
help="レポート出力ディレクトリ (デフォルト: output/)",
)
parser.add_argument(
"--dry-run",
action="store_true",
help="テキストモードで実行(マイク不要)",
)
parser.add_argument(
"--whisper-model",
type=str,
default=None,
choices=["tiny", "base", "small", "medium", "large"],
help="Whisperモデルサイズ (デフォルト: base)",
)
return parser.parse_args()
def main() -> int:
args = parse_args()
try:
config = load_config()
except ValueError as e:
print(f"設定エラー: {e}")
return 1
if args.questions:
config.questions_path = args.questions
if args.output:
config.output_dir = args.output
if args.whisper_model:
config.whisper_model = args.whisper_model
if args.dry_run:
config.dry_run = True
try:
questions = load_questions(config.questions_path)
print(f"質問ファイル読み込み完了: {len(questions)}問")
except (FileNotFoundError, ValueError) as e:
print(f"質問ファイルエラー: {e}")
return 1
print()
print("=" * 40)
print(" AI 面接システム")
print("=" * 40)
print(f" 質問数: {len(questions)}")
print(f" 合格ライン: {config.pass_threshold * 100:.0f}%")
print(f" モード: {'テキスト (dry-run)' if config.dry_run else '音声'}")
if not config.dry_run:
print(f" Whisperモデル: {config.whisper_model}")
print("=" * 40)
print()
interviewer = Interviewer(config, questions)
try:
interviewer.run()
except KeyboardInterrupt:
print("\n\n面接を中断しました。")
return 1
return 0
if __name__ == "__main__":
sys.exit(main())