つい数十時間前に、chatGPTのバージョンが上がり、世間が賑わっているようだ。
そんなわけで、私もその賑わいに参加すべく、Perl言語を手に取った。
APIを叩いて音楽を奏でようと思う。
www.perplexity.ai利用。
久しぶりのPerl言語を触るのだが、騒ぎに乗じないのもどうかと思うため、APIを発行して、動かした。
想定と結果
APIを使った結果と普通に検索した結果が同じ結果と思っていた。
しかし、違った。
APIを叩く方法は、openAI用のAPIなのか分からないが、インターネットを検索した結果のように見えない。
かなり簡素なのはさみしい。
せっかくなけなしのクレジットカードを登録しているのに、こんな結果になってしまうのか・・・。
Perlプログラム。
選んだモデル(llama-3-8b-instruct)が原因か?
use strict;
use warnings;
use LWP::UserAgent;
use JSON;
use utf8;
binmode STDOUT, ':encoding(UTF-8)';
my $url = "https://api.perplexity.ai/chat/completions";
my $payload = {
"model" => "llama-3-8b-instruct",
"messages" => [
{
"role" => "system",
"content" => "日本語での返答は日本語を使うこと。"
},
{
"role" => "user",
"content" => "日本語で自己紹介をしてください。"
},
],
"temperature" => 0,
"top_k" => 50,
"return_citations" => 1, # true
"return_images" => 1, # true
"stream" => 0, # false
"presence_penalty" => 2,
};
my $json_payload = encode_json($payload);
my $ua = LWP::UserAgent->new;
my $req = HTTP::Request->new(POST => $url);
$req->header('accept' => 'application/json');
$req->header('content-type' => 'application/json');
$req->header('authorization' => "Bearer $ENV{'PERPLEXITYAI_API'}");
$req->content($json_payload);
my $response = $ua->request($req);
if ($response->is_success) {
my $content = $response->decoded_content;
my $json = decode_json($content);
my $message_content = $json->{choices}[0]->{message}->{content};
print $message_content;
} else {
print "HTTP POST error: ", $response->status_line, "\n", $response->content;
}
上記のプログラムで、APIキーを設定する箇所は、'authorization' => "Bearer $ENV{'PERPLEXITYAI_API'}"
にある環境変数(PERPLEXITYAI_API)から取得させている行が該当箇所になる。
当然のことだが、APIキーは、さらすものではないため、プログラムにべた書きしないこと(今回のように、プログラムを公開するときなどに削除作業が不要なので便利と言うこと)。
支払い金額。
クレジットカードを登録するだけでは使えず、チャージする必要がある。
そのチャージ額がなくなったときに支払いが止まるため、懐ぐらいの寂しい私にはうれしい仕様だと思う。
1時間以上APIを叩きまくったが、1ドルどころか、1セントにもならないようだ(現在6セントだよ)。
Pricingページを確認するが、1M tokensで20セントかかるため、今回の3倍APIを叩く必要があるようだ。
私としては結構な回数叩いたつもりだったが、文字数が少なかったため、今回の金額で収まっているはず。
使いこなす場合は、跳ね上がるだろう。
余談
プログラム実行後の文字列末尾に%
記号がしがみついている。
これは何?
何にせよ、同じ阿呆なら踊らにゃ損損。
以上。