はじめに
下記の質問があったので、挑戦してみました。
UWSC用のプログラム生成AIを探しているのですが、
良いものがありましたら教えてもらえませんでしょうか?
UWSC 仮 掲示板
自然言語を入力することでUWSCのコードを生成して欲しいわけですよね。
今回、プログラム生成AIを実現するのに使用するのは、今話題のclaude 3
となります。
UWSC とは
UWSC(作者うみうみ)は、Windowsのマウスとキーボードの操作をスクリプト形式で記録し、再生することができるフリーソフトウェアです。RPAの先駆け的ソフトウェアですね。
uwscの作者umiumiさんの消息は? によれば既にうみうみさんは逝去されているようです。
UWSCの後継としてRust製のUWSCRが stuncloud さんにより開発されています。
claude 3 とは
claude 3(クロード・スリー)は、Anthropic社が開発し、2024年3月4日にリリースされた大規模な言語モデルファミリーで、OpenAI社のGPT-4に比肩すると言われています。
無料版の「Sonnet」でも、長文テキストやpdfをペーストで読ませることが出来ます。
準備
claude 3
の導入方法は前述したリンク先で自分は行いました。claude 3
が既に使用できる状態を前提とします。
準備を何もしないままだと、claude 3
を「UWSCとは、ユニヴァーサル・ウェブ・サイエンス・コンピューターの略称だと思われます。」と認識しています。
注意点
1日に送信できるメッセージ数に具体的な上限が設けられていますが、残念ながらその正確な数値は公開されていないようです。
チャット履歴の削除
Claudeのチャット履歴を削除するには、個別チャットを表示して上部にあるチャットタイトル部分をクリックして表示されるメニューから「Delete」を選択します。
実施
下記2パターンでやってみました。
- 長文テキスト ・・・ 基本構文のみの読み込み
- PDF ・・・ 基本構文 と 各関数の読み込み
長文テキスト版
下記サイトの基本構文から最後の方までテキスト選択してコピーします。
claude 3
にて、ペーストした後に、下記のプロンプトを入力します。
UWSCでフィボナッチ数列のスクリプトを作成してください。
実はこのままでは動作しません、この後に2つのプロンプトを入力しました。
ソースコードにコメントを追加してください。
関数は一番最後に記述してください。
// フィボナッチ数列を出力する値を10に設定
DIM n = 10
// 0 から n までの範囲でループ
FOR i = 0 TO n
// i番目のフィボナッチ数を計算し、出力
PRINT "Fibonacci(" + i + ") = " + fibonacciSeries(i)
NEXT
// フィボナッチ数列のn番目の値を計算する関数
FUNCTION fibonacciSeries(n)
// 基底ケース: n が 0 または 1 の場合、n をそのまま返す
IF n <= 1 THEN
RESULT = n
ELSE
// n-1 番目とn-2番目のフィボナッチ数の和をnの値として返す
RESULT = fibonacciSeries(n-1) + fibonacciSeries(n-2)
ENDIF
FEND
※UWSC
の後継であるUWSCR
では、関数が先頭に定義されていても動作しました。
記事を書くためにトライアンドエラーをしているため、学習したことで最初から上記のように出来ないかも知れません。初期の頃は、Visual Basicに記法が似ているため、コメントがシングルクォーテーションだったり、文字列結合が & になっていたりしました。
pdf版
基本構文以外のコマンドなども追加したいと思った時、ネット情報からの切り貼りが面倒です。何かいい方法がないかと思案したところ、UWSCのマニュアルファイル uwsc.chm
がありました。これをpdf
に変換すればいい。早速、下記オンラインサイトでchm
ファイルからpdf
ファイルに変換できました。
これを、claude 3
にペーストしたところ、多過ぎるとエラーになりました。128ページあるため、削る必要があります。下記オンラインサイトでpdf
のページを削除することが出来ます。
11ページ目の「スクリプトについて」からは必要なので、1〜10ページは削除しました。後半の102ページ以降も削除しました。他にも適当に不要そうなのを削除し最終的に50ページまで削りました。
もしかしたら、サンプルソースを残した方がいい結果をもたらすかも知れませんね。
claude 3
にて、pdf
ファイルをペーストした後に、下記のプロンプトを入力します。
UWSCでフィボナッチ数列のスクリプトを作成し、メモ帳に答えを出力してください。
このままでは動作しませんので、この後にプロンプトを入力しました。
文字列結合を & を + に変更してください。
関数は一番最後に記述してください。
// メモ帳に出力するためのウィンドウIDを取得
notepadID = GETID("無題 - メモ帳")
// フィボナッチ数列の20項目までを計算して出力
FOR i = 0 TO 20
fibNum = FIB(i)
SENDSTR(notepadID, fibNum + "<#CR>")
NEXT
// フィボナッチ数列を計算する関数
FUNCTION FIB(n)
IF n <= 1 THEN
RESULT = n
ELSE
RESULT = FIB(n-1) + FIB(n-2)
ENDIF
FEND
メモ帳を起動してからUWSC
で動かしてみたのですが、このままでは動きませんでした。
Windows 11
によるメモ帳アプリの変更で、GETID("無題 - メモ帳")では取得できないためです、そこはGETID("メモ帳") にすることで動作しました。
改行コード "<#CR>" を指定しているのに改行されないのは、メモ帳アプリの変更による影響と思われます。
SENDSTRは最後の答えのみ必要です、ループの外にしてください。
// 配列を初期化
DIM fibArray[21]
// フィボナッチ数列の20項目までを計算して配列に格納
FOR i = 0 TO 20
fibArray[i] = FIB(i)
NEXT
// メモ帳に出力するためのウィンドウIDを取得
notepadID = GETID("無題 - メモ帳")
// 配列の値を結合して一度にメモ帳に出力
SENDSTR(notepadID, JOIN(fibArray, ","))
// フィボナッチ数列を計算する関数
FUNCTION FIB(n)
IF n <= 1 THEN
RESULT = n
ELSE
RESULT = FIB(n-1) + FIB(n-2)
ENDIF
FEND
先程と同様にGETID("メモ帳")のみ書き換えて、UWSCで動かしてみました。
最後にカンマが1個多いのは、配列の定義 fibArray[21] が1つ多いからですね。
やはり、VBの影響が大きい。
これをUWSC
の後継であるUWSCR
で動かしてみたのですが、SENDSTR
が機能しないのでKBD
に変更しました。
// SENDSTR(notepadID, JOIN(fibArray, ","))
KBD(JOIN(fibArray, ","))
UWSCR
で、Windows 11
のメモ帳アプリによるSENDSTR
が機能しない件については、Discord
にて作者に報告済みです。
UWSCR Ver.0.16.0 の段階では下記方法なら出力されました。
CTRLWIN(notepadID , ACTIVATE)
SENDSTR(notepadID, JOIN(fibArray, ","), 0, 0, 1) // ACC指定だと入力される
最後に
コード生成AIはメジャーなプログラム言語ならそのまま使用できますが、UWSCのように世界的にはマイナーなスクリプト言語は、基本構文を読ませてコード生成すれば、それなり近い状態で書き換えてくれます。
流石に完璧なコードは生成してくれないものの、各関数とか覚えなくても自然言語で近いものを生成してくれればアシスト的な使い方としては有効です。