GPT-4oを使ってとりあえずアプリ作ったお話

いや~GPT-4oってすごいですね

ホントビビりますよね、応答速度は速いし、画像も認識しちゃうし、とんでもないことになってきた感満載なんですよね

しかも先週25日、私の主催するコミュニティイベントにて出戻りガツオさんに登壇していただきました。

ガツオさん本当にありがとうございました。

www.youtube.com

 

なんですが、私、今とあるイベントの準備に関わっておりまして作成時間が全然ないんですよ・・・

なんですが、湧き上がる創作意欲を抑えられないのが私・・・

昨日、こっそり作りました(笑)

 

同じことは出来ませんよ、素人オジサンなんですから

想定するシチュエーションは何かの問合せが来たら、その回答をGPT-4oに考えさせるというなんともまあ、お前仕事手抜きする気マンマンじゃね?みたいなアプリです。

いや、だって回答を手入力するのメンドイじゃないですか・・・

 

まずはですね、GPT-4oをデプロイ!!

ますはここが一丁目一番地ですね

今回はAzureOpenAI使ってますが、もちろんOpenAIのAPIでもいいと思います。

 

さて、フロー作りますか

はい、こんな感じです。

これはギークフジワラさんのyoutubeとかを参考に作りました。

www.youtube.com

このフローがあればね、とりあえず叩けますからねGPT-4o

ちなみにUS環境でフロー作成してます。

でPowerApps側は?

いやーなんの変哲もない画面ですね、工夫の足跡すらない(笑)

問合せボタンには

Patch('GPT-4o_FAQ',Defaults('GPT-4o_FAQ'),{タイトル:Now(),question:TextInput1.Text});Reset(TextInput1);Notify("問合せを登録しました",NotificationType.Success)

ただただ登録してるだけですね・・・

 

質問の一覧画面です。

おっと何やらGPT-4oボタンがありますね(笑)

ちょっと押してみましょうか

おっとポップアップが出てきて、回答案が示されましたね

要約ボタンを押すと

ちなみに要約ボタンには
Collect(_messages,{role:"user",content:LabelSugest.Text&"の内容を簡潔に要約してください。"});
Set(_Reply,'GPT-4o'.Run(JSON(_messages)).reply);
Collect(_messages,{role:"assistant",content:_Reply});

いや~粗雑なプロンプトですねえ(笑)

うわっ超短くなりましたね

ちなみに回答ボタンには

UpdateIf('GPT-4o_FAQ',ID=Gallery1.Selected.ID,{Answer:LabelSugest.Text});Notify("回答を登録しました",NotificationType.Success);Set(popup,false)

コピーボタンには

Copy(LabelSugest.Text)

を仕込んであります。そのままデータソースに回答してもよし、Teamsチャットにコピペしてもよしという感じです。

 

こんなアプリがお手軽に作れてしまう、それがPowerAppsの魅力かと思います。

APIの叩く先が高性能になればなるほど夢が広がりますね!!

 

と作ってはみたものの、全然マルチモーダルじゃないですね

時間出来たら作りますね。

 

 

何かのイベントに使うかもしれない抽選アプリを作ってみたお話

年末の商店街とかで福引ありますよね

まあ今回は福引とかではないんですが、ある会場に多人数がいて、その人向けに何か抽選をすることを想定したアプリです。

なんのことはないビンゴの応用ですね(笑)

ビンゴゲームだと終わるまでに時間がかかりますよね、ですが決まった人数の抽選をサクっと終えたい、そんなときのためのアプリです。

 

まずは人数に応じて初期化

まずはスタートボタンを作ります

colcalledは既に呼び出した番号のコレクションです、まずはこれを初期化

次にTextInputに参加人数を入力してその人数分のコレクションを作成します

でそれをシャッフルしたコレクションをrandcolとして作成します

で変数として1をcountに格納

では150人参加を想定してボタンを押してみましょうか

 

まずは右側のギャラリー

にラベルは

ええ番号表示させてるだけです(笑)

左側のギャラリー

にラベルは

つまり呼び出された番号を表示してます

 

左側のラベル

colcalledのラストを表示しています。

つまり最後に呼ばれた番号です。

 

で抽選中にかけたい音楽をオーディオコントロールに仕込みます(笑)

こんな感じですかね、自動開始はオフです。

 

最後にひと工夫

