LoginSignup
1
1

UWSC用のコード生成AIを実現してみる

Last updated at Posted at 2024-03-30

はじめに

下記の質問があったので、挑戦してみました。

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とは、ユニヴァーサル・ウェブ・サイエンス・コンピューターの略称だと思われます。」と認識しています。

注意点

あまり、やり過ぎると無料の制限を超えてしまいます。
スクリーンショット 2024-03-30 17.16.57.png

1日に送信できるメッセージ数に具体的な上限が設けられていますが、残念ながらその正確な数値は公開されていないようです。

チャット履歴の削除

Claudeのチャット履歴を削除するには、個別チャットを表示して上部にあるチャットタイトル部分をクリックして表示されるメニューから「Delete」を選択します。
image.png

実施

下記2パターンでやってみました。

  • 長文テキスト ・・・ 基本構文のみの読み込み
  • PDF ・・・ 基本構文 と 各関数の読み込み

長文テキスト版

下記サイトの基本構文から最後の方までテキスト選択してコピーします。

claude 3にて、ペーストした後に、下記のプロンプトを入力します。

UWSCでフィボナッチ数列のスクリプトを作成してください。

スクリーンショット 2024-03-26 21.32.42.png

実はこのままでは動作しません、この後に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

動作しました。
image.png

UWSCの後継であるUWSCRでは、関数が先頭に定義されていても動作しました。

記事を書くためにトライアンドエラーをしているため、学習したことで最初から上記のように出来ないかも知れません。初期の頃は、Visual Basicに記法が似ているため、コメントがシングルクォーテーションだったり、文字列結合が & になっていたりしました。

pdf版

基本構文以外のコマンドなども追加したいと思った時、ネット情報からの切り貼りが面倒です。何かいい方法がないかと思案したところ、UWSCのマニュアルファイル uwsc.chmがありました。これをpdfに変換すればいい。早速、下記オンラインサイトでchmファイルからpdfファイルに変換できました。

これを、claude 3にペーストしたところ、多過ぎるとエラーになりました。128ページあるため、削る必要があります。下記オンラインサイトでpdfのページを削除することが出来ます。

11ページ目の「スクリプトについて」からは必要なので、1〜10ページは削除しました。後半の102ページ以降も削除しました。他にも適当に不要そうなのを削除し最終的に50ページまで削りました。
もしかしたら、サンプルソースを残した方がいい結果をもたらすかも知れませんね。

claude 3にて、pdfファイルをペーストした後に、下記のプロンプトを入力します。

UWSCでフィボナッチ数列のスクリプトを作成し、メモ帳に答えを出力してください。

スクリーンショット 2024-03-30 11.33.53.png

このままでは動作しませんので、この後にプロンプトを入力しました。

文字列結合を & を + に変更してください。
関数は一番最後に記述してください。
変更結果
// メモ帳に出力するためのウィンドウ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("メモ帳") にすることで動作しました。

image.png

改行コード "<#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で動かしてみました。
image.png

最後にカンマが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のように世界的にはマイナーなスクリプト言語は、基本構文を読ませてコード生成すれば、それなり近い状態で書き換えてくれます。
流石に完璧なコードは生成してくれないものの、各関数とか覚えなくても自然言語で近いものを生成してくれればアシスト的な使い方としては有効です。

1
1
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
1
1