Name:
interface
Value:
Amplify has re-imagined the way frontend developers build fullstack applications. Develop and deploy without the hassle.

Choose your framework/language

Gen1 DocsLegacy

Page updated Feb 20, 2025

AIのセットアップ

このガイドでは、Amplify AIキットの概要を説明します。これには、ConversationとGenerationルートを使用したAIバックエンドの定義、およびフロントエンドアプリケーションからそれらへの安全な接続が含まれます。

前提条件

開始する前に、以下が必要です:

また、ローカル開発用にセットアップされたAWSアカウントと、使用したいBedrockファウンデーションモデルへのアクセス権が必要です。Bedrockモデルへのアクセスは、Bedrockコンソールでリクエストすることによってリクエストできます。

大規模言語モデル(LLM)の推論実行にはコストがかかる可能性があります。Amazon Bedrockはサーバーレスサービスなので、使用した分のみお支払いいただきますが、生成AIアプリケーションの構築に関連するコストに注意してください。詳細はBedrockの価格設定を参照してください

Amplifyバックエンドの作成

プロジェクトディレクトリでcreate amplifyスクリプトを実行します:

Terminal
npm create amplify@latest

次に、Amplify sandboxを実行して、ローカルクラウドサンドボックスを開始します:

Terminal
npx ampx sandbox

これにより、amplifyフォルダに定義したクラウドリソースがプロビジョニングされ、更新が監視され、再デプロイされます。

AIバックエンドの構築

AIバックエンドを構築するには、Amplify Dataスキーマでai「ルート」を定義します。AIルートは、バックエンドのAI機能と対話するためのAPIエンドポイントのようなものです。現在、2つのタイプのルートがあります:

  • Conversation: 会話ルートはストリーミング、マルチターンAPIです。会話とメッセージは自動的にDynamoDBに保存されるため、ユーザーは会話を再開できます。これらの例には、チャットベースのAI体験や会話型UIがあります。
  • Generation: 単一の同期リクエスト-レスポンスAPI。生成ルートはAppSync クエリに過ぎません。例としては、画像の代替テキストの生成、非構造化入力からの構造化データの生成、要約などがあります。

サポートされているAIモデルのリストについては、サポートされているプロバイダーとモデルを参照してください。

AIルートを定義するには、amplify/data/resource.tsファイルを開き、スキーマでa.generation()およびa.conversation()を使用します。

amplify/data/resources.ts
import { a, defineData, type ClientSchema } from '@aws-amplify/backend';
const schema = a.schema({
// This will add a new conversation route to your Amplify Data backend.
chat: a.conversation({
aiModel: a.ai.model('Claude 3.5 Haiku'),
systemPrompt: 'You are a helpful assistant',
})
.authorization((allow) => allow.owner()),
// This adds a new generation route to your Amplify Data backend.
generateRecipe: a.generation({
aiModel: a.ai.model('Claude 3.5 Haiku'),
systemPrompt: 'You are a helpful assistant that generates recipes.',
})
.arguments({
description: a.string(),
})
.returns(
a.customType({
name: a.string(),
ingredients: a.string().array(),
instructions: a.string(),
})
)
.authorization((allow) => allow.authenticated()),
});

会話ルートは現在、オーナーベースの認可のみをサポートし、生成ルートはオーナーベース以外の認可(authenticatedguestgrouppublicApiKey)のみをサポートしています。

Amplifyサンドボックスが実行されている場合、このファイルを保存すると変更が取得され、必要なリソースが再デプロイされます。

フロントエンドの接続

クラウドサンドボックスが起動して実行されると、AIルートおよび他のAmplify設定に関連する接続情報を含むamplify_outputs.jsonファイルも作成されます。

フロントエンドコードをバックエンドに接続するには、以下を行う必要があります:

  1. Amplifyクライアント構成ファイル(amplify_outputs.json)を使用してAmplifyライブラリを構成します。
  2. Amplifyライブラリから新しいAPIクライアントを生成します。
  3. エンドツーエンドの型安全性を備えたAPIリクエストを行います。

クライアントライブラリのインストール

Amplifyクライアントライブラリをプロジェクトにインストールします:

Terminal
npm add aws-amplify @aws-amplify/ui-react @aws-amplify/ui-react-ai

ライブラリの構成

Reactアプリケーションがマウントされているamplify_outputs.jsonファイルを使用してAmplify.configure()を呼び出します。

src/main.tsx
import { Amplify } from 'aws-amplify';
import '@aws-amplify/ui-react/styles.css';
import outputs from '../amplify_outputs.json';
Amplify.configure(outputs);

データクライアントの生成

次に、バックエンドデータスキーマと、Amplifyライブラリによって提供されるgenerateClient()関数を使用して、バックエンドと通信するための型安全なフロントエンドクライアントを生成します。

生成されたAmplifyデータクライアントと生成されたReactフックをエクスポートするclient.ts/jsファイルを作成すると便利です。

src/client.ts
import { generateClient } from "aws-amplify/api";
import { Schema } from "../amplify/data/resource";
import { createAIHooks } from "@aws-amplify/ui-react-ai";
export const client = generateClient<Schema>({ authMode: "userPool" });
export const { useAIConversation, useAIGeneration } = createAIHooks(client);
src/client.js
import { generateClient } from "aws-amplify/api";
import { Schema } from "../amplify/data/resource";
import { createAIHooks } from "@aws-amplify/ui-react-ai";
/**
* @type {import('aws-amplify/data').Client<import('../amplify/data/resource').Schema>}
*/
export const client = generateClient({ authMode: "userPool" });
export const { useAIConversation, useAIGeneration } = createAIHooks(client);

生成の使用

import React, { useState, useEffect } from "react";
import {
View,
Text,
StyleSheet,
TextInput,
FlatList,
TouchableOpacity,
ActivityIndicator,
} from "react-native";
import { useAIGeneration } from './client';
export default function Screen() {
const [description, setDescription] = React.useState("");
const [{ data, isLoading, hasError }, generateRecipe] =
useAIGeneration("generateRecipe");
const handleClick = () => {
generateRecipe({ description });
};
return (
<View>
<TextInput
autoResize
value={description}
onChange={(e) => setDescription(e.target.value)}
label="Description"
/>
<Button onClick={handleClick}>Generate recipe</Button>
{isLoading ? (
<Loader variation="linear" />
) : (
<>
<Heading level={2}>{data?.name}</Heading>
<View as="ul">
{data?.ingredients?.map((ingredient) => (
<Text as="li" key={ingredient}>
{ingredient}
</Text>
))}
</View>
<Text>{data?.instructions}</Text>
</>
)}
</Flex>
);
}

会話の使用

AI会話はユーザーの範囲内に限定されるため、ユーザーはAmplify認証でログインする必要があります。これを行う最も簡単な方法は、Authenticatorコンポーネントを使用することです。