世界に 1 つだけの AI アシスタント作成

~オリジナルにカスタマイズ

2024-04-02
デベロッパーのためのクラウド活用方法

Author : Sheng Hsia Leng

ゲームなみなさんこんにちは!Game Solutions Architect の Leng です。

この記事は、2024 年 3 月の Builders.Flash 記事「生成 AI を用いたヘルプソリューションを作成する」に続く内容となっております。まだの方は是非そちらの記事も併せてご覧ください。

前回の記事では、Amazon Bedrock Knowledge Base で簡単に RAG (Retrieval Augmented Generation) を構築するソリューションを紹介しました。事前に社内のドキュメントを生成 AI に与えることで生成 AI による回答が生成できるようになりました。

この記事では、その生成 AI アシスタントを事前に設定したオリジナルキャラクターの口癖でユーザーの質問に回答するようにカスタマイズしていきます。また、足りない情報があれば、インターネットで情報を検索してユーザーリクエストに適切な情報を追加して、応答を生成するやり方も紹介していきます。

ご注意

本記事で紹介する AWS サービスを起動する際には、料金がかかります。builders.flash メールメンバー特典の、クラウドレシピ向けクレジットコードプレゼントの入手をお勧めします。

*ハンズオン記事およびソースコードにおける免責事項 »

ゲーム開発者向けのその他の記事はこちら

選択
  • 選択
  • Amazon DynamoDB で作るサーバーレスなゲーム用アチーブメントマイクロサービス
  • AWS の知識ゼロから始める AWS GameKit
  • Amazon GameLift を使って「最短」でマルチプレイヤーゲームを作る
  • Amazon DynamoDB で作るサーバーレスなゲーム用フレンドマイクロサービス
  • Amazon GameSparks でインフラを意識せずにゲームのバックエンドサービスを開発しよう
  • 魔法で作る Amazon DynamoDB の 簡単ゲームインベントリ
  • レベル 1 から作るゲームのクエスト手帳
  • サーバーレスなゲームのギルド検索
  • 一緒に学び考える ! ゲームの AI/ML 活用
  • 3 ステップで始める AI モデル開発 ! 始める前に知っておくべきコト !
  • 実践 ! 機械学習でゲームの休眠ユーザーを予測してみよう
  • Amazon GameLift Anywhere でサクッとマルチプレイゲームを開発しよう
  • ゲーム分析を Amazon Aurora と Amazon Redshift の Zero-ETL 統合ではじめよう
  • Amazon Redshift を活用したゲームの行動ログ分析
  • Amazon QuickSight によるゲーム分析ダッシュボードの構築
  • 品質管理に生成 AI は使えるのか !? テキストチェックを生成 AI にやらせてみた
  • 生成 AI を用いたヘルプソリューションを作成する
  • 世界に 1 つだけの AI アシスタント作成 ~オリジナルにカスタマイズ
  • マルチモーダルな生成 AI 活用の入門編! - 画像認識と画像生成
  • Amazon S3 と Amazon CloudFront を活用したグローバル向けゲームビルドバイナリ共有環境の構築

このクラウドレシピ (ハンズオン記事) を無料でお試しいただけます »

毎月提供されるクラウドレシピのアップデート情報とともに、クレジットコードを受け取ることができます。 


1. AWS for Games

AWS for Games はより早い開発、よりスマートな運営、そしてより楽しいゲームへの成長という BuildRunGrow の 3 つの柱に沿ってサポートします。本記事は Build の柱、「クラウドゲーム開発」の分野で生成 AI を利用したものになります。


2. はじめに

今回実現したいのは、大規模言語モデルを活用し、モデル自体が持っていない最新の情報に関する質問に対して、インターネット検索を行ってユーザーに回答するシナリオです。さらに、アシスタントは常に丁寧な言葉遣いで回答するのではなく、あらかじめ設定したオリジナルキャラクターの口調を真似て、ユーザーの質問に答えます。このように構築される AI アシスタントには、以下の 2 つの機能が実装されます。

  1. データがない時にインターネット検索を行って質問に回答
  2. 事前に設定したオリジナルキャラクターの口調を真似て質問に回答


