본문 바로가기
Programming/Python

ChatGPT와 Slack 연동

by BTC_.tf 2023. 5. 17.

베하. 안녕하세요, '엄'팀입니다.

 

날씨가 점점 더 무더워지고 있고, 이에 질세라 ChatGPT의 이슈 또한 식지 않고 있는 요즈음입니다. 협업 툴인 Slack에 이런 ChatGPT가 존재한다면 작업에 큰 기여가 되겠죠?

오늘은 ChatGPT와 Slack의 연동, 즉 Slack 채널에 ChatGPT Bot을 추가하도록 하는 방법에 대해 알아보겠습니다.

 

따라만 오면 방법은 쉬우니, 다른 곳 보지 말고 잘 따라와 주세요.

 


1. Slack Bot 생성

우선 Slack에서 사용할 ChatGPT Bot을 생성해봅시다.

해당 링크에 접속하여 로그인해주세요.

https://api.slack.com/apps?new_classic_app=1

 

Slack API: Applications | Slack

Your Apps Don't see an app you're looking for? Sign in to another workspace.

api.slack.com

App명과 사용할 Workspace를 지정해줍니다.

ChatGPT Bot App에 Bot을 추가해주기 위해 Bots를 선택해주세요.

이후, 해당 페이지에서 Add Legacy Bot User를 선택해주세요.

Display Name을 지정해주세요.

Display Name을 지정해주었다면 좌측 탭의 OAuth & Permissions로 이동하여 Scopes 블록에서 Add an OAuth Scope 버튼을 클릭해주세요.

더보기

OAuth Scope란 Slack Bot이 Slack Channel에서 어떤 권한을 가질 것인가를 지정하는 것입니다.

channels:historychat:write:bot OAuth Scope를 추가합니다.

더보기

channels:history는 속한 Channel의 채팅 기록을 볼 수 있는 권한이며,

chat:write:bot은 Slack에 메세지를 작성할 수 있는 권한입니다.

해당 페이지에서 OAuth Tokens for Your Workspace 블록에서 Install to Workspace 버튼을 클릭해주세요.

이후, Allow 해줍니다.

Allow 하게 된다면, OAuth Token들이 지급됩니다. 이후 사용되니 꼭 저장해주세요!

 

2. API Key 발급

ChatGPT는 Open Ai 기반의 모델 언어입니다. Open Ai는 ChatGPT를 사용할 수 있도록 API를 제공해줍니다.

해당 페이지에 접속하여 로그인 해주세요.

https://openai.com/api/

 

Product

Our API platform offers our latest models and guides for safety best practices.

openai.com

이후 자신의 프로필을 클릭하여 View API keys로 선택합니다.

Create new secret key 버튼을 클릭해주세요.

Secret Key가 발급되오니 이또한 저장해주세요!

 

3. Python Code 준비

Python Code를 이용하여 앞서 생성한 Slack Bot이 ChatGPT 역할을 가능케하도록 서버 구성을 합니다.

 

해당 명령어를 실행하여 GtiHub를 Clone해옵니다.

git clone https://github.com/workdd/ChatGPT_with_Slack

이후, Python의 실행을 위한 라이브러리를 다운로드하기 위해 다음 명령어를 실행합니다.

pip install -r requirements.txt

 

다운로드가 끝난 후, chatgpt.py 파일을 수정해줍니다.

<your-openai-api-key> 구문에 아까 저장해둔 API Key를 기입해주세요.

해당 파일은 Open AI의 API를 호출해 최신 ChatGPT 언어 모델인 text-davinci-003 모델을 가져옵니다.

import openai

# 발급받은 OpenAI API Key 기입
YOUR_API_KEY = '<your-openai-api-key>'


def ChatGPT(prompt, API_KEY=YOUR_API_KEY):
    # api key 세팅
    openai.api_key = API_KEY

    # ChatGPT API 호출 및 최신 언어 모델인 text-davinci-003을 가져옴
    completion = openai.Completion.create(
        engine='text-davinci-003'  # 'text-curie-001'  # 'text-babbage-001' #'text-ada-001'
        , prompt=prompt
        , temperature=0.5
        , max_tokens=1024
        , top_p=1
        , frequency_penalty=0
        , presence_penalty=0)

    return completion['choices'][0]['text']


def main():
    # 지문 입력 란
    prompt = input("Insert a prompt: ")
    print(ChatGPT(prompt).strip())


if __name__ == '__main__':
    main()

chatgpt.py 파일의 수정이 완료되면 main.py 파일도 수정해줍니다.

해당 파일은 실제 구동 파일이며, 이를 통해 Slack RTM 클라이언트를 통해 Slack Channel에서 @ChatGPTBot을 언급하면 정의해둔 chatgptbot 함수가 실행되는 방식입니다.

여기서도 <your-slack-bot-token> 구문에 앞서 저장한 Bot User OAuth Token을 기입해줍니다.

from slack import RTMClient
from chatgpt import ChatGPT

# 발급받은 슬랙 bot user token 기
bot_token = "<your-slack-bot-token>"

# 지속적으로 슬랙 메세지 트래킹
@RTMClient.run_on(event="message")
def chatgptbot(**payload):
    data = payload["data"]
    web_client = payload["web_client"]
    bot_id = data.get("bot_id", "")
    subtype = data.get("subtype", "")
    origin_text = data.get("text", "")
    tag_code = origin_text.split(" ")[0]

    # 메세지 정보 파악
    print(data)
    # Bot이 입력한 채팅이 아닐 경우 ChatGPT 동작
    if bot_id == "" and subtype == "" and ">" in tag_code:
        channel_id = data["channel"]
        # Extracting message send by the user on the slack
        text = data.get("text", "")
        text = text.split(">")[-1].strip()
        # 해당 메세지 입력 시간을 파악하여 답글을 달 수 있도록 지정
        message_ts = data["ts"]

        #받아온 텍스트를 ChatGPT에 전달하고 ChatGPT의 답변 저장
        response = ChatGPT(text)
        # 슬랙에 메세지 전달
        web_client.chat_postMessage(channel=channel_id, text=response, thread_ts=message_ts)


if __name__ == "__main__":
    try:
        # RTM 클라이언트 호출 및 시작
        rtm_client = RTMClient(token=bot_token)
        print("Starter Bot connected and running!")
        rtm_client.start()
    except Exception as err:
        print(err)

수정 작업이 끝났다면 다음 명령어를 통해 Code를 실행합니다.

python main.py

해당 문구가 출력된다면 성공입니다.

 

4. ChatGPT와 얘기해보자!

앞의 작업으로 Slack Channel의 App에 추가한 Bot을 언급하며 평소 ChatGPT와 대화하는 것처럼 질문해봅시다.

복잡하네요. 연애는 역시 쉽지 않습니다.


정말 간단하죠? 다들 팀원과의 협업을 위해 Slack Channel에 ChatGPT Bot을 초대해봅시다.

 

오늘의 포스팅은 여기까지입니다. 다들 다가오는 여름 대비 잘하세요! 베바.

'Programming > Python' 카테고리의 다른 글

pandas를 활용한 boto3  (0) 2023.06.14
예제로 알아보는 boto3  (0) 2023.06.02
[Python] Pycham을 이용해 AWS EC2 인스턴스 만들기  (0) 2023.01.12
[Python_Airflow] 설치 1.10버전  (0) 2022.12.27
[Python] pandas csv 생성  (0) 2022.12.15

댓글