はじめに
プログラミングに詳しくない私ですが、ChatGPTを使って「ご注文はうさぎですか?」のココアちゃんのLINEチャットボットを作ることができました。今回はその作成方法と流れを共有します。
失敗から学ぶ
最初はノーコードツールを試しましたが、うまくいきませんでした。そこで、ChatGPTにコードを書いてもらい、何とか完成させることができました。
手順概要
- LINEとChatGPTそれぞれのAPI準備
- APIを使うコード作成
- 無料のwebホスティングサービスでコードを実行
- LINEでチャットボットを楽しむ
それでは、1つずつ詳しく説明していきます。
アカウント作成して右上のNew projectをクリック。
ChatGPTには、「hello-express」テンプレートを選択するよう言われたけどそんなものはなかった。似たような「glitch-hello-node」を選択した。
左側にファイル名が並ぶと思うので「package.json」を開いて中身を以下に編集(そのまますべて上書きで張り付け)
"name": "line-chatbot",
"version": "1.0.0",
"main": "server.js",
"scripts": {
"start": "node server.js"
},
"dependencies": {
"express": "^4.17.1",
"axios": "^0.21.1"
}
}
次は「server.js」を以下に書き換え(APIkey等はこの後設定します)。緑マーカーの部分は皆さんの用途に合わせて書き換えてください(この後説明します)。
const express = require('express');
const axios = require('axios');
const app = express();
app.use(express.json());
// 環境変数からLINEとOpenAIのAPIキーを取得
const lineToken = process.env.LINE_CHANNEL_ACCESS_TOKEN;
const openAiKey = process.env.OPENAI_API_KEY;
// Webhookエンドポイントの設定
app.post('/webhook', async (req, res) => {
const events = req.body.events;
for (let event of events) {
// メッセージイベントの処理
if (event.type === 'message' && event.message.type === 'text') {
const userMessage = event.message.text;
const systemMessage = 'あなたはシャロ、真面目で努力家でクールな女の子です。あなたの目標は、ユーザーと建設的な会話をし、ユーザーを支援することです。';
try {
// OpenAI APIへのリクエスト
const response = await axios.post('https://api.openai.com/v1/chat/completions', {
model: 'gpt-4o',
messages: [
{ role: 'system', content: systemMessage },
{ role: 'user', content: userMessage }
],
max_tokens: 150,
}, {
headers: {
'Authorization': `Bearer ${openAiKey}`,
'Content-Type': 'application/json'
}
});
const aiMessage = response.data.choices[0].message.content.trim();
// LINE APIへのリクエスト
await axios.post('https://api.line.me/v2/bot/message/reply', {
replyToken: event.replyToken,
messages: [{
type: 'text',
text: aiMessage,
}]
}, {
headers: {
'Authorization': `Bearer ${lineToken}`,
'Content-Type': 'application/json'
}
});
} catch (error) {
console.error('Error during OpenAI API call:', error.response ? error.response.data : error.message);
res.status(500).send('Internal Server Error');
return; // エラーが発生した場合、これ以上の処理を中断します。
}
}
}
res.status(200).send('OK');
});
// サーバーのポート設定
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
console.log(`Server is running on port ${PORT}`);
});
1つめの緑マーカーがGPTにどんなキャラになってもらうかプロンプトを書いてます。自由に書き換えて使ってください。ただ、トークン消費量の関係上、安くしたい人は英語で書くことをおすすめします。私はChatGPTに英語に翻訳してもらい、プロンプトの最後に日本語で会話してください、と付け加えてます。
2つめのマーカーがChatGPTのモデルです。好きなの選んでください。
3つめが一回の発言(出力)でのトークン消費量の最大値の設定。あくまで出力。
1つめのマーカーのプロンプトやLINE上でおくったメッセージなどの入力トークンは別カウントなので注意。
最後に「.env」ってファイルに自分のChatGPTのAPIkeyとLINEのチャンネルアクセストークン書き込む
LINE_CHANNEL_ACCESS_TOKEN=YOUR_LINE_CHANNEL_ACCESS_TOKEN
OPENAI_API_KEY=YOUR_OPENAI_API_KEY
緑の部分を実際のものに書き換えて下さい。なんかテキストエディタじゃなくて書き込めない場合は画面上部の「PLAINTEXT」ってとこ押せばテキストエディタになります。
あとはctrl+s押して保存してね。
4.完成だお。
画面下のLOGSおすとサーバーいずランニングで英語で出てると思うから、1で作成したLINE公式アカウントになんか送ってみて。
いろいろ書いたけど、たぶんそううまくいかないと思う。
なのでChatGPTに1から相談することをお勧めする。実際自分も完成させるまでに何度も失敗してますし、そのたびにエラー貼り付けて質問攻めしてました。
俺でもできたんだからあなたにもできる。
あなたにこの動画を送ります
マジでわかんなかったらXに連絡頂戴。DMはスパム認定されて通知こないのでリプライぶん投げてくれればこっちからDMおくります。