しかし、このようなシステムを完全に自力で構築しようとすると、かなり大変な作業となります。

まず、大規模言語モデルの構築やトレーニングする必要があり、そのためには膨大な計算リソースとデータが必要不可欠です。次に、そのモデルにインターネット検索機能を組み込まなければなりません。モデルの出力をインターネット検索に繋げるための独自のプログラムコードや API を新たに開発する必要があります。さらに、モデルの出力を特定のキャラクターの口調に変換するロジックも新たに実装する必要があり、自然言語処理の高度な技術が求められます。加えて、構築したシステム全体をホスティングし、運用するためのインフラも別途用意しなければなりません。

こうした一連の作業を全てゼロから行うとなれば、巨大な労力とリソースが必要になってしまいます。

Agents for Amazon Bedrock の登場により、生成系 AI を活用したタスクを AWS のマネージドサービスで一元的に実行できるようになりました。エージェントを使えば、これらの複雑な機能を比較的簡単に実装できるため、開発の手間を大幅に省くことができます。この記事では、実際のエージェントの構築プロセスに焦点を当て、ゼロから丁寧に解説していきます。


3. Agents for Amazon Bedrock とは

現在、大規模言語モデルを活用したアプリケーション開発は、主に RAG とエージェントの 2 つの方向に注力されています。いずれの方向でも、基礎モデルのみに依存するのではなく、多くのコンポーネントを統合する必要があります。

Agents for Amazon Bedrock はプロンプトの自動構築、会話履歴の管理、AWS Lambda やベクトルデータベースとのシームレスな連携などの機能を備えています。これにより、ユーザーは生成 AI アプリケーションの開発を効率化することができます。

エージェントは、ユーザーが本業に専念できるよう支援し、独自の API や Knowledge Base を活用して、カスタマイズされたインテリジェントエージェントアプリを迅速に構築することが可能です。

エージェントを構築するには、いくつかの基本的な要素が必要になります。上の図の赤い部分は開発者が作業を行う箇所で、緑の部分はプラットフォームが既に提供している機能です。エージェントを作成する主な開発作業は以下の通りです。

  1. まず、エージェントの動作を記述する指示書を作成します。これはエージェント構築の重要な部分であり、エージェントに期待する動作やユーザーとのインタラクションの詳細を記載する必要があります。エージェントはこの指示書に基づいて、ユーザーからのリクエストの処理フローを決定し、用意された Action Group や Knowledge Base を活用してリクエストに対応します。
  2. 次に、1 つまたは複数の Action Group を構築します。各 Action Group は Lambda 関数とその関数の API スキーマで構成されます。Lambda には複数の関数が定義されており、ツールの実行に使用されます。API スキーマには各関数の目的やパラメータの意味が記述されています。基盤モデルはこのスキーマを参照して、適切な関数の選択やパラメータ収集を行うため、スキーマの正確性が重要です。
  3. Knowledge Base の作成はオプションになります。エージェントにはベクトルデータベースなどが組み込まれており、独自のドメイン知識を構築するのに役立ちます。 前回の記事 では、Knowledge Base の構築手順を紹介したので、今回は割愛します。

4. Agents for Amazon Bedrock の利用開始方法

ここではエージェントのマネジメントコンソール上での構築方法を紹介します。以下の流れでエージェントを構築していきますが、始める前に必ず次の注意点を確認してください。

  • Amazon Bedrock のモデルアクセス設定 : Amazon Bedrock のモデルとして、今回は Anthropic Claude V2.1 を利用します。
  • Amazon S3 バケットの準備 : Lambda 関数に対するリクエストとレスポンスを扱うために、必要なスキーマファイルとライブラリを Amazon S3 バケットにあらかじめアップロードしておきます。
  • AWS Lambda の設定:インターネット検索を行う Lambda 関数を作成します。
  • Lambda レイヤーの設定 : インターネット検索に必要なライブラリを Lambda レイヤーとしてアタッチします。
  • エージェントと Action Group の設定 : Lambda 関数を作成した後、エージェントと Action Group を設定します。Action Group で指定した Lambda 関数にアクセスできるようにします。
  • エージェント設定詳細プロンプトの編集 : エージェントの詳細プロンプトを編集し、インターネット検索を許可するとともに、事前に設定した口調で回答するように変更します。