音楽鳴ってる間、何か表示したいじゃないですか、それをコンテナでやります。

コンテナのvisibleにpopupと変数を

イメージに表示する画像はどこかのドキュメントライブラリの画像を指定します

タイマーのOnTimerEndにはドキュメントライブラリからランダムで画像を表示するための変数を格納

 

最後にCallボタン作りましょう

なんのことはない音楽スタートとポップアップの表示だけです

そうなんです、このアプリ再抽選はしていません(笑)

そんなの参加者にはわからないですからね・・・ふふふ

 

で完成はコチラ

 

これもっと作りこめば、何等賞とかにも対応出来そうですけどね

そこまでの必要がなかったのでこれで完成です。

新年度早々にやらかしたお話、からの家練

新年度早々、私はやらかします

今日は4月1日、そうです新年度の始まりです。

そんな日によりによってやらかしました。

何をやらかしたかというと・・・

PowerAppsのアプリを誤削除、しかも稼働中

 

PowerShellに助けられる

いやーこんなやらかし初めてですからね・・・慌てましたよ

artisan.jp.net

この記事には助けられました、ホントありがたや

 

職場で事なきを得たが、自分でも出来るように

ということで自宅環境で写経ならぬコピペで実践!!

よしよし戻った(実際には30分以上かかっている)

 

参考にしてお世話になった記事にいうのもなんですが

私のような素人はこういう勘違いをしますね(笑)

つまり元記事の[ ]をうのみにしてそのまま写経してしまいます

私が知らないだけかもしれませんが ” ” と書いてくれたらいいのになあ・・・と
最後の””が正解です

 

まあ、トホホな素人オジサンの備忘でした。

いつか何かに使うかもしれない日本郵便番号一覧アプリを作ってみたお話

きっかけは?

この記事を見たことから始まります

qiita.com

ガツオさん、いつもありがとうございます

で、写経王の私のことです。当然のように写経をしました。

結果はコレ

なんのことはない、ただのお遊びですね(笑)

12万行にも及ぶ郵便番号一覧をSharepointリストにExcelからエクスポート(笑)し

それとアプリを接続して、ジオコーディングで情報を取得してきているというものです

ここらはガツオさんの元記事のままです

 

で、こんなYoutube

www.youtube.com

これ、フローにページサイズと最初のIDを投げてあげて、その分だけをSharepointリストから取得して、アプリ側でコレクションにするというものです

さらにそれをページ切替可能にしています。

やってみたい方は、この動画の写経をオススメいたします(笑)

 

さて、何を思いついた

うーん、この二つ組み合わせたら面白いことできないかなあ・・・

やっぱ数万件のリストから思うようにデータ取得してみたいよなあ・・・

と創作意欲というよりも実験意欲が湧いてまいりました

ということで郵便番号リストと接続!!

とまあ、ここまでなら写経してデータソース違うだけですよね

それじゃあ何の面白みもないですね

 

お!ナビゲーションステップなるプロパティがあるじゃないですか

なんといっても元データは12万件強(笑)

1ステップ100としてもすごい回数クリックしなければいけません

なんかいい方法ないかなあ・・・としばし思案

あ!スライダー使ってみよ、ということで実装

とここで・・・

スライダーでさ、ページはサクサク切り替わるけどさ

どこの都道府県のページかわからん!!

ということで索引(笑)を追加

ギャラリーのラベルに以下を表示
LookUp(postnolist,ID=(ThisItem.Value-1)*varGridPageSize+1).jyusyo2

ということで完成(いったいいつ使うんだこれ)

 

これ、自分で考えたの
郵便番号のデータ使うことと、スライダー使うことと、索引付けただけですね(笑)

本当に世の有識者の方に感謝です。

いつもありがとうございます。

ってジオコーディングどこ行った?どうせなら付けろよ・・・とまた心の叫びが
まあそのうちやりますよ

懲りずに色んなAIで高松宮記念を・・・

昨年の有馬記念

私はAIを使ったクソアプリを作り、見事に撃沈しました(笑)

ですが結果はハズレですが、人生で最も的中に近づく着差という、まあ嬉しいのか悲しいのかよくわからない結末となりました。

有馬記念へのリベンジは年末まで待つとして、その前にちょいちょい改良(笑)をしてみようかなと思い立ちました。

 

外れた理由?

前回、有馬記念時にはGPT-3.5を使用しました。

ひょっとして外れたのはGPT-3.5のせいなのでは?

これを変えれば当たるかもしれない(そんなわけあるかい!)

 

Claudeをやってみる

sasami-axis.hatenablog.com

いやあこれ素晴らしい記事ですよ

カスタムコネクタの作り方がこれでもかと詳細に掲載されています

どこぞのポエムとは比べ物になりません(笑)

早速写経開始です!!

写経なんですから、当然のごとく完成します

ささみさん本当にありがとうございます

 

Claudeだけでいいのか?他もやらないのか?

という悪魔の囁きが・・・

ということでGPT-4を実装してみます

AzureOpenAIでコードをガン見(笑)
1年前までこんなの呪文にしか見えなかったんですけどね

なーんとなくですが、こんなことやってるのかなあ・・・とわかるようにまではなりました(完璧ではない)

実装はPowerAutomateで

どちらも基本は同じですね

HTTP要求する、戻り値の必要な部分をアプリに応答するという流れです

HTTP要求の詳細は私なんぞよりも達人の方のをご覧になってください

 

じゃあ並べてみようかなあ

ということで3つ並べてみました

まずは日本の総理大臣を聞いてみましょうか

おっと、3.5さすがに情報が古いですね・・・

Claudeの回答もなかなかのものじゃないでしょうかね


では本題に入りますか!

まずはプロンプトを用意しましょう

有馬記念アプリも多少使いつつ、以下のプロンプトでいってみます

 

1枠1番ビッグシーザー騎手は吉田隼、1枠2番マッドクール騎手は坂井、2枠3番ナムラクレア騎手は浜中、2枠4番モズメイメイ騎手は藤岡佑、3枠5番トウシンマカオ騎手はルメール、3枠6番ルガル騎手は西村淳、4枠7番テイエムスパーダ騎手は富田、4枠8番ソーダズリング騎手は武豊、5枠9番シャンパンカラー騎手は吉田豊、5枠10番ビクターザウィナー騎手はリョン、6枠11番メイケイエール騎手は池添、6枠12番ロータスランド騎手は岩田康、7枠13番ウインカーネリアン騎手は三浦、7枠14番ママコチャ騎手は川田、7枠15番ディヴィーナ騎手はMデムーロ、8枠16番ウインマーベル騎手は松山、8枠17番マテンロウオリオン騎手は横山典、8枠18番シュバルツカイザー騎手は大野、このメンバーで行われる中京1200mの高松宮記念の結果を作成してください

 

さあ、どんな予想結果になるでしょうか

1回目

GPT-4のイヤイヤが発動(笑)

これじゃあ予想にならないなあ・・・ちょっとプロンプト変えますね

2回目

なんかありそうな結末ですね、これはトウシンマカオ3着固定もありですかね(笑)

ちょっとプロンプトで遊んでみますか

3回目

いやー荒れましたねえ(笑)

結論

2回目の予想でソーダズリング1着が2つあるので◎ソーダズリング

対抗は嫌いだけどルメールの〇トウシンマカオ

なんとなく紐荒れしそうなので名前の挙がった馬全部に流す

といった感じでしょうか

 

と言いながら馬券はまだ買ってません

写経して一日ハマって解決したお話(笑) dall-e-3編

今朝、私はなぜか無性に画像生成をしたくなります

今思えば、なんでこんな思いになっていたのかよくわからないんですが(笑)

とにもかくにも早朝4時に写経を開始します。

元記事はいつもお世話になってます。出戻りガツオさん!!

qiita.com

 

写経開始、がしかし何故かHTTPリクエストでエラー

いやーAzureOpenAIとか、デプロイとか、マジわからんのですよ(笑)

見よう見まねでしかないもので・・・

ギークさんのyoutube見たりして復習復習

がしかし、朝の部はここで断念する・・・

 

なんとなくだけど、デプロイがおかしいんじゃ??

ていうかあのデプロイいつやったんだ?とふと疑問に思う

ということで一旦削除してもう一度デプロイ

でフロー作ると・・・

あれれ?こんどはちゃんと200返ってきますね、ヨッシャー!!

となったのが夕方のお話

さらに私はここからハマります

 

写経の罠(笑)

いやーちゃんと写経してるんですよ

operation_location に格納されるらしいので

そこを取ろうとするのですが、何度やっても空、エラーの山(笑)

ここで私はHTTPリクエストの出力を見ます

あれ?そんなのどこにもいないやん(笑)

まさか私には見えない何か設定があるのか?

ということでガツオさんにDM(いつも本当にすいません)

 

あ、やってたのdall-e-3だった

いやーこれ気づきませんでしたわ、dall-e-3、即座にurl出力してますやん

ということで

body('HTTP')['data'][0]?['url'] で無事取得

あとはアプリに返すだけ

 

出来た出来た

ということで一日を費やし、無事dall-e-3画像生成アプリの出来上がり?

まあ、一枚しか作れないけど、そのうちちゃんとやりますよ

 

Power AppsでYoutube再生アプリにチャレンジしてみたお話

Power AppsでYoutube再生?

dai365です。

いつものようにポエムです。

技術的には全然たいしたことありませんのであしからず

いつものようにいきつけのコミュニティーで私はまたもやりたいことに出会う

なんとPower AppsでYoutube再生アプリを作るというのだ、それもチャンネル情報まで取得してリスト化するという!!

これはやってみたい!!いつもの好奇心がムクムクと湧き上がってきた

 

今回の仕組みは

まずはチャネルIDが必要です。これは別途調べる必要があります。

ilr.jp

今回はここで調べてみました

これをPower Apps側からフローに投げてあげます

フロー自体は以下のような感じです

チャネルIDをアプリから渡して、RSSフィードを取得します。

次にJSON解析アクション

選択アクションでID,タイトル、リンク、日付を選択します

それを文字列変数に格納して、アプリに返却します

とまあ、ここまででもタイトルと動画リンクは取得できるので、別に見るだけなら支障ないんですけどねえ・・・・
まあプレミアムコネクタ使わないならここまでの範疇で

 

やっぱりさあ、サムネイルとか動画概要欄とか欲しいよねえ

ということでもう一つフロー作ります(笑)

YoutubeAPI叩いてみました

アプリからVideoIDを渡します

後で使うアレイの変数を初期化しておきます

次の変数にはAPIKeyを入れておきます

で次にAPIを叩きます、これは所定のお作法に則って

Videos: list  |  YouTube Data API  |  Google for Developers

 

次にJSON解析をして、先に初期化した配列変数にあれこれ入れます

で最後に応答アクションでアプリに返却します

ということでアプリ側でフローを動かしてみましょう

 

多少みっともないですがフローを2つ動かします

チャネル選んで、ボタン押します、Onselectには以下のように仕込みます

 

ClearCollect(collist,youtube_RSS_VideoInfo取得.Run(LookUp(colid,name=DropdownChannelID.Selected.Value).id));
Clear(coltitle);
ForAll(Table(ParseJSON(First(collist).return)),Collect(coltitle,{index:CountRows(coltitle)+1,id:Value.ID,Title:Value.Title,Lynk:Value.Lynk,date:Value.Date}));
ClearCollect(videodata,youtube_VideolID検索.Run(Substitute(
Concat(coltitle,ID,","),"yt:video:","")))

 

*ドロップダウンには

ClearCollect(colid,[{name:"Reza",id:"UCvBYTqRx-n_8KzFO0MJlUVw"},{name:"Shane",id:"UC7_OGRP8BYvtGB8eZdPG6Ng"},{name:"ラボ3",id:"UCiSnVOObBXiwA8vRdAPt4Uw"},{name:"OfficeTANAKA",id:"UCA8Myo_LPwq-ED3QhKaSXJw"}]);を仕込んであります

 

すると・・・

まあなんということでしょう、Rezaさんの最新動画がこんなふうに表示されました

 

このアプリの用途?

会社でyoutubeの動画見ながらアプリ作りたいときありますよね、ないですか?

私はあります(笑)

そんなときにYoutubeを普通に見ていたら、サボってるんじゃないかと誤解されますよね

ならば、youtubeからPower関連のチャネルしか見れないようなアプリを作ってしまえば堂々とyoutubeを業務時間中に見れるのではないか?

そんな思いからこんなアプリを作ってみました

 

世の管理職の方々、Power系動画視聴は学習です!!
やる気の表れですので、そんな意欲に目を向けてあげてください

 

最後に、おうじゃさんいつもありがとうございます

oujasan-to-issho.connpass.com