🗨️

LINEでChatGPTを使えるようにしてみる

2022/12/04に公開1

最近話題のOpenAIのChatGPT、毎回ウェブサイトから使うのは面倒だし、誤送信してしまって使いにくいので今回はLINEで使えるようにしてみようと思う。

ちなみに金かかります。数円。多分。

今回はPython+FastAPI+LINESDK+OpenAIで作っていきます。
めちゃ簡単です。

コード

まずはコード、こういう系の記事は結局コードしか見ないのに毎回下の方まで行くのダルいので良心的な僕は最初にコードを載せておきます。

import os
import openai
from fastapi import FastAPI, Request
from linebot import LineBotApi,WebhookHandler
from linebot.exceptions import InvalidSignatureError
from linebot.models import MessageEvent,TextMessage,TextSendMessage

openai.api_key = ""
CHANNEL_ACCESS_TOKEN = ""
CHANNEL_SECRET = ""
app = FastAPI()
line_bot_api = LineBotApi(CHANNEL_ACCESS_TOKEN)
handler = WebhookHandler(CHANNEL_SECRET)

def prompt(prompt):
    response = openai.Completion.create(
        engine="text-davinci-003",
        prompt=prompt,
        temperature=0.9,
        max_tokens=300,
        top_p=1,
        frequency_penalty=0,
        presence_penalty=0.6,
    )
    return response.choices[0].text

@app.get("/")
async def root():
    return {"message": "Hello World"}

@app.post("/callback")
async def callback(request: Request):
    signature = request.headers["X-Line-Signature"]
    body = await request.body()
    try:
        handler.handle(body.decode("utf-8"), signature)
    except InvalidSignatureError:
        abort(400)
    return "OK"

@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
    if event.message.text == "Hello":
        line_bot_api.reply_message(
            event.reply_token, TextSendMessage(text="Hello World")
        )
    else:
        line_bot_api.reply_message(
            event.reply_token, TextSendMessage(text=prompt(event.message.text)[2:])
        )

Discussion

XexeXexe

この記事で使われているtext-davinci-003は、ChatGPTではありません。
ChatGPTは一番新しいモデルでtext-davinci-003はそれよりも古いモデルです。