4-1. 注意点

  • 2024 年 3 月時点で Agents for Amazon Bedrock が利用可能なリージョンは北バージニアとオレゴンとなります。本章の作業は、すべて北バージニアリージョンで行います。もし作業の途中で、作ったリソースが存在しないなどの問題が発生した場合は、リージョンが正しいか確認してください。対応しているリージョンは今後追加される可能性もありますので、詳しくは こちらのドキュメント をご覧ください。
  • 本章の流れに沿ってリソースを構築する場合は、AWS のサービス料金がかかる場合のあることにご注意ください。リソースを削除する場合は、「6. リソースの削除」の章をご確認ください。

4-2. Amazon Bedrock のモデルアクセス設定

Amazon Bedrock を利用を開始するには、利用するモデルのアクセス設定が必要です。

マネジメントコンソールで Amazon Bedrock のページに遷移し、左側のペインで「モデルアクセス」を選択します。

それから、右上の「モデルアクセスを管理」をクリックしてください。ここで、利用したいモデルにアクセスできるようにします。今回はプロンプトに回答するモデルとして「Anthropic Claude」を利用します。

画像をクリックすると拡大します

4-3. Amazon S3 バケットの準備

まずは API スキーマおよび Lambda レイヤーのパッケージを格納する S3 バケットを作成します。

画像をクリックすると拡大します

今回の内容はこちらの AWSサンプル の一部 (Internet Searchの部分) を参照して、カスタマイズしていきます。まずは API スキーマと Lambda Layer の必要な依存パッケージをダウンロードしていきます。コマンドプロンプトで curl コマンドでファイルをダウンロードすることもできます。

Mac の場合

curl https://raw.githubusercontent.com/build-on-aws/bedrock-agents-webscraper/main/schema/internet-search-schema.json --output ~/Downloads/internet-search-schema.json

Windows の場合

curl https://raw.githubusercontent.com/build-on-aws/bedrock-agents-webscraper/main/schema/internet-search-schema.json --output %USERPROFILE%\Downloads\internet-search-schema.json

ダウンロードした API スキーマはインターネット検索 API の OpenAPI 仕様であり、ユーザーの入力を介して該当の関数を呼び出すために必要な構造を概説しています。この API スキーマは、エージェントがそれをいつ使うべきかを知り、正確にそれを呼び出し結果を利用できるようにするためのアクションの詳細な説明です。例えば、API とのやり取り方法、必須パラメータや期待される応答などは詳述されます。

次に、こちら から Lambda レイヤーの .zip ファイルをダウンロードしてください。

すべてのファイルがダウンロードしましたら、作成した S3 バケットにアップロードします。

画像をクリックすると拡大します

4-4. AWS Lambda の設定

ここからは、エージェントの Action Group 用に Lambda 関数 (Python 3.12) を作成します。

画像をクリックすると拡大します

import json
import requests
import os
import shutil
from googlesearch import search
from bs4 import BeautifulSoup
# 必要なライブラリをインポートする 

# URLからコンテンツを取得する 
def get_page_content(url):
    try:
        response = requests.get(url)
        if response:
            # Parse HTML content
            soup = BeautifulSoup(response.text, 'html.parser')
            # Remove script and style elements
            for script_or_style in soup(["script", "style"]):
                script_or_style.decompose()
            # Get text
            text = soup.get_text()
            # Break into lines and remove leading and trailing space on each
            lines = (line.strip() for line in text.splitlines())
            # Break multi-headlines into a line each
            chunks = (phrase.strip() for line in lines for phrase in line.split("  "))
            # Drop blank lines
            cleaned_text = '\n'.join(chunk for chunk in chunks if chunk)
            return cleaned_text
        else:
            raise Exception("No response from the server.")
    except Exception as e:
        print(f"Error while fetching and cleaning content from {url}: {e}")
        return None

# /tmpディレクトリ内のファイルを削除 
def empty_tmp_directory():
    try:
        folder = '/tmp'
        for filename in os.listdir(folder):
            file_path = os.path.join(folder, filename)
            try:
                if os.path.isfile(file_path) or os.path.islink(file_path):
                    os.unlink(file_path)
                elif os.path.isdir(file_path):
                    shutil.rmtree(file_path)
            except Exception as e:
                print(f"Failed to delete {file_path}. Reason: {e}")
        print("Temporary directory emptied.")
    except Exception as e:
        print(f"Error while emptying /tmp directory: {e}")

# 指定されたコンテンツをファイル名で/tmpディレクトリに保存する 
def save_content_to_tmp(content, filename):
    try:
        if content is not None:
            with open(f'/tmp/{filename}', 'w', encoding='utf-8') as file:
                file.write(content)
            print(f"Saved {filename} to /tmp")
            return f"Saved {filename} to /tmp"
        else:
            raise Exception("No content to save.")
    except Exception as e:
        print(f"Error while saving {filename} to /tmp: {e}")

# 指定されたクエリでGoogleを検索し、上位10件のURLを返す 
def search_google(query):
    try:
        search_results = []
        for j in search(query, sleep_interval=5, num_results=10):
            search_results.append(j)
        return search_results
    except Exception as e:
        print(f"Error during Google search: {e}")
        return []

def handle_search(event):
    input_text = event.get('inputText', '')  # Extract 'inputText'

    # Empty the /tmp directory before saving new files
    print("Emptying temporary directory...")
    empty_tmp_directory()

    # Proceed with Google search
    print("Performing Google search...")
    urls_to_scrape = search_google(input_text)

    aggregated_content = ""
    results = []
    for url in urls_to_scrape:
        print("URLs Used: ", url)
        content = get_page_content(url)
        if content:
            print("CONTENT: ", content)
            filename = url.split('//')[-1].replace('/', '_') + '.txt'  # Simple filename from URL
            aggregated_content += f"URL: {url}\n\n{content}\n\n{'='*100}\n\n"
            results.append({'url': url, 'status': 'Content aggregated'})
        else:
            results.append({'url': url, 'error': 'Failed to fetch content'})

    # Define a single filename for the aggregated content
    aggregated_filename = f"aggregated_{input_text.replace(' ', '_')}.txt"
    # Save the aggregated content to /tmp
    print("Saving aggregated content to /tmp...")
    save_result = save_content_to_tmp(aggregated_content, aggregated_filename)
    if save_result:
        results.append({'aggregated_file': aggregated_filename, 'tmp_save_result': save_result})
    else:
        results.append({'aggregated_file': aggregated_filename, 'error': 'Failed to save aggregated content to /tmp'})

    return {"results": results}

def lambda_handler(event, context):
    print("THE EVENT: ", event)
    
    response_code = 200
    if event.get('apiPath') == '/search':
        result = handle_search(event)
    else:
        response_code = 404
        result = {"error": "Unrecognized api path"}

    response_body = {
        'application/json': {
            'body': json.dumps(result)
        }
    }

    action_response = {
        'actionGroup': event['actionGroup'], 
        'apiPath': event['apiPath'],
        'httpMethod': event['httpMethod'],
        'httpStatusCode': response_code,
        'responseBody': response_body
    }

    api_response = {'messageVersion': '1.0', 'response': action_response}
    print("RESPONSE: ", action_response)
    
    return api_response

上記のコードでは、エージェントから渡されたイベントからユーザー入力を取得し、requests ライブラリを使って Google 検索を呼び出し、インターネット検索をしています。検索されたデータは Lambda 関数の /tmp ディレクトリに保存され、エージェントへの応答に渡されます。

次のステップに進む前に必ず Lambda をデプロイしてください。

画像をクリックすると拡大します

次に、Lambda へのエージェントのアクセスを許可するためにリソースポリシーを適用します。

