😊

create-llamaでAzure OpenAI ServiceのWebフロントエンドを爆速で作成する

2023/12/24に公開

はじめに

create-llamaLlamaIndexベースのWebアプリを開発するためのCLIツールです。create-llamaを使うとLlamaIndexを使ったembeddingモデルを利用したカスタムAIエージェントのフロントエンドを爆速で開発することが可能です。

llama-createはOpenAI APIを利用する前提になっていますが、基盤となっているLlamaIndexTSのコードをのぞいてみるとAzure OpenAI Serviceに対応してるっぽいコードがあるのでAzure OpenAI ServiceのAPIでもいけるんじゃね?と思いました。

なのでこの記事ではAzure OpenAI ServiceのAPIを使ったフロントエンドを爆速で作成してみようと思います。

やってみた

まず最初にAzure Portal等でAzure OpenAI Seriveを立ち上げ、以下の情報を得ておきます。

  • キーとエンドポイント から エンドポイントキー(APIキー)を控えておきます
  • モデル デプロイからAzure OpenAI Studioに移動して新しいデプロイを作成し、デプロイ名を控えておきます。今回は gpt-35-turbo 0613をデプロイしました。

次にターミナルで以下を実行しcreate-llamaのプロジェクトを生成します

npx create-llama

対話形式で以下のように選択します

✔ What is your project named? … azure_openai_ui
✔ Which template would you like to use? › Chat with streaming
✔ Which framework would you like to use? › NextJS
✔ Which UI would you like to use? › Just HTML
✔ Which model would you like to use? › gpt-3.5-turbo
✔ Which chat engine would you like to use? › SimpleChatEngine (no data, just chat)
✔ Please provide your OpenAI API key (leave blank to skip): … 
✔ Would you like to use ESLint? … No / Yes

Which chat engine would you like to use?以外はすべてデフォルトです。後述しますがここをデフォルトのContextChatEngineを選択してしまうとエラーで動きません。Please provide your OpenAI API key (leave blank to skip)はブランクのままエンターします。

プロジェクト作成が終了したあと、プロジェクトのディレクトリに入って.envファイルを編集します。

cd azure_openai_ui
vi .env

.envデフォルトで空になっています。ここに上記で控えたAzure OpenAI Service APIの各情報を以下のように記載します。

AZURE_OPENAI_KEY=[APIキー]
AZURE_OPENAI_ENDPOINT=[エンドポイント]
AZURE_OPENAI_DEPLOYMENT=[デプロイ名]

.envを保存したあと、以下を実行してWebアプリケーションを起動します。

npm run dev

http://localhost:3000/ にアクセスすると以下のUIが表示され、Azure OpenAIのモデルと対話できます。とても簡単ですね。

現時点ではembeddingは利用できないかも

上述でWhich chat engine would you like to use?ContextChatEngineを選択するとエラーが出ると書きました。実際にContextChatEngineでアプリケーションを生成するとUIは立ち上がりますがメッセージ送信時に以下のようなエラーが発生します。

  [cause]: BadRequestError: 400 The embeddings operation does not work with the specified model, gpt-35-turbo. Please choose different model and try again. You can learn more about which models can be used with each operation here: https://go.microsoft.com/fwlink/?linkid=2197993.
      at APIError.generate (/Users/user/src/openai/create-llma-js/azure_openai_ui/node_modules/openai/error.js:44:20)
      at AzureOpenAI.makeStatusError (/Users/user/src/openai/create-llma-js/azure_openai_ui/node_modules/openai/core.js:251:33)
      at AzureOpenAI.makeRequest (/Users/user/src/openai/create-llma-js/azure_openai_ui/node_modules/openai/core.js:290:30)
      at process.processTicksAndRejections (node:internal/process/task_queues:95:5) {
    status: 400,
    headers: {
      'apim-request-id': '0d1fda65-57ac-4723-97ef-d705e93fa881',
      'content-length': '303',
      'content-type': 'application/json',
      date: 'Sun, 24 Dec 2023 04:52:48 GMT',
      'strict-transport-security': 'max-age=31536000; includeSubDomains; preload',
      'x-content-type-options': 'nosniff',
      'x-ms-region': 'Japan East',
      'x-ratelimit-remaining-requests': '119',
      'x-ratelimit-remaining-tokens': '119998'
    },
    error: {
      code: 'OperationNotSupported',
      message: 'The embeddings operation does not work with the specified model, gpt-35-turbo. Please choose different model and try again. You can learn more about which models can be used with each operation here: https://go.microsoft.com/fwlink/?linkid=2197993.'
    },
    code: 'OperationNotSupported',
    param: undefined,
    type: undefined
  }
}

詳細な検証はしていませんが、エラーの内容から現行のモデルではembeddingの処理はできないようです。一応現在デプロイできるすべてのモデルgpt-35-turbogpt-35-turbo-16ktext-embedding-ada-002で試してみましたがすべてだめでした。将来的にcreate-llamaで何らかの対応があるかもしれませんが、とりあえず現行はSimpleChatEngineが使えると覚えておいたほうが良さそうです。

おわりに

create-llamaを使うとOpenAIのAPIをベースにembeddingしたカスタムエージェントのUIを簡単に作ることができますが、Azure OpenAI APIでもいけるようです。ただ現時点でそのままではLlamaIndexの真骨頂であるembeddingを使うことができないようです。

ただ、カスタムエージェントを作りたい場合は、SimpleChatEngineでもAzure OpenAI Studio側でチューニングしたモデルをデプロイしてAZURE_OPENAI_DEPLOYMENT=[デプロイ名]に設定するという手も考えられます。いずれにせよ爆速でAIエージェントのWebアプリを作成できるのでcreate-llamaはプロトタイピング等にとても役立ちそうです。

Discussion