SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

生成AIで自社サービスをパワーアップしよう! 「ChatGPT API」活用ガイド

チャットBotだけじゃない!ChatGPTを汎用自然言語処理エンジンとして利用する方法

生成AIで自社サービスをパワーアップしよう!「ChatGPT API」活用ガイド 第3回

  • X ポスト
  • このエントリーをはてなブックマークに追加

実装例② コンテンツのリアルタイム自動生成

 生成AIの一つに分類されているChatGPTは、会話を行う際に謂わば「返答内容を生成」しているわけですが、テキストで表現可能なデータならどんなものでも生成することができます。

 例として、ゲームのキャラクターデータを自動生成するプログラムについて考えてみましょう。Web版のChatGPTをそのようなアイデア出しのために使用した経験がある方もいると思います。しかし、AIによって生成されたアイデアをゲームに実装するまでには、多くの手間がかかることが予想されます。ChatGPT APIをシステムに統合すれば、ゲーム内でキャラクターデータを全自動でリアルタイムに生成して登場させる、といったことが可能になります。

 先ほどと同じようにFunction Callingによって実現することももちろん可能ですが、ここではJSONモードという別の機能を使ってデータを出力する方法をご紹介します。

プロンプトを作成する

 FunctionCallingでJSONデータを出力する際は、出力形式を専用フォーマットで明確に定義することができましたが、JSONモードではプロンプトの記述で出力形式を指定します。複雑な階層構造を持たないシンプルなデータであれば、こちらのやり方の方が少ないトークン数で済むことも多いはずです。

キャラクター生成プロンプト
# ChatGPTへの指示文
prompt_template = “""あなたは優秀なゲームクリエイターです。
以下の世界観と概要に基づいて敵モンスターのデータを水平思考で考案してください。

# 世界観
- 西洋風RPG
- 魔王討伐を目指し勇者たちが旅をする物語

# 概要
{overview}

# 出力形式
JSON

# 出力項目
- name: 名前(日本語)
- biography: 略歴(日本語)
- character: 性格(日本語, 箇条書き)
- appearance: 外見(日本語, 箇条書き)
- level: レベル(数値, 1-100)
- power: 攻撃力(数値, 1-255)
- defence: 防御力(数値, 1-255)
- magic: 魔力(数値, 1-255)
- speed: 素早さ(数値, 1-255)
- image_prompt: 画像生成プロンプト(英語)
"""

overview = "中盤で登場するボスモンスター"
prompt = prompt_template.format(overview=overview)

 JSONモードを使用する際は、結果をJSONで出力してほしいという旨を必ずプロンプトとしてAIに伝えてあげる必要があるという点にご注意ください。こちらの例では、「出力形式」という項目でJSONを出力するよう指定しています。

 プロンプトとして記述する内容は生成結果の質を大きく左右するため、結果を確認しながら最善の書き方を探すと良いでしょう。

APIを実行する

キャラクター生成実行
client = OpenAI()
response = client.chat.completions.create(
    model="gpt-3.5-turbo",
    messages=[{'role': 'system', 'content': prompt}],
    temperature=1,
    response_format={ "type": "json_object" }
)

 こちらで鍵となるパラメーターは以下です。

response_format

 このパラメーターに{ "type": "json_object" }を指定することで、JSONモードが有効になります。こちらを指定せずにプロンプトでJSONでの出力を指示すると、データの前後に前置きや補足説明が入ったりすることがあるのですが、JSONモードでは余計な文言は一切入らず、そのまま解析可能なJSONデータだけを直接取得できます。注意点として、JSONで出力するという旨をプロンプト内で指示せずにこちらを有効にしてしまうと、最大文字数に達するまで半角スペースを出力し続けるという動作をすることがあるようです。詳しくはドキュメントのresponse_formatの解説をご覧ください。

実行結果を確認する

生成結果を取得
# 生成結果を取得
response_message = response.choices[0].message
print(response_message.content)

 レスポンスオブジェクトから生成結果を取得する方法は、通常の会話を行う時と同じです。こちらを実行すると、以下のようなJSONデータが表示されます。

{
  "name": "グリムロック",
  "biography": "古代より封印されていた古の魔物。魔王の手先として数多の戦争に参加し、無数の勇者を葬り去ってきた暗黒の存在。",
  "character": [
    "残忍で冷酷な性格",
    "知性を持ち、計画的な戦術を練る"
  ],
  "appearance": [
    "巨大な骸骨のボディに、漆黒の鎧と赤い炎が蠢く"
  ],
  "level": 75,
  "power": 200,
  "defence": 180,
  "magic": 220,
  "speed": 150,
  "image_prompt": "An intimidating, ancient skeletal monster with dark armor and glowing red flames."
}

 指定したプロンプトに従ってデータが生成されています。JSONを解析すれば、これらのデータをゲーム内へ容易に展開できます。

 また、「image_prompt」の内容は画像生成AIでこのキャラクターを描画させるためのプロンプトを示しており、ChatGPTと同じくOpenAIが提供しているImage Generation APIを利用すると、ここからキャラクターのビジュアルも生成することができます。

生成したキャラクターのビジュアル
生成したキャラクターのビジュアル

 現在のところはこのような一枚絵の生成が比較的手軽に実装できる限度ですが、将来的には3Dモデルやモーションの自動生成もこれと同等の手軽さで利用できるようになる日もそう遠くないかもしれません。

 上記の例を実際のゲームシステムに組み込んで実用的な運用を行うためには、様々な観点で調整が必要になるでしょう。しかし、データのリアルタイム生成が理論上可能であることは分かっていただけたかと思います。従来の技術では実現できなかった新しい体験を創造することが可能になりつつあるという点で、今後の発展が楽しみな活用分野です。

次のページ
実装例③ 文章を適切なカテゴリに自動分類する

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
生成AIで自社サービスをパワーアップしよう! 「ChatGPT API」活用ガイド連載記事一覧

もっと読む

この記事の著者

株式会社ブリューアス AI-TEAM(カブシキガイシャブリューアス エーアイチーム)

 モバイルのアプリを中心にUI/UXデザインから開発保守まで、幅広い実績を持つ会社です。専門的な知識と豊富な開発経験を活かし、AIとサービスの統合を推進しています。 Brewus.inc

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/19020 2024/02/28 11:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング