スポンサーリンク

chatGPT APIを使って文脈を理解するLINEのchatbotを作る

chatGPT
記事内に広告が含まれています。
スポンサーリンク

今回はchaGPTとLINEを使いchatbotを作っていきます。☆☆

ポイント

 ・Googleのアカウントは作成済みとして説明

 ・開発環境はGAS(GoogleAppScript)を使用

 ・文脈の保持にはGoogleスプレッドシートを使用

 ・各LINEユーザーごとに文脈を保持

早速作っていきましょう。

 

スポンサーリンク

必要なアカウントの作成

Line Developer の登録

上記リンクからLine Developerに登録し、新規プロバイダー、チャネルを作成します。

名前などは重要ではないので、自分で分かれば良いです。チャネル名はLINE公式アカウントのbotの名前になりますので、任意の名前を設定します。

チャネルを作成したら、MessagingAPIを選択します。

設定でチャネルアクセストークン(長期)を発行し、このチャネルアクセストークンを控えておきます。-①(後で使います)

 

OpenAI_APIKEYの取得

続いて次のリンクからOpenAIのAPIKEYを取得します。

OpenAI Platform
Explore developer resources, tutorials, API docs, and dynamic examples to get the most out of OpenAI's platform.

アカウントの作成は特に難しいことは無いので、画面に従い作成します。

高額請求だけは怖いので、リミッターの設定だけ確認しておきましょう。

続いてAPIKEYを作成・取得し、このKEYを控えておきます。-②

 

スポンサーリンク

GoogleAppScriptの設定

GoogleAppScript(以下GAS)ですが、web上に上がっている情報を見ると、いきなりGASを立ち上げている手順書が多いのですが、今回作るbotではスプレッドシートを使いますので、連携が必要になります。

ここの手順が大事ですので間違えずに進めていきましょう。

 

スプレッドシートの立ち上げ

まずはGoogleスプレッドシートを立ち上げます。

ファイル名等は重要ではありあませんので任意の名前にし、この画面から拡張機能、AppsScriptへ移動します。

こうすることで、このシートとGASが連携します。

 

スクリプトプロパティの設定

続いて、GASのプロパティを設定します。

設定から、プロパティにLINE_ACCESS_TOKEN、OPENAI_APIKEYを追加します。

これらには前章で作った、チャネルアクセストークン-①と、APIKEY-②を入力します。

GASのコード内にシークレットコードを直接記述すると流出するリスクがあります。

流出すると、誰でも自分のAPIを使うことが出来てしまうため、chatGPTのAPIが使い放題にされてしまう可能性があります。

それを阻止する為の手順ですので参考までに。

 

GASにテスト用コードを入力

ここでは、一旦chatGPTは置いておいて、まずはLINEに接続することを先に試してみます。

const props = PropertiesService.getScriptProperties();
function doPost(e) {
    const event = JSON.parse(e.postData.contents).events[0]
    let userMessage = event.message.text
console.log(userMessage);
    UrlFetchApp.fetch('https://api.line.me/v2/bot/message/reply', {
        'headers': {
            'Content-Type': 'application/json; charset=UTF-8',
            'Authorization': 'Bearer ' + props.getProperty('LINE_ACCESS_TOKEN'),
        },
        'method': 'post',
        'payload': JSON.stringify({
            'replyToken': event.replyToken,
            'messages': [{
                'type': 'text',
                'text': userMessage
            }]
        })
    })
}

こちらのコードをGASにコピペします。

出来上がったら、ウェブアプリとしてデプロイします。

様々なアクセス認証画面が出ますが、承認していきます。

アクセス出来るユーザーは全員に設定。途中、危険なので戻る様な画面も出ますが、そこも開いて承認していきます。

デプロイ出来たら、ウェブアプリのURLを控えます。-③

 

スポンサーリンク

動作確認

項目的にうまく入りませんでしたので、ここで1点だけ、LINE Developperの設定が入ります。

 

Webhook設定

LINE Developpersに戻りWebhookの設定を行います。

MessagingAPIの設定から、Webhook設定を編集し、GASで作ったウェブアプリのURL-③を入力します。

問題ないか、検証ボタンを押して成功の表示が出ることを確認してください。 

 

動作確認テスト

上記の手順を全て完了したら、MessagingAPIの画面にあるQRコードを読み取り、LINEで友達追加します。

LINEのメッセージを送り、オウム返しが来れば、一旦ここまでの動作確認テストが出来たことになります。

ここまで、うまく出来たでしょうか?

ここから、chatGPTを接続していきます。

 

スポンサーリンク

chatGPTに回答させる

まずは、いろいろな機能を付ける前に、chatGPTに回答してもらう様にしましょう。

const prop = PropertiesService.getScriptProperties();
const LINE_ACCESS_TOKEN = prop.getProperty("LINE_ACCESS_TOKEN");
const OPENAI_APIKEY = prop.getProperty("OPENAI_APIKEY");
function doPost(e) {
    const event = JSON.parse(e.postData.contents).events[0]
    let userMessage = event.message.text
    const requestOptions = {
        "method": "post",
        "headers": {
            "Content-Type": "application/json",
            "Authorization": "Bearer " + OPENAI_APIKEY
        },
        "payload": JSON.stringify({
            "model": "gpt-3.5-turbo",
            "messages": [{ "role": "user", "content": userMessage }]
        })
    };
    const response = UrlFetchApp.fetch("https://api.openai.com/v1/chat/completions", requestOptions);
    const responseText = response.getContentText();
    const json = JSON.parse(responseText);
    const text = json['choices'][0]['message']['content'].trim();
    UrlFetchApp.fetch('https://api.line.me/v2/bot/message/reply', {
        'headers': {
            'Content-Type': 'application/json; charset=UTF-8',
            'Authorization': 'Bearer ' + LINE_ACCESS_TOKEN
        },
        'method': 'post',
        'payload': JSON.stringify({
            'replyToken': event.replyToken,
            'messages': [{
                'type': 'text',
                'text': text
            }]
        })
    })
}

少し書式を変えたので、全てコピペして使ってください。

これにより、応答がchatGPTの回答に変わります。しっかり動いているでしょうか?

この様な形です。

chatGPTのAPIは文脈を保持する様に作られておりません。

これを次の様に応答出来るようにしていきます。

 

追加した機能は以下

  • ユーザーごとの会話履歴を保存
  • 会話の数に上限を設定
  • 各ユーザーの友達になった日、メッセージを交わした最終日の記録
  • 会話の記録はターン5回分遡って対応する

ここから先の設計はNoteの有料記事にまとまています。

ぜひご覧ください。

ご意見・ご感想などお気軽にどうぞ!