🛡️

サイバーセキュリティ学習のチューターとしてGeminiを使ったAIエージェント「CASTOR」を自作した話。

に公開

はじめに

この分野は特に「Try Harder」という言葉が打ち出されがちです。
たしかに自ら粘り強く調査する力は不可欠ですが...
しかし、適切な指導者がいない独学者にとって、成功体験を積む機会や次に進むための一押しを得ることは、学びを継続する上で同じくらい重要だと考えます。

「安易に"答え"を見てしまうと実力がつかない。でも、ヒントがないと全く進めない…」
このジレンマを解消するために個人開発に挑戦してみました。

(今はGUIタイプにしてますがLinux上での使用を考慮してCLI対応もわりとすぐできます...)


CASTOR:思考を助けるAIチューターが欲しかった

https://github.com/forwardOne/CASTOR

CASTORは「正解」を教えるツールではないです。ユーザーの調査状況や得られた情報をもとに、
次に「考えられる可能性」や「試すべき一手」を提案してくれる、思考の「壁打ち相手」であり「チューター」です。
一般的な生成AIに漠然とした質問を投げても、もちろん多様なアプローチを返してくれます。
CASTORでは、そのレスポンスに「学習支援」という指向性を持たせ、かつユーザーが意図を明確に指示できるようにすることで、「AI任せ」ではない主体的な学習体験を実現できると考えました。

以下は本アプリの指向性が分かる対話例です。


このように、CASTORは選択肢となぜそれを選ぶべきかの簡単な理由を提示し、あなたの次の思考を促します。


起動方法

クリックで展開 詳しくはGithubを確認してください。
  1. リポジトリのクローン
git clone https://github.com/your-repo/castor.git
cd castor
  1. 環境変数の設定
  • プロジェクトルート (castor/) に .env ファイルを作成し、Google AI Studioから取得したAPIキーを設定します。
  • APIを無料枠で使用する場合、2.5-flashモデルの仕様を推奨します。
GEMINI_API_KEY="YOUR_API_KEY_HERE"
  1. バックエンドのセットアップと起動
# プロジェクトルートで実行
python -m venv backend/venv
# Windows
backend\venv\Scripts\activate
# macOS/Linux
source backend/venv/bin/activate
# 仮想環境がアクティブな状態で実行
pip install -r backend/requirements.txt
cd backend
uvicorn app.main:app --reload
  1. フロントエンドのセットアップと起動
cd frontend
npm install
npm run dev
  1. バッチファイルでの起動 (Windows向け)
    プロジェクトルートに配置されている start.bat を実行することで、バックエンドとフロントエンドを同時に起動できます。
    このスクリプトは、新しいウィンドウでバックエンドとフロントエンドをそれぞれ起動します。

設計思想

1. あえて「ローカル起動」にした理由

CASTORはWeb技術(FastAPI + React)で作られていますが、一般的なWebサービスのようにサーバーにデプロイする形式ではなく、あえてローカル環境で起動する形式にしています。

第一に、他のCLIツールと同じ感覚で使ってほしい。
学習者は日々、nmapgobusterといった多くのコマンドラインツールを駆使します。
CASTORもその一つとして、ターミナルからシェルスクリプトを叩いて起動する、という馴染み深い体験を提供したかった思いがあります。

第二に、アプリの挙動の観察に慣れるきっかけになってほしい。
環境によっては起動用のスクリプトを自分で少し書き換える必要があるかもしれません。
そしてユーザーとAIモデルとのやり取りはアプリ内のフォルダに蓄積されていきます。
これらは使用者がツールの中身を見るきっかけになり得ます。

2. 「チート」ではない、私自身が欲しかったもの

強調したいのは、CASTORは自動化ツールでも、チートツールでもないということです。

学習の本質は「答え」を知ることではなく、「答えにたどり着くプロセス」を学ぶことにあると考えています。
だからこそ、私自身が本当に欲しかったのは、思考をショートカットするツールではなく、試行錯誤のプロセスを共に歩んでくれるパートナーでした。

CASTORはあえて曖昧なヒントや一般的なアプローチを提示することがあります。
それは、「なぜこの手法を試すのか」「この結果から何が言えるのか」を考えてもらうためです。


CASTORを支える技術とAIの挙動設計について

CASTORは以下の技術スタックとAIの挙動を制御するための設計上の工夫によって成り立っています。

  • バックエンド: Python (FastAPI)
    • Pythonの豊富なライブラリを活用しつつ、高速なAPIを非同期で開発できるため。
  • フロントエンド: React (TypeScript)
    • 宣言的なUI記述と、shadcn/uiなどの豊富なコンポーネントライブラリを活用し、モダンでインタラクティブなチャット画面を効率的に構築したかったため。
  • AI: Google Gemini API
    • 高度な対話能力を持つGeminiを採用しました。しかし、ただAPIを呼び出すだけでは、CASTORが目指す「チューター」にはなってくれません。
      その振る舞いを実現するため、対話の裏側にはいくつかのこだわりを詰め込んでいます。

    • Googleアカウントがあれば無料枠のAPI発行が容易だというのも大きな理由です。
      SDKの互換性を利用すれば少ない工数でOpenAIのモデル用にチューニングも可能です。

    • プロンプトと生成パラメータの調整:
      CASTORの思考の核となるシステム指示(システムプロンプト)や、応答の多様性を決めるtemperatureといったパラメータは、まさに試行錯誤の連続でした。この繊細な調整作業には、迅速に結果を試せる Google AI Studio をフル活用し、「最も学習効果の高い応答とは何か」を探求しました。

    • グラウンディングによる文脈理解:
      ユーザーが提示するnmapのスキャン結果やツールの出力といった「一時情報」を、AIが対話の文脈として正確に捉えることが重要です。
      そのためにGeminiのグラウンディング(Grounding)機能を活用し、AIが的確なヒントを返せるように設計しています。Geminiの場合はGoogle検索ですね。

    • 対話に応じた柔軟な出力:
      AIの応答を常に固定のJSONスキーマで縛るのではなく、対話の流れに応じて出力形式を柔軟に切り替える設計を取り入れています。
      これにより、ある時は箇条書きで複数の選択肢を提示し、またある時は特定のTIPSを掘り下げて解説するなど、より自然で人間らしい対話を実現しています。


今後の展望

CASTORはまだ基本的な機能を備えた初期段階です。今後は、

  • 複数ステップにまたがる攻撃シナリオの文脈に沿った、より連続的な提案の強化
  • 学習進捗の記録や可視化機能
  • マルチモーダル対応(ただし、セキュリティという機微な情報が、意図せずモデル側のガードレールに抵触する可能性を考慮し、慎重に検討します)

などを追加出来ればいいですね。


おわりに

本記事では、一個人が感じた課題意識から生まれたAIエージェント「CASTOR」についてご紹介しました。

  • AIは私たちの学習能力を拡張してくれる強力なツールになり得ます。CASTORが、サイバーセキュリティという複雑で広大な分野の学習者にとって、羅針盤のような存在になれば嬉しいです。
  • Geminiの挙動の調整において意識すべき点やわざわざバックエンドを構築した理由については別の記事で深掘り出来ればいいなと思っています。

この経験を活かして、セキュリティ分野やAI活用に貢献できる機会を探しています。
ご意見ご質問お声掛けは媒体問わずお気軽にどうぞ。

Discussion