LoginSignup
71
49

Power Virtual Agents を使用して Azure OpenAI Service の ChatGPT と連携し、会話履歴と文脈に基づいた回答を生成する方法

Last updated at Posted at 2023-05-15

はじめに

早く社内業務で ChatGPT を利用したい、利用したいと迫られているという方も多いと思います。そして、この数か月だけで恐ろしいほど新しい技術、サービス、機能が生まれている状況であることから、短時間での実装が求められていると思います。

そのため、入力インターフェイス、チャットのエクスペリエンス、実装コストを抑える、短期での実装等、色々頭を悩ませている人もいると思います。

まず、入力インターフェイスやチャットエクスペリエンスという意味では、Microsoft Teams を業務で利用している場合、Teams に組み込めたら楽、使いやすいと思います。

そして、実装コストを抑える、短期での実装については、ローコードを活用することが解決策になると思います。

そのため、今回は、以下のように、Power Virtual Agents を使用して Azure OpenAI Service の ChatGPT と連携し、会話履歴と文脈に基づいた回答を生成する方法について紹介します。

image.png

実装アプローチ

まず、私自身、Power Virtual Agents で Azure OpenAI Service の ChatGPT と連携すること自体はそれほど難しくないと思っていました。以下で紹介したように、Power Automate から HTTP コネクタを利用すれば簡単だからです。そして、Power virtual Agents 側で Power Automate を呼べばいいだけです。

しかし、単発で質問したり依頼を出来るものの、過去の会話を保持し、会話履歴と文脈に基づいた回答を生成することは難しいのでは?と思っていました。

Power Apps は、Collection を利用することで簡単に実現できます

少し頭を悩ませていたところ、以下のような情報を発見しました!!!

ソリューションで提供されているので、こちらを利用すれば簡単に実現できます。本当にありがとうございます!!!

現状、プレビューの方色々と制約もあるため、公開までやる場合は、以下のクラシック側を利用するのが良いと考えます。

Power Virtual Agents (classic) integration example using Bot Framework Composer

インポート後、少し内容を変えています。まず、最終的に、フロー自体は、以下の通りかなりシンプルです。中身を簡単に解説します。

image.png

以下の通り、二つのテキスト情報を受け取っています。片方はチャットから入力された情報、もう一つは過去のやり取りです。

image.png

システムプロンプトは変数で設定されているので、必要に応じて変えます。

image.png

ポイントは以下の箇所です。以下の通り、過去のやり取りとチャットから入力された情報をくっつけています。if 文で書かれているのは、初回は過去のやり取りがないためです。クォーテーションが多くてややこしいですが、上手くいかない時は、エラー内容を踏まえ、 ChatGPT に聞いたりしていました。

image.png

json(
  if(
    empty(triggerBody()?['text_1']),
    concat(
      '[{"role": "system","content": "', 
      variables('System Prompt'),
      '"}, {"role": "user","content": "', 
      triggerBody()?['text'],
      '"}]'
    ),
    concat(
      '[{"role": "system","content": "', 
      variables('System Prompt'),
      '"}, ', 
      triggerBody()?['text_1'],
      ' {"role": "user","content": "', 

      triggerBody()?['text'], 
      '"}]'
    )
  )
)

Power Virtual Agents 側は基本修正いりませんが、ポイントは、変数を使って、受け取った回答内容を追記している部分です。これを Power Automate 側で結合している感じです。

image.png

Global.FullDialog 
& "{""role"": ""user"", ""content"": """ & Topic.OriginalUnrecognizedTriggerPhrase & """},"
& "{""role"": ""assistant"", ""content"": """ & Topic.GeneratedAnswer & """},"

テストした際、以下のようなエラーになる場合は、Power Automate のフローを呼ぶ処理の部分を再作成 (同じアクションを作成して、元々のアクションを削除)ください。

image.png

image.png

なお、Activity.Text は以下にございます。

image.png

アーキテクチャとしては以下のような感じです。

image.png

以下のようなアーキテクチャにも出来るとは思います。

image.png

まとめ

今回、Power Virtual Agents を使用して Azure OpenAI Service の ChatGPT と連携し、会話履歴と文脈に基づいた回答を生成する方法について紹介しました。社内業務で ChatGPT を利用したい、利用したいと迫られているという方も多いと思いますので、一つのアプローチとして参考になれば幸いです。

71
49
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
71
49