0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ゲームの好みを分析するレコメンドAIエージェントをプログラミング無しで作る方法

Posted at

はじめに

窓の外では梅雨の雨が降り続いている。コーヒーを片手に、私はまたしてもターミナルと向き合っていた。
(※今は梅雨でもないし、雨も降っていない。)

世の中はあっという間にAIエージェントを求める声で溢れていて、私もその流れに乗っているが、やっぱりどんなに生成AIで楽になったと言っても開発は手間がかかる。
私はAWSが好きなので、StrandsやAgentCoreみたいな便利な機能には感謝の念しかないけど、それでも手間に感じることは多い。

開発経験が浅いので、Pythonといえどデバッグには時間がかかってしまうし、規模が膨らむほど書いてある内容もわからなくなっていくからだ…。さらに、AIエージェントに必要なツールは、それはそれで用意が必要になる(今回のポイントであるデータストアも然り)

前置きが長くなったが、この記事で言いたいことはAIエージェントの利用体験をテストしたり、個人で利用するだけなら、そんなにリッチなものはいらないよねって話 だ。

脱線するパートが多いので、まとめだけ先に書いておきます。

何をやったか

  • 外部データストアが必要なAIエージェントをKiro、mdファイル、TavilyのMCPだけで作った。プログラムはゼロ。
  • プレイしたゲームの情報を伝えると、その統計情報や特徴をもとにおすすめのゲームを検索してきてくれる(詳しくはgitのREADMEをご覧ください。)

どうだったか

  • 全編自然言語なので、レビューが超楽チン
  • おかげで高速に機能追加・変更ができたので、求めているAIエージェントの仕様を決めやすかった

出来上がった成果物はこちらです。
https://github.com/jucco1212/game-recommender

それほど大したことないので、上のリポジトリを眺めてもらって、あと下の方のスクショの一部でも見てもらえれば十分です。
あと注意書きにもありますが、テスト用に入れた私のプレイ履歴とかがそのまんま入ってます、サンプルがあった方がイメージしやすいと思うので。ゲームの趣味が近い人がいたら友達になって欲しいね。

取り組み始めるまで

すべては、バルダーズ・ゲート3から始まった。

黄金のレガシーの零式もいよいよ最終章となったが、すでに固定を脱退しているため、意外とやることがなくなり、暇を持て余し始めた頃。私は新しいゲームを求め、GOTYも受賞しているバルダーズ・ゲート3を買ってみることにした。

しかし残念なことに、このゲームは全然私にあってなくて、10時間もしないうちに匙を投げてしまった。(もちろん面白い人には面白いんだなーと思った。小並感。)

近年はExpedition 33やHades II、メタファーといった名作との出会いに恵まれ、私は世間的な評価が絶対的だと誤解していたようだ。

そこで私は、本当に私にマッチするゲームをおすすめしてくれる、私のためのコンシェルジュが必要だと考え、AIエージェントを作ることに決めた。この仕組みは、うまくいけば小説や映画、漫画などのエンターテイメントにも応用できる可能性もあるしね。
当然、世の中のWebサイトには、過去のゲーム作品をジャンルで絞ったりキーワード検索したりなんていくらでもあるけど、自分の好みを自分で分析するのって意外と難しいし、「このゲームとこのゲームは、こんな共通点があるよ」っていう検索は少ない気がするから、AIが教えてくれたら嬉しいよね。

開発の流れ

エージェントをどこにデプロイするにしても、まずはStrandsで書いてローカルで動かしてみるか。
あと私の好みを把握・分析するためには私のプレイ体験などの情報を蓄積・分析する必要があるので、この仕組にはデータストアが必要かな。

——データベース。その言葉を聞くだけで、私の指は止まる。
(※データベース:古事記にも記されたデータ永続化のカラテである)

「データベース......」私は呟いた。額に汗が滲む。

「イヤーッ!」「グワーッ!」脳内でPostgreSQLとMySQLが戦っている。どちらも面倒くさそうだ。私のやる気がサヨナラしかけた、その時。

閃いた。別にテキストでいいじゃん。
というか別に自分しか使わないんだから、インターフェースもKiroのチャットだけでいいじゃん。

早速私は、KiroのSPECモードで以下のプロンプトを与えた。

私がプレイしたテレビゲームの履歴とその評価をもとに、次にオススメなゲームをレコメンドする仕組みを構築したいと考えています。
プログラムやデータベースなどは一切使用せず、あなたの思考能力とコンテキストファイルのみでこの仕組みを実現したいです。つまり、常にあなたとのチャットをインターフェースとした仕組みにします。エントリーポイントはprompt.mdとし、ここにあなたのミッションを記録してください。

## 想定するシナリオ例

### (1)プレイしたゲームを登録する

1. 私があなたにゲームのプレイ履歴登録をリクエストする。
2. あなたはprompt.mdを読み込み、あなたの役割を理解する。
3. あなたは登録に必要な情報をチャットで伝えるように要求する。または、あなたが指定したファイルに追記を行います。(ファイル追記の方が私の意図を反映しやすいので、おすすめです。)
4. 私はチャットで回答を提示する。
5. あなたはプレイ履歴を記録するhistory.mdに登録する。