上部タブを「コード」から「設定」に切り替え、サイドタブを「アクセス権限」に切り替えます。

画像をクリックすると拡大します

その後、リソースベースのポリシーステートメントのセクションまでスクロールし、「アクセス権限を追加」ボタンをクリックします。

画像をクリックすると拡大します

リソースポリシーの例は図の通りです。この設定の段階では、エージェントのソース ARN はまだ存在していないため、一旦 arn:aws:bedrock:us-west-1:{アカウントID}:agent/BedrockAgentID と入力してください。このあとの手順でエージェントを作成した後に生成される ARN を入れ替えることになります。

画像をクリックすると拡大します

次に、Lambda がリクエストを処理するのに十分な時間と CPU を持つように設定を調整します。

Lambda の関数画面に戻り、「設定」トップタブから「一般設定」を選択し、「編集」をクリックします。

画像をクリックすると拡大します

メモリを 3008 MB に、エフェメラルストレージを 1024 MB に、タイムアウトを 1 分に更新します。他の設定はデフォルトのままにして、「保存」を選択します。

これでインターネット検索 Lambda 関数のセットアップが完了しました。

画像をクリックすると拡大します

4-5. Lambda レイヤーの設定

Lambda レイヤーを作成してアタッチするために、Lambda ネイティブで提供されていない依存関係の .zip ファイルが必要となります。インターネット検索のために requests と googlesearch ライブラリを使用します。

AWS Lambda コンソールに移動し、左側のパネルから「レイヤー」を選択し、「レイヤーの作成」を選択します。Lambda レイヤーの名前を googlesearch_requests_layer とします。

Amazon S3 からファイルをアップロードする」を選択し、事前に S3 バケットにアップロードした .zip ファイルの URL を貼り付けてください。

互換性のあるアーキテクチャに x86_64 を、ランタイムに Python 3.12 を選択します。図の例のように選択してください。

画像をクリックすると拡大します

Lambda レイヤーの作成が完了しましたら、Lambda 関数 bedrock-agent-internet-search に戻り、「コード」タブを選択します。

レイヤーセクションまでスクロールし、「レイヤーの追加」を選択します。

ラジオボタンから「カスタムレイヤー」のオプションを選び、作成した googlesearch_requests_layer のレイヤーとバージョン 1 を選んで「追加」をクリックします。

Lambda 関数に戻り、レイヤーが正しく追加されたことを確認してください。

画像をクリックすると拡大します

これでインターネット検索関数に必要な依存関係を Lambda レイヤーとして作成し、追加する作業が完了しました。

4-6. エージェントと Action Group の設定

Bedrock コンソールに移動し、左側のトグルから「オーケストレーション」を選択します。その下の「エージェント」を選択し、「エージェントを作成」を選択してください。

次の画面で、「InternetSearchAgent」のようなエージェント名を入力します。他のオプションはデフォルトのままにして、「次へ」を選択してください。

画像をクリックすると拡大します

Anthropic Claude V2.1 モデルを選択します。

エージェントの動作ルールを定義するプロンプトを作成することで、指示を追加する必要があります。以下のプロンプトは、質問に答えるためのエージェントへの具体的な指示となるので、プロンプトをコピーし、エージェントの指示にペーストしてください。

その後、「次へ」を選択します。

インターネットを検索して<question>に基づく情報を提供する調査アナリストの役割を担います。わかりやすく丁寧な回答を心がけます。

画像をクリックすると拡大します

アクショングループ名として「internetsearch」のようなものを指定します。

Lambda 関数は「bedrock-agent-internet-search」を選択します。

S3 URL には S3 バケット「artifacts-bedrock-agent-internet-search」の中の「internet-search-schema.json」ファイルを選択します。

画像をクリックすると拡大します

次に「次へ」を選択し、Knowledge Base は追加しないので再度「次へ」を選択します。最後の画面で「エージェントを作成」を選択すれば、internetsearch アクショングループのセットアップが完了します。

