Power Platform で作成する ChatGPTを用いたDataverse の検索結果をサマリしたり、リンクを返す方法をご紹介します。
目次
シナリオ
今回はDataverse内のナレッジ、問い合わせ履歴のデータを利用します。 自然言語でチャットで依頼した内容を元にキーワードを抽出してDataverse 検索に接続します。
その結果をサマリして返すだけではなく、出典元のリンクも一覧にして表示します。
ベースとなるアプリ
ハイパーリンクを有効化にした段階のアプリをベースとして拡張を行います。従いまして、その段階までアプリができている前提でのご紹介ですのでまだご覧頂いていない方は過去動画もご確認ください。
必要なライセンス
Power Apps Premium ライセンス
有償版のライセンスが必要となります。
ライセンスの詳細は以下の記事でも紹介しております。
【早見表で分かる】Power Apps ライセンスまとめ参考ソースコード
こちらではポイントとなる参考ソースコードをご紹介させていただきます。
Power Automate
Power Automateでは以下のフローを作成しています。こちらのポイントとなる部分のコードを紹介します。
作成 Prompt
Power Automate
concat(
'以下の例に倣ってテキストからキーワードを抽出して、"|"区切りとしてください。
例: """RPAの請求書を検索してください。
結果: RPA|請求書"""',
triggerBody()['text'],
'結果:'
)
条件
Power Automate
length(outputs('行の検索_(プレビュー)')?['body/value'])
文字列変数に追加
Power Automate
<a href='https://xxxx.crm7.dynamics.com/main.aspx?appid=55555-9461-ed11-9562-dddddd55555&pagetype=entityrecord&etn=@{items('Apply_to_each')?['@search.entityname']}&id=@{items('Apply_to_each')?['@search.objectid']}'>種類:@{if(equals(item()?['@search.entityname'], 'geek_case'), '問い合わせ', 'ナレッジ')} | タイトル:@{items('Apply_to_each')?['geek_title']}</a><br>
@{if(equals(item()?['@search.entityname'], 'geek_case'), item()?['geek_body'], item()?['geek_contents'])}<br>
<br>
Power Apps
送信アイコンのOnSelect プロパティに以下の通り記述します。Dropdown2というのはsearch modeを切り替えるコントロール名ですので必要に応じて修正してください。
Power Fx
// Power Automate への連携
Set(_reply,
Switch(Dropdown2.Selected.Value,
"社内検索", SearchInternalDocsGPT.Run(MessageBox.Text).reply,
"一般知識", AzureOpenAI_GPT35Tフロー.Run(
JSON(_messages),
Dropdown1.Selected.Value,
tempertureSlider1.Value/10,
maxtokensSlider1.Value
).reply,
"Dataverse", AzureOpenAI検索結果要約.Run(MessageBox.Text).reply)
);
はじめまして!
ご紹介頂いている手順を活用して、ChatGPTで生成した単語を使って行の検索をし、結果をPowerAppsアプリに渡すシステムを構築しています。行の検索をする際に特定の列を検索対象としたいのですが、うまく行かず詰まってしまっています。なにか有効な方法があればお教えいただきたいです。よろしくお願いいたします。
検索対象とする列はモデル駆動型アプリのQuickFind ビューで検索対象として追加した列に限られます。こちらを設定していただいてから暫く待つとインデックスが張られますのでその後に試してみてください。
https://learn.microsoft.com/ja-jp/power-apps/user/quick-find