─━ IT ━─

[Python] 파이썬으로 챗봇 만들기 (보카딜로 웹프레임워크, 웹소켓 사용) 1편

DKel 2021. 1. 18. 22:15
반응형

#Bocadillo는 무엇입니까?

Bocadillo는 Python 비동기 및 ASGI 웹 프레임 워크로 성능이 뛰어나고,

동시성이 높은 웹 API를 재미있고 누구나 액세스 할 수 있도록 합니다.

 

생산적인

Bocadillo는 웹 API를 최대한 쉽게 구축, 테스트 및 배포 할 수 있도록 설계된 ASGI 웹 프레임워크입니다.

모듈성에 중점을 두고 철저한 문서를 보유하고 있으며, 타사 비동기 라이브러리와 원활하게 통합됩니다.

 

실시간 가능

비동기 프로그래밍을 수용하고 내장된 WebSocket 및 SSE 지원을 사용하여

실시간 동시 시스템을 설계합니다.

 

성능

Bocadillo는 번개처럼 빠른 ASGI 툴킷 및 웹서버 인 Starlette 및 Uvicorn을 최대한 활용합니다.

 

요구사항

Python 3.6 ++ (이미 설치되었다고 가정하겠습니다.)

 

시사점

WebSocket을 사용하여 실시간으로 여러 연결을 처리합니다.

REST 엔드포인트를 만듭니다.

공급자를 사용하여 재사용 가능한 리소스를 뷰에 삽입합니다.

pytest를 사용하여 Bocadillo 웹 애플리케이션을 테스트합니다.

 

세팅 방법

 

설치

mkdir ~/dev/bocadillo-chatbot
cd ~/dev/bocadillo-chatbot

특정 디렉토리 (위 예제는 ~(root) 디렉터리에 /dev/bocadillo-chatbot 폴더 생성) 에 작업할 폴더 생성.

 

# Note: pytz is required by chatterbot.
pipenv install bocadillo chatterbot pytz

pipenv를 이용하여 bocadillo, chatterbot, pytz를 설치합니다.

 

touch app.py

app.py를 init 해줍니다.

 

$ tree
.
├── Pipfile
├── Pipfile.lock
└── app.py

구성이 다음과 같을 것입니다.

 

# app.py
from bocadillo import App

app = App()

if __name__ == "__main__":
    app.run()

app.py 파일을 확인하고, 틀린 점이 있다면 다음과 같이 작성합니다.

 

python app.py

app.py 를 실행합니다.

http://localhost:8000/ 를 호출했을 때 404 에러가 떨어지면 정상입니다.

Ctrl + C 를 이용하여 어플리케이션을 종료하고, endpoint 하나를 app.py에 작성해줍시다.

 

@app.websocket_route("/conversation")
async def converse(ws):
    async for message in ws:
        await ws.send(message)

이것은 ws://localhost:8000/conversation 위치에 액세스 할 수 있는 WebSocket 엔드포인트를 정의합니다.

ws://에 대한 비동기는 WebSocket을 통해 수신된 메시지를 반복합니다.

마지막으로 await ws.send(message)는 수신된 메시지를 있는 그대로 클라이언트로 보냅니다.

 

클라이언트단 소스도 만들어서 테스트를 진행해보겠습니다.

# client.py
import asyncio
from contextlib import suppress
import websockets


async def client(url: str):
    async with websockets.connect(url) as websocket:
        while True:
            message = input("> ")
            await websocket.send(message)
            response = await websocket.recv()
            print(response)


with suppress(KeyboardInterrupt):
    # See asyncio docs for the Python 3.6 equivalent to .run().
    asyncio.run(client("ws://localhost:8000/conversation"))

client.py

 

$ python client.py
> Hi!
Hi!
> Is there anyone here?
Is there anyone here?
>

이제 서버와 클라이언트가 통신 할 수 있게 되었습니다.

에코 구현을 실제 지능적이고 친숙한 챗봇으로 대체하기 위해서는 ChatterBot을 활용해야 합니다.

chatbot.py 파일을 만들고 거기에 특정 명명을 지닌 챗봇을 추가합니다.

 

# chatbot.py
from chatterbot import ChatBot
from chatterbot.trainers import ChatterBotCorpusTrainer

somename = ChatBot("Somename")

trainer = ChatterBotCorpusTrainer(somename)
trainer.train(
    "chatterbot.corpus.english.greetings", "chatterbot.corpus.english.conversations"
)

chatbot.py

 

다음 편에 진행됩니다.

 

 

[참고 URL]

Bocadilo 파이썬 웹프레임워크 URL: bocadilloproject.github.io/

 

Bocadillo | Python async web framework

 

bocadilloproject.github.io

 

lemondkel - Overview

4-Year Web programmer. lemondkel has 38 repositories available. Follow their code on GitHub.

github.com

반응형