7
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[開発者プレビュー]Amplify AI をためしてみた

Last updated at Posted at 2024-09-28

はじめに

Ampify UIのGitリポジトリにてRFC中のAmplify AIが気になったのでためしてみました。

注意
2024年9月28日現在、開発者プレビュー段階にあります。一般公開で重大な変更が加えられる可能性があります。利用の際は要注意です。

Amplify AIとは

Amplify Gen2でバックエンド、クライアントライブラリ、UIコンポーネントが提供されており、爆速でAI Chatアプリを開発できるもの。

バックエンドはAmplify BackendがL3コンストラクトを提供しているようで、フロントはAmplify UIが提供しておりカスタマイズも可能。

AIルートというアイデアが導入されていて、ルートとはAIと対話するためのエンドポイントのようなもので、開発者プレビューでは以下の2種類のルートに焦点を当てている。

1. Conversation

会話用のAPIが提供される。非同期のマルチターン API。

2. Generation

生成のためのAPIが提供される。同期リクエスト応答 API。

ためしかた

今回はConversationを使用してChatのUIを作成しようと思います。

手順はざっと下記のような感じです。

  1. Bedrockのモデルへのアクセス
  2. Amplifyのセットアップ
  3. Amplify UIのインストール
  4. バックエンドの定義
  5. フロントエンドの定義

1. Bedrockのモデルへのアクセス

事前準備としてはBedrockのモデルにアクセスできるようしておきましょう。

2. Amplify(React)のセットアップ

Amplify UIはReactコンポーネントを使用するので下記のスターターからセットアップします。
https://docs.amplify.aws/react/start/quickstart/

3. ライブラリのインストール

BedrockとUIコンポーネントをインストール

Bedrock

npm i -D @aws-sdk/client-bedrock-runtime

UI

npm i @aws-amplify/ui-react-ai

4. バックエンド設定

Amplify Dataリソースにa.conversationを追加します。

// amplify/data/resource.ts
const schema = a.schema({
  chat: a.conversation({
    aiModel: a.ai.model("Claude 3 Haiku"),
    systemPrompt: `You are a helpful assistant`,

    inferenceConfiguration: {
      maxTokens: 1000,
      temperature: 1,
      topP: 0.5,
    },
  }),

たったこれだけでCloude 3 Haikuを利用するAppSyncがされます。

5. フロントエンド設定

React UIのコンポーネントを使用する定義を行います。

import { generateClient } from "aws-amplify/data";
import { createAIHooks, AIConversation } from "@aws-amplify/ui-react-ai";
import type { Schema } from "../amplify/data/resource";

const client = generateClient<Schema>({ authMode: "userPool" });
const { useAIConversation } = createAIHooks(client);

export function App() {
  const [
    {
      data: { messages },
    },
    sendMessage,
  ] = useAIConversation("chat");


  return (
    <AIConversation
      messages={messages}
      handleSendMessage={(context) =>
        sendMessage({
          ...context,
        })
      }
    />
  );
}

export default App;

AIConversationとuseAIHooksというHooksが準備されているので、そちらを利用してバックエンドとフロントエンドを繋げるようですね。

たったこれだけで対話インターフェースの完成です。

あとは下記のコマンドを実行するのみ。

// sandboxの作成
npx ampx sandbox 
// ローカル開発環境
npm run dev

完成品

こんな感じのUIができました。ちゃんと対話もできます。

amplify-ai-01.png

ページ下部に入力インターフェースがあり、会話履歴が上部に表示されます。

カスタマイズ

AIConversationのporpを調整することでUIをカスタマイズできます。

return (
    <AIConversation
      messages={messages}
      handleSendMessage={(context) =>
        sendMessage({
          ...context,
        })
      }
      isLoading={isLoading}
      
      avatars={{
        user: {
          username: "masachika",
          avatar: "☺️",
        },
        ai: {
          username: "Haiku",
          avatar: "🤖",
        },
      }}
    />
  );

amplify-ai-02.png

アバターが変更されました。左の添付マークを触ると画像も渡せるので、マルチモーダルにも対応してますね。

amplify-ai-03.png

会話もできています。

propsにvariantを指定するとLine風なUIに変更すること
もできます。文字の色や背景を調整することも可能です。

amplify-ai-04.png

tools

なんとAIがfunctionを実行するようにできるようです。
今回はwebのURLを指定すると要約するfunctionsを追加してみます。

const schema = a.schema({
  chat: a.conversation({
    aiModel: a.ai.model("Claude 3 Haiku"),
    systemPrompt: `You are a helpful assistant`,
    // all inference configuration is optional,
    // if it is not provided it will use the Bedrock defaults
    tools: [
      {
        query: a.ref("webLoader"),
        description: "Returns the content of a web page from a url.",
      },
    ],
    inferenceConfiguration: {
      maxTokens: 1000,
      temperature: 1,
      topP: 0.5,
    },
  }),

  webLoader: a
    .query()
    .arguments({ url: a.string() })
    .returns(a.string())
    .handler(a.handler.function(webLoader))
    .authorization((allow) => allow.authenticated()),

});

toolsに利用したいfunctionsを指定するだけです。複数のtoolsを使用することもできます。

iPhone16のページを要約させてみた

最近のWebページを要約させてみた。

amplify-ai-05.png

ちゃんとfuncitonsを使えてますね。

amplify-ai-06.png

長かったので要約してもらいました。会話も成り立っています。

まとめ

Amplify AIを使うと簡単にChat UIを作成できました。L3コンストラクトのおかげで、バックエンドを意識せずAI Chatが利用できます🚀
toolsまで利用できるのは驚きました😱

AmplifyGen2の良さであるTypescriptによるDX向上が体験できるよい機能だと思います。
この機能で生成AIがさらに身近に感じされるのではないでしょうか?
個人的にはStreamlitみたいなAmplifyほしかったので今後のアップデート、GAに期待です😁

7
3
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
7
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?