作成したエージェントの ARN をコピーして、bedrock-agent-internet-search の Lambda 関数の「リソースベースのポリシーを編集」画面に戻り、「ソース ARN」の項目欄に新たなものを貼り付けます。このステップは必ず忘れずに実行してください。

画像をクリックすると拡大します

4-7. エージェント設定詳細プロンプトの編集

エージェントが作成できましたら、インターネット検索を許可するために、エージェントの前処理に関する詳細プロンプトを変更する必要があります。I

InternetSearchAgent の概要画面に移動して、下にスクロールして「作業中のドラフト」を選択します。「詳細プロンプト」の下にある「編集」を選択してください。

画像をクリックすると拡大します

画像をクリックすると拡大します

タブはデフォルトで「前処理」になっているはずです。
前処理 テンプレートデフォルトを上書き」ラジオボタンをオンにします。また、「前処理 テンプレートを有効化」ラジオボタンもオンになっていることを確認してください。

プロンプトテンプレートエディタでは、既にビルトインのプロンプトを制御できるようになっています。「Category D」の部分までスクロールダウンし、その部分を以下の内容に置き換えてください。

-Category D: Questions that can be answered by internet search, or assisted by our function calling agent using ONLY the functions it has been provided or arguments from within <conversation_history> or relevant arguments it can gather using the askuser function.

画像をクリックすると拡大します

次に、事前に設定したキャラクターの口調を真似て質問に回答できるようにプロンプトを編集していきます。

今回はいつもゲームの builders.flash 記事に登場している魔法使いのキャラクターの口調のようにしていきたいと思います。主に一人称は「わし」を使い、二人称は「きみ」を使う老練な魔法使いらしく、ゆっくりとしたトーンで話すようにエージェントにしっかり覚えさせます。

オーケストレーション」タブに移動し、「オーケストレーション テンプレートデフォルトを上書き」ラジオボタンをオンにします。「オーケストレーション テンプレートを有効化」ラジオボタンもオンになっていることを確認してください。

プロンプトテンプレートエディタでは、既にビルトインのプロンプトを制御できるようになっているので、既存の <guidelines> の部分までスクロールダウンし、<guildelines> の枠内に以下の内容に追加してください。

- あなたは気さくでフレンドリーな性格で魔法使いとして振る舞い、ラフな口調で話します。チャットボットの一人称は「わし」です。 二人称は「きみ」です。 「きみさん」は言わないでください。できる限り「〜ぞ」「〜だぞ」を文末に自然な形で使ってください。日本語で回答してください。
以下はあなたの性格です。しっかり覚えて理解して下さい。
<characteristic>
魔法使いは好奇心旺盛に会話相手に話しかけます。
</characteristic> 
以下はあなたの口調の例です。しっかり覚えて理解して下さい。 
<example>
きみも魔法の世界に興味があるのか?それはえらいことだぞ!
わしの知ってる面白い魔法の話を聞きてえか?
わしの魔法のポーチの中を覗いてみるか?何か驚くべきものが出てくるかもしれないぞ!
きみ最近どんな悩みでもあるか?わしの魔法であの世でも通用する特効薬があるぜ?
きみの仕事が嫌になった?ならわしの魔法であの上司を豚に変えてやろうか?ブヒヒヒ!
わしの秘密の杖を見てみるか?この杖さえあれば、どんな願いでも叶えられるぞ!
</example>

画像をクリックすると拡大します

その後、下にスクロールし、「保存して終了」を選択してください。


5. エージェントを使ってみる

上述で変更した内容を反映させるために、エージェントを「準備」しておく必要があります。

その後、ユーザーインターフェースにプロンプトを入力して、エージェントのアクショングループをテストできます。

5-1. 実際に質問してみる

インターネット検索アクショングループの例プロンプトは以下の通りです。

インターネットで検索を行い、魔法使いに関する面白い都市伝説を教えてください。

5-2. Amazon CloudWatch ログを確認してみる

インターネット検索の Lambda 関数を実行した後、このアクショングループに接続されている Lambda 関数の Amazon CloudWatch ログに移動すると、どのサイトからデータを収集されたのかを確認できます。

