こんにちは
ChatGPTのプロンプト色々と調べて質問するのに最近ハマっているオビ―です。
はじめに
LINEbotですぐに質問できる自分だけのChatGPT的なの作れたら面白いなーと思って試してみた記事です。
自己満足で作成した内容を忘れないうちに記事にしているのでロジックがイケていないだとか、やりかたブサイクだとかめっちゃあるかと思いますが優しい目で見てもらえたらうれしいです!
作ったのは下記です。
前提
各サービスのアカウント作成方法などは詳細に書いていない為、適宜調べながら作成お願いします。
利用するサービス
1:OpenAIのアカウント作成
OpenAI API
上記でアカウント作成してから下記にアクセスし「SEACRET KEY」を取得
Account API Keys - OpenAI API
2:LINEDeveloperのアカウント作成
LINE Developers
上記よりアカウントを作成しておく
3:AWSのアカウント作成
アマゾン ウェブ サービス(AWS クラウド)- ホーム (amazon.com)
上記からアカウント作成
手順
早速作っていきます。
1:PythonのOpenAIモジュールを落としてくる
pip install openai
インストールされたモジュール群を「python」フォルダ作成してそこに移動させてzipで圧縮
2:Lambdaのコード作成
Lambda→関数作成→Pythonで作成
※python3.8で作っていました。
関数名は任意、下記コードをコピーして貼り付ける
import logging
import os
import urllib.request
import json
import openai
logger = logging.getLogger()
logger.setLevel(logging.INFO)
def lambda_handler(event, context):
message_event = json.loads(json.dumps(event))["events"]
reply_token = message_event[0]["replyToken"]
message = message_event[0]["message"]["text"]
openai.api_key = os.environ['OPEN_APIKEY']
res = openai.Completion.create(
model='text-davinci-003',
prompt=message,
temperature=0,
max_tokens=1000,
top_p=1.0,
frequency_penalty=0.0,
presence_penalty=1.0
)
res_text = ''.join([choice['text'] for choice in res.choices])
url = "https://api.line.me/v2/bot/message/reply"
headers = {
"Content-Type": "application/json",
'Authorization': 'Bearer ' + os.environ['ACCESS_TOKEN']
}
data = {
'replyToken': reply_token,
'messages': [
{
"type": "text",
"text": res_text.lstrip("\n"),
}
]
}
req = urllib.request.Request(url=url, data=json.dumps(data).encode("utf-8"), method="POST", headers=headers)
with urllib.request.urlopen(req) as res:
logger.info(res.read().decode("utf-8"))
return {
"statusCode": 200,
"body": json.dumps("Hello from Lambda!")
}
※コード汚いとかは内緒で。。。
上記コードで一応動いています。。
3:Lambdaのレイヤーにモジュールアップロード
コード書いているところの最下部に「レイヤーの追加」というのがあるのでそこから1で作成していた「python.zip」ファイルをアップロードして追加する
4:Lambdaの環境変数設定
コード上に直接トークンやKeyなどを書きたくないので環境変数に登録します。
今回はOpenAIのAPIキーとLINEのAccessトークンを設定します。
Lambda関数→設定→環境変数
から追加できます。
「OPEN_APIKEY」にOpenAIのAPIキー
「ACCESS_TOKEN」にLINEのAccessトークン
を設定しています。
前提2で作成したLINEDeveloperでアプリを作成し下記添付の「Channel access token」部分を環境変数に適用
・OpenAIのKey
前提1で作成したアカウントで「SECRET KEY」を作成して環境変数に設定
5:AWSのAPIGatewayの設定
APIGatewayを使ってアクセスできるようにします。
自分は「APIの作成」からRestAPIを選択して作成しました。
登録後Lambdaで作った関数を指定します。
設定後「リソース」→「アクション」→「APIのデプロイ」すると下記添付のように青枠のURL出てくるのでURLをどこかにメモしておきます。
※個人で好きに作っているだけなので設定などはデフォルトのままでprod一択です笑
6:LINEDeveloperのWebhook URLを設定
下記添付のWebhook URLの場所に5で作ったURLを設定
7:Lambdaのコードを自分の好みに書き換えて遊ぶ
Lambdaのコードで「Deply」してもらうことで好きに書き換えれるのでAPIのパラメータを書き換えながら試してみてください!
以上です!
PS
LINEのBot作成する際に一度名前決めると変更できないのでChatGPTbotって書いたがOpenAIのAPIを使ったbotなので後で名前変えようかなーと思います。。