プログラミングと機械学習のメモ
日付: カテゴリ: SAS
最近ChatGPTが流行っていますが、APIの利用が可能になったということでSASで実行してみました。
まずはhttps://openai.com/productの「get started」をクリックしてアカウントを作成します。
次に、https://platform.openai.com/account/api-keysの「+Create new secret key」をクリックし、 secret keyをメモします。このkeyを使ってChatGPTを使用します。
早速SASでChatGPTを使用してみましょう。まずはChatGPTを使用するためのマクロ登録から。PROC HTTPを使ってAPIを叩きます。
参考にさせていただいたブログはこちら。
%macro CHATGPT(text,outdata,api_key);
/* POST requestのBody作成 */
filename in temp;
data _null_;
file in;
a = '{"model": "gpt-3.5-turbo","messages": [{"role": "user", "content":'|| "&text." ||'}]}';
put a;
run;
/* PROC HTTP を使ってAPIを叩く */
filename resp "%sysfunc(getoption(WORK))/echo.json";
proc http
method="POST"
url="https://api.openai.com/v1/chat/completions"
ct="application/json"
in=in
out=resp;
headers "Authorization" = "Bearer &api_key.";
run;
/* 出力されたJSONをresponseライブラリに設定 */
libname response JSON fileref=resp;
/* データを見やすく整形*/
data &outdata. ;
set response.choices_message;
do row=1 to max(1,countw(content,"0A"x));
outvar=scan(content,row,"0A"x);
output;
end;
drop content;
run;
%mend;
実際に実行します。「今日はいい天気ですね」を入力にしています。
%let api_key= <APIKEY>;
%let text = %str(%"今日は良い天気ですね。%");
%let outdata = outdata;
%CHATGPT(&text.,&outdata.,&api_key);
proc print data=outdata;
var role outvar;
run;
結果

うまくいってますね!
もうちょっと有用な使い方を考えてみます。
例えばプログラムの説明が欲しい場合は以下のようにすれば良さそうです。
/* プログラムを登録 */
%macro code;
data aaa;
a=10;
run;
%mend;
/* プログラムを実行 */
%code;
/* ChatGPTを実行 */
%let text = %str(%"次のSASコードの説明を書いてください。%QUOTE(%code)%");
%CHATGPT(&text.,&outdata.,&api_key);
/* 結果を出力 */
proc print data=outdata;
var role outvar;
run;
結果

今回は流行りに乗ってChatGPTのAPIを使ってみました。
ChatGPTはプログラムとの親和性は高いと思っているので、何か有用な使い方を見つけていきたいです。