信オンAI-信長の野望Onlineに特化したAIを作るまでの開発記録

日記
日記

信長の野望Online専用のAIを作ろうと思った理由

信長の野望Onlineの情報は、公式サイト・Wiki・ブログ・SNSなどさまざまな場所に散らばっています。
そこで「ゲーム専用の質問AI」を作れば、プレイヤーが欲しい情報を即座に取得できる! という発想から、プロジェクトをスタートしました。

当初の構想はシンプルでした。
「信長の野望Online」に関する情報を集めて、AIで回答できるようにする」
プレイヤーが質問すると、信オンに関する正しい情報を提供するAIを作る

しかし、実際にやってみると想像以上に困難な壁が立ちはだかりました……!


プロジェクト開始 – データ収集の難しさ

AIに適切な回答をさせるためには、まず学習用のデータが必要です。
しかし、信オンの情報は一か所にまとまっておらず、以下のように分散しています。

🔹 公式サイトhttps://www.gamecity.ne.jp/nol/
🔹 Wikihttps://wiki.ohmynobu.net/nol/
🔹 【未実装】SNS(Xなどのタグ検索)
🔹 【未実装】過去のブログ(引退プレイヤーの考察など)

✅ ここで問題発生…

  • 公式サイトのスクレイピングが困難(JavaScriptレンダリング)
  • WikiがPukiWikiのため、URLが壊れる現象が発生
  • SNSやプレイヤーブログのデータをどう扱うか?

そこで wgetBeautifulSoup を駆使し、データをスクレイピングする仕組みを構築 しました。


スクレイピングエラーとの戦い

スクレイピングを始めると、次々と謎のエラーが発生…!

発生したエラーたち

XPathが正しく機能していません
phpQuery でデータを取得しようとしたら、取得結果が空
wget で PukiWiki のファイル名が 壊れる
MySQL へ保存しようとしたら、文字化け発生

✅ 試行錯誤の末、解決した方法

  • JavaScriptレンダリングが必要なページは Selenium を使う(ただし Chrome WebDriverエックスサーバー で使えない)
  • Wikiは wget--restrict-file-names=ascii オプションで取得
  • データは utf-8 に統一して保存
  • キャッシュシステムを導入し、毎回スクレイピングしない

AIへのデータ提供とPerplexity APIの導入

スクレイピングしたデータを MySQL に格納し、それをAIに学習させることで、質問に対して適切な回答を生成 できるようにしました。
最初は GPT-4 API を使おうとしましたが、検索結果が良好だった Perplexity API を採用 しました。

🚀 Perplexity API を導入した結果

信オンに特化した回答を返せるようになった!
スクレイピングしたデータを組み合わせて回答できるように!

しかし、ここでまた新たな問題が発生…!


Perplexity API のコストが爆増…!?

Perplexity API を使い始めたのは良いものの、利用料金が想像以上に高かった…。
(特に max_tokens=300 の設定では、大量にAPIコールをしてしまう)

そこで、コスト削減のための改修 に着手。

コスト削減のために行ったこと

  1. max_tokens300 → 150 に削減
    • トークン数を半分にし、無駄な応答を減らす
  2. temperature=0.7 → 0.3 に変更
    • AIのランダム性を下げ、無駄なトークン消費を抑える
  3. キャッシュシステムを導入
    • 過去の質問を MySQL に保存 し、同じ質問ならAPIを呼ばずにキャッシュから返す ようにした

コスト削減の効果

APIのリクエスト回数が約40%削減!
トークン使用量も50%以上カット!
キャッシュのおかげで、応答速度も向上!


ついに実用化!信長の野望Online専用AI

こうして、
スクレイピング + MySQL でデータを蓄積
Perplexity API を活用した質問応答AI
コスト削減のためのキャッシュシステム導入
という流れで、信長の野望Online専用の質問AIが完成!

しかし、まだ改善の余地はあります。

  • プレイヤーの質問ログを分析し、より的確な回答ができるよう改良
  • 定期的にデータを更新し、古い情報を自動で削除?
  • 他のゲームでも使えるようにカスタマイズ可能にする

検証

以下のどきんさんのノブオネアの出題をチャレンジさせてみました。

結果は、

  • 第1問 正解
  • 第2問 正解
  • 第3問 正解
  • 第4問 不正解
  • 第5問 正解
  • 第6問 正解
  • 第7問 正解

出題内容は、どきんさんの動画でご確認ください!


まとめ

このプロジェクトでは、
「ゲーム専用のAIを作る」というシンプルな目標が、想像以上に複雑なものだった」 ということを実感しました。

💡 今回の開発で得た教訓

  1. スクレイピングは想像以上に難しい(XPath, JavaScript対応, PukiWiki問題など)
  2. APIのコスト管理は超重要!(トークン最適化 & キャッシュ必須)
  3. エラーは絶対に発生する!(細かくログを取ることで対応しやすくなる)

このブログを読んでいる方も、もし「ゲーム専用のAIを作りたい」と思っているなら、
ぜひ 「エラーとの戦い」 を覚悟してください(笑)

🚀 次の目標

プレイヤー向けの「質問履歴&回答精度向上」システムを作る
データを定期更新し、最新のゲーム情報を提供し続ける

課題

検索をするのに数円のコストがかかるので、一度検討をしようと思います😱
オープンソースのPerplexityクローンがあるようなので、自宅でAIのシステムを構築しようかなどなど

以上、公開ができるようになりましたら、またご報告をさせて頂きます!

開発の経緯も簡単ですがこちらに公開してます。

メール通知
Notify of
guest
0 Comments
Inline Feedbacks
View all comments