先日行われたVercelの年次カンファレンス、Vercel Ship 2024にて発表されたのがVercel/AIです。LLMを使ったAIチャットボットを簡単に開発できるJavaScript API、そしてUIコンポーネントになります。

今回はこのVercel/AIの使い方を通じて、どんな使い方ができそうか解説します。

Vercelとは

Vercelは、Next.jsの開発元であるVercel Inc.が提供するサーバーレスプラットフォームです。Vercelは、静的サイトのホスティングやAPIエンドポイント(FaaS)の作成、デプロイなどを簡単に行うことができます。他にもVercel Postgresなど、静的サイトホスティングに加えて動的サイトにも利用できる機能を多数提供しています。

Vercel/AIについて

Vercel/AIは以下の3つのパッケージで構成されています。

  • AI SDK Core
  • AI SDK RSC
  • AI SDK UI

AI SDK Core

AI SDK Coreは、Vercel/AIの基礎的機能を提供するAPIです。OpenAIなどのLLMを利用して、プロンプトを呼び出したり、画像を送ったりできます。

AI SDK RSC

RSCはReact Server Componentsの略で、チャットボット用サーバーコンポーネントです。ストリーミングでの表示更新にも対応しています。

AI SDK UI

AI SDK UIはクライアントサイドのUIです。以下の3つのフックが用意されています。

  • useChat
  • useCompletion
  • useAssistant

Vercel/AIの使い方

プロンプトを実行する処理です。 generateText 関数を呼び出すだけで使えます。

import { generateText } from "ai"
import { openai } from "@ai-sdk/openai"
const { text } = await generateText({
    model: openai("gpt-4-turbo")
    prompt: "What is love?"
})

OpenAIの他、以下のプロバイダーが利用できます。

  • OpenAI Provider (@ai-sdk/openai)
  • Anthropic Provider (@ai-sdk/anthropic)
  • Google Generative AI Provider (@ai-sdk/google)
  • Google Vertex Provider (@ai-sdk/google-vertex)
  • Mistral Provider (@ai-sdk/mistral)

画像の場合はURL、またはBlobを指定します。

const result = await generateText({
  model: yourModel,
  messages: [
    {
      role: "user",
      content: [
        { type: "text", text: "Describe the image in detail." },
        {
          type: "image",
          image: new URL(
            "https://github.com/vercel/ai/blob/main/examples/ai-core/data/comic-cat.png?raw=true",
          ),
        },
      ],
    },
  ],
});

UI側です。 useChat を使うのがポイントです。入力中や送信処理などがすべて任せられます。

"use client";

import { useChat } from "ai/react";

export default function Page() {
  const { messages, input, handleInputChange, handleSubmit } = useChat({
    api: "api/chat",
  });

  return (
    <>
      {messages.map(message => (
        <div key={message.id}>
          {message.role === "user" ? "User: " : "AI: "}
          {message.content}
        </div>
      ))}
      <form onSubmit={handleSubmit}>
        <input
          name="prompt"
          value={input}
          onChange={handleInputChange}
          id="input"
        />
        <button type="submit">Submit</button>
      </form>
    </>
  );
}

使いどころ

Vercel/AIは、外部のLLMを呼び出しますので、サーバー側での処理が基本です(APIキーが漏洩すると大変なことになるので)。そのため、Monacaアプリで利用する際にも、サーバー側の仕組みが必要になります。

Monacaアプリであれば、アプリの中で動作するアシスタントとして利用できそうです。業務アプリであれば、自社データと合わせた質問を行うことで、より高品質な回答が得られるでしょう。

ファイルも送信できるので写真をアップロードして情報を得たり、指定したPDFの質問をするといったこともできます。

なお、APIの呼び出しには課金がかかりますので、一般利用可能にする場合には注意が必要です。

まとめ

チャットボットやLLMを使ったチャット機能の実装はとてもホットな話題です。多くのサービスが同様のUIを用意しています。Vercel/AIを使えば、Next.jsアプリケーションの中に、簡単にチャットボットが組み込めます。

また、Vercel/AIは多くのAIプロバイダーを選択できるのも強みです。一番良いと思うサービスを使うことで、品質の高いチャットボット機能が実現できるでしょう。

Introduction