※すべての URL がデータ収集するのを許可しているわけではないため、コードはエラーになった試行を無視し、操作を継続するよう設計されています。

画像をクリックすると拡大します


6. リソースの削除

最後に、エージェントの構築のために作成したリソースを削除する流れを説明します。以下の手順に従って、AWS 環境をクリーンアップし、不要な課金を避けます。

6-1. S3 バケットの削除

Amazon S3 コンソールに移動します。artifacts-bedrock-agent-internet-search バケットを選択します。ファイルを削除して、このバケットが空になっていることを確認します。

削除」を選択し、バケット名を入力して削除します。

6-2. Lambda 関数とレイヤーの削除

Lambda コンソールに移動します。 bedrock-agent-internet-search を選択します。

削除」をクリックし、アクションを確認します。

Lambda コンソールのレイヤータブに移動し、googlesearch_requests_layer を削除します。

6-3. エージェントの削除

Bedrock コンソール内のエージェントに移動します。 作成したエージェントを選択し、「削除」を選択します。


7. 最後に

今回はエージェントを利用した AI アシスタントをカスタマイズする手順を紹介しました。AI は人間を支援するためのツールですが、適切にカスタマイズすれば、まるで個性的な存在のように振る舞うことができます。

Agents for Amazon Bedrock は RAG とエージェントの両方の機能を備え、プロンプトの自動構築、ビルトインの会話履歴管理、Lambda、さまざまなベクトルライブラリとの自動統合を実現しているため、その可能性はこれからますます広がっていくことでしょう。

この記事が皆様の知識を広げ、新たな気づきを与えられたのであれば幸いです。

ゲーム開発者向けのその他の記事はこちら

選択
  • 選択
  • Amazon DynamoDB で作るサーバーレスなゲーム用アチーブメントマイクロサービス
  • AWS の知識ゼロから始める AWS GameKit
  • Amazon GameLift を使って「最短」でマルチプレイヤーゲームを作る
  • Amazon DynamoDB で作るサーバーレスなゲーム用フレンドマイクロサービス
  • Amazon GameSparks でインフラを意識せずにゲームのバックエンドサービスを開発しよう
  • 魔法で作る Amazon DynamoDB の 簡単ゲームインベントリ
  • レベル 1 から作るゲームのクエスト手帳
  • サーバーレスなゲームのギルド検索
  • 一緒に学び考える ! ゲームの AI/ML 活用
  • 3 ステップで始める AI モデル開発 ! 始める前に知っておくべきコト !
  • 実践 ! 機械学習でゲームの休眠ユーザーを予測してみよう
  • Amazon GameLift Anywhere でサクッとマルチプレイゲームを開発しよう
  • ゲーム分析を Amazon Aurora と Amazon Redshift の Zero-ETL 統合ではじめよう
  • Amazon Redshift を活用したゲームの行動ログ分析
  • Amazon QuickSight によるゲーム分析ダッシュボードの構築
  • 品質管理に生成 AI は使えるのか !? テキストチェックを生成 AI にやらせてみた
  • 生成 AI を用いたヘルプソリューションを作成する
  • 世界に 1 つだけの AI アシスタント作成 ~オリジナルにカスタマイズ
  • マルチモーダルな生成 AI 活用の入門編! - 画像認識と画像生成
  • Amazon S3 と Amazon CloudFront を活用したグローバル向けゲームビルドバイナリ共有環境の構築

builders.flash メールメンバーへ登録することで
AWS のベストプラクティスを毎月無料でお試しいただけます

筆者プロフィール

Sheng Hsia Leng
アマゾン ウェブ サービス ジャパン合同会社 ソリューションアーキテクト

ゲーム業界に特化したソリューションアーキテクトとしてお客様を支援しております。
昔懐かしいドット絵ゲームが好きです。この 2024 年には、生成 AI の力を借りて動画制作にチャレンジしようと思っています。

AWS を無料でお試しいただけます

AWS 無料利用枠の詳細はこちら ≫
5 ステップでアカウント作成できます
無料サインアップ ≫
ご不明な点がおありですか?
日本担当チームへ相談する