Top image

Perl Monk

主にPerlとRaspberryPiの個人的技術研鑽

ChatGPTのAPIをPerlで叩く方法

2023/04/09 10:00
category:Perl

ChatGPTに直接聞いてみたら、なんか古い方法しかでてこなかったので。

適当にやったんで細かいところは確認してないです。

あと他にパラメータがある様子なんですが、ちょっといじっても変化がよくわからなかったので省きました。

言語モデルはgpt-3.5-turboパターンです。

LWP::UserAgentとlwp::protocol::httpsが必要ですがそこらへんは割愛します。

会話を続けるには、やり取りの経緯をroleをつかって全て入力する必要があります。

面白いので、またちまちま何かしてみようかと思います。

#!/usr/bin/perl
use strict;
use warnings;
use LWP::UserAgent;
use JSON;
use Encode;
use utf8;
my $API_KEY = "取得したAPIキー";
my $input = "こんにちは、あなたは誰ですか。";
my $ua = LWP::UserAgent->new;
my $req = HTTP::Request->new(
 POST => 'https://api.openai.com/v1/chat/completions'
);
$req->header('Content-Type' => 'application/json');
$req->header('Authorization' => 'Bearer ' . $API_KEY);
my %post_data = (
	"model" => "gpt-3.5-turbo",
	"messages" => [
		{
			"role" => "user",
			"content" => $input,
		}
	],
);
$req->content(encode_json(\%post_data));
my $resp = $ua->request($req);
if ($resp->is_success) {
    my $resp_data = decode_json($resp->decoded_content);
	print Encode::encode('utf-8',$resp_data->{choices}->[0]->{message}->{content}."\n");
    my $tokens = $resp_data->{usage}->{total_tokens};
    print Encode::encode('utf-8',"使用トークン数:".$tokens."\n");
} else {
    die $resp->status_line;
}

実行結果)

こんにちは、私はOpenAIのAIアシスタントです。どうぞ何でもおっしゃってください。

使用トークン数:48