### (2)推奨するゲームを検索する

1. 私があなたにゲームのレコメンドをリクエストする。
2. あなたはprompt.mdを読み込み、あなたの役割を理解する。
3. あなたはhistory.mdを分析し、まだプレイしていないゲームを検索、私に推薦します。
4. あなたが推奨したゲームの中には、私がすでにプレイしたゲームである可能性があります。その場合は登録フローに遷移してください。

## 注意点

* あなたは新たなセッションのたびに過去の経緯や私に関する情報がリセットされます。私の嗜好を長期的にトレースできるように、積極的にmdファイルを作成することで、あなたが収集した情報を永続化してください。ファイルごとの役割、更新の頻度、目的も記録し、無意味なファイルが無駄に増えないように心がけなさい。
* history.mdはただの例です。今後の検索性やコンテキストの効率化のため、適切に記録するファイルを分割する設計にしなさい。(例:ジャンルごとのプレイ本数を記録したmdファイルは別が良い、など。)
* あなたは私の嗜好を分析する過程で、私の主観的な意見だけではなく、客観的な情報も参照する必要があります。思いもよらない発想が、私に新たなゲーム体験をもたらします。Web検索も積極的に駆使しなさい。
* 私の属性は日本人です。ゲームの好みも一般的な日本人に近い傾向があると考えてください。
* 私が保持しているプレイ環境なども重要な情報です。(例:PS5を所持している、など。)私の属性情報も重要なので、記録できるようにしてください。
* 可能であればガベージコレクションに関する機能も欲しいです。大元となるprompt.mdを点検し、無駄な指示や肥大化した履歴情報などをリフレッシュする機構が長期的には必要になる可能性があります。

私のリクエストは以上ですが、あなたの提案を積極的に採用する準備があります。私の体験を第一に考え、よりよいレコメンドシステムを提案して下さい。

ところどころマキマ節なのは最近チェンソーマンを見たからで、特に意味はない。
このプロンプトだけでtask実行まで問題なく実行できました。開発とか言ってもこれだけ。

少し呆気なさすぎるので、私がエージェントに文句を言いながらシステムを改善していった要素をご紹介しよう。

  • 機能追加を指示するだけなのに、なぜか顔色を伺う私
    image.png

  • セッションが変わるたびに冷たい対応に文句を言う私(このあたりで無機質さに寂しさを覚えてキャラを設定している)
    image.png
    (中略)
    image.png

使ってみよう

すごい、この仕組みは思った以上に優秀なレコメンドをしてくれるぞ、私は天才か。

メタスコアだとか一般的な評価だけでゲームを選んでいたけど、実は私の好みにあったゲームはランキング上位以外にもたくさんあることがわかった。あと私は意外とターン制バトルが好きらしいとか、ボーカル入り戦闘曲が好きとか。言われてみればそうかも!

例1. 普通に聞いてみる

image.png
(中略)
image.png
(中略)
image.png

→後半は単純なWeb検索+推論だけど、私の好みを分かってくれているので嬉しい。

例2. 時期を指定してみる

image.png

→やはり私の好みがいい感じに反映されている。(十三機兵防衛圏はここまでのテストで何回も出てきたので積みゲーとした。)

例3. ハードを絞ってみる

image.png

→ Switch 2専用だとやりたいゲームがなかったけど(なぜ買った)、フロムの新作は確かに楽しみ。

例4. プレイ経験のないジャンルを指定してみる

image.png
(中略)
image.png

→ 図らずも画面酔い対策が可能であることを知り、俄然サイバーパンクをやってみたくなる(エッジランナーズ最高でしたね。)

まとめ

この手法のよかったこと

「スゴイ!」私は勝利の奇声を上げた。データベースは不要だった。面倒くささは爆発四散した。

  • mdファイルだけなんでKiroの実装が何の問題もなく終わった
  • 実装後の改修が早くて、当たり前だがここでもバグ的な心配はなかった
  • 機能の柔軟性が高い。ルールではなくprofile情報としてアップデート可能にしてくれ(静的な定義を動的にして)、も問題ない
  • 機能追加は実装を気にせず気軽に即リクエストが可能で、実際に積みゲー機能や応答キャラの設定、隠れた好み推論機能も楽チンだった
  • Steeringファイルがあれば当然だが初期プロンプトもいらんのでちゃんとエージェント的に振る舞ってくれる

一番は機能の変更がとても柔軟だと思ったとこ。これでデータ構造や扱い方が決まれば、本番化に向けてどんなストアがいいのかを判断する材料になると思う。

イマイチなとこ

  • 当たり前だがインターフェースがKiroだけ。Kiro以外ではそのままでは使えない
  • 当然複数人でも利用できない
  • 視認性が悪い(ので、htmlでまとめて可視化する仕組みも作ってもらうのはやった)

ではでは、早速おすすめしてもらったゲームを遊んできます。

窓の外を見ると、いつの間にか雨は止んでいた。
(※最初から降っていなかった。)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?