2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

INTELLILINK Tech LearningAdvent Calendar 2023

Day 2
記事投稿キャンペーン 「AI、機械学習」

Azure OpenAI Service をノーコード開発してみる(2) ~ Logic Apps でサーバーサイド開発(開発編) ~

Last updated at Posted at 2023-11-17

NTTデータ先端技術株式会社の原田です。

Azure OpenAI Service の学習にあたって試してみたフルノーコードによる開発のご紹介です。
この記事は2023/11/15時点の情報で記載しています、アップデートにより変わってしまっている部分がありましたらご容赦ください。

今回は全6回の第2回~ Logic Apps でサーバーサイド開発(開発編) ~になります。

記事一覧

第1回. Logic Apps でサーバーサイド開発(構築編)
第2回. Logic Apps でサーバーサイド開発(開発編)
第3回. Power Platform でクライアントサイド開発
第4回. ServiceNow でクライアントサイド開発
第5回. Azure リソースのセキュリティ強化
第6回. Azure OpenAI Service をノーコード開発してみるのまとめ

はじめに

第2回では Logic Apps を用いてクライアントからの呼び出しを受ける API を開発します。
実装する主な機能は下記の通りです。

  • OpenAI Service を呼び出して回答を返却
  • 呼び出し回数の制限を行うためのクレジット管理
  • 一連の履歴を積み上げてプロンプトを生成

↓が全体フローです、次のセクションからポイントとなる実装をピックアップしてご紹介していきます。
bbb4271e333943e09061_01.png

HTTP 要求の受信時

クライアントからの呼び出しの際のリクエストパラメータです。

  • SessionId : プロンプトの積み上げで使用
  • UserId : クレジット管理で使用
  • Message : チャット本文
{        
    "SessionId": "e692b99d-f7ac-42f8-b5f5-5eb261e80562",
    "UserId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "Message": "NTTデータ先端技術株式会社について教えてください。",
    "DisplayName": "原田 幸太郎",
    "LastName": "幸太郎",
    "FirstName": "原田",
    "Email": "haradaktr@intellilink.co.jp",
    "UPN": "haradaktr@intellilink.co.jp"
}

ユーザー情報チェック&登録

Cosmos DB の User コンテナーを UserId をキーにチェックし、ユーザー情報が存在しない場合は登録を行います。 (ここでクレジットの初期化も行っています)
bbb4271e333943e09061_03.png

クレジットチェック

ユーザー情報が存在する場合はクレジットをチェックし、残っていない (Credit <= 0) 場合ステータスコードに 429 をセットして応答を返します。
bbb4271e333943e09061_04.png

セッションチェック

Cosmos DB の Session コンテナーを SessionId をキーにチェックし、セッションが存在する場合は前回までの履歴を取得します。
存在しない場合はチャットを呼び出す呪文で初期化。
bbb4271e333943e09061_05.png

セッション情報はこんな感じ。

{
    "Messages": [
        {
            "content": "You are a helpful assistant.",
            "role": "system"
        },
        {
            "content": "NTTデータ先端技術株式会社について教えてください。",
            "role": "user"
        },
        {
            "role": "assistant",
            "content": "NTTデータ先端技術株式会社は、日本の情報技術(IT)企業であり、NTTグループの一員です。NTTデータグループの中でも主に先端技術の研究開発やサービス提供に力を入れており、AIやビッグデータ分析、IoT、ブロックチェーンなどの分野において、多数の実績と強みを誇っています。また、グローバルにビジネスを展開し、アジア、ヨーロッパ、北米などに拠点を設けています。"
        }
    ],
    "SessionId": "ef015b7f-5a15-4a20-aabb-be68ab331653",
    "UserId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    -----
}

プロンプト生成

履歴もしくは呪文が格納された配列にチャット本文を追加し Json 形式に整えます。
bbb4271e333943e09061_06.png

OpenAI Service 呼び出し

OpenAI Service は HTTP アクションで呼び出します。(いずれ専用アクションがリリースされるんでしょうか)
bbb4271e333943e09061_07.png

クレジット減算

クレジットを減算して User コンテナーを更新します。
bbb4271e333943e09061_08.png

セッション更新

プロンプトに応答を追加してセッションを更新します、実装はプロンプト生成とほぼ同じです。
OpenAI Service は単一の応答でもアレイで返してきますので First 関数で引っ掛けてます、このあたりはもうちょい深堀りすべきかもしれません。
bbb4271e333943e09061_09.png

応答

そして最後に応答を返して終了です。

テスト

まだクライアントが出来ていませんので Postman でテストしてみます。
bbb4271e333943e09061_10.png
上手くいっていそうですね。

おわりに

今回難しかったところは…あんまりなかったです、強いてあげるなら応答がアレイになっていることに気づくところでしたでしょうか。
開発期間は 1.5~2.0 日くらいでした。

次回

次回はこの API を使用して Power Platform (Power Virtual Agent) でクライアントサイド開発を行っていきます。

2
0
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
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?