
이번 포스팅에서는 위의 예시처럼 ChatGPT을 텔레그램 봇으로 만들 것이다.
이미 카카오톡에도 비슷한 기능이 있지만 직접 만들어보면 재밌기 때문이다.
파이썬으로 ChatGPT 봇 제작하기 1 —필요한 라이브러리 설치하기
먼저 필요한 라이브러리를 설치해야 한다.
터미널에서 다음 명령을 실행하여 python-telegram-bot라이브러리를 설치한다.
pip install python-telegram-bot
openai라이브러리도 설치한다.
pip install openai
먼저 라이브러리가 최신 버전의 Telegram API와 호환되는지 확인을 해봐야 한다.
방법은 간단한데 먼저 터미널에서 파이썬 인터프리터를 실행시키자.
그 다음 아래 명령어를 입력하여 오류가 발생하는지 확인하자.
import telegram
from telegram.ext import Updater, MessageHandler, Filters
오류가 발생하지 않는다면 다음 과정으로 넘어가고 그렇지 않다면 터미널에서 pip install python-telegram-bot==13.7명령어를 실행하여 라이브러리 재설치를 하고 다시 확인해보자.
파이썬으로 ChatGPT 봇 제작하기 2 — 텔레그램 봇 생성 및 API 토큰 발급받기
이제 텔레그램 봇을 만들고 API 토큰을 발급받아야 한다.
- 모바일 기기나 데스크탑에서 텔레그램 앱을 열고 BotFather(@BotFather)봇을 검색한다.
- BotFather와 채팅창을 연 다음
/newbot메시지를 보내 새 봇을 만든다. - BotFather는 봇의 이름을 선택하라고 요청할 것이다.
예를 들어, 맨 위의 gif 파일처럼 "ChatGPT_bot"과 같이 이름을 지어주자. - 이름을 선택하고나면 BotFather는 봇의 사용자 이름을 선택하라고 요청할 것이다.
이때 사용자의 이름은_bot으로 끝나야 한다.
중복되지 않을 때까지 이것저것 넣어보자. - 사용자 이름까지 선택하고나면 BotFather가 API 토큰을 줄 것이다.
이 API 토큰은 Telegram API를 통해 봇과 통신하는 데 사용할 고유 식별자이다.
발급받은 토큰은 텔레그램의 BotFather 대화창에서 언제든지 확인할 수 있다.
파이썬으로 ChatGPT 봇 제작하기 3 — OpenAI API Key 발급받기
- OpenAI 웹사이트(https://openai.com/)로 이동하여 페이지 오른쪽 상단에 있는 Sign up 버튼을 클릭하여 계정을 만들자.
참고로, 기존에 웹에서 ChatGPT을 사용해봤다면 그때 가입한 계정으로 따로 계정 생성 없이 로그인이 가능하다. - 아무튼 로그인이 되었다면 API 키를 발급받는 페이지(https://platform.openai.com/account/api-keys)에 들어가자.
- + Create new secret key을 눌러 API키를 발급받자.
이때 팝업으로 키가 뜨는데, 가장 중요한 것은 API 키를 복사하든 적어두든 잘 보관해야 한다는 것이다.
팝업 창을 닫으면 다시는 키를 볼 수 없기 때문이다.(물론 다시 발급받으면 되는데 귀찮다.)
여기까지 준비되어야하는 것들은 파이썬 라이브러리와 텔레그램 API 토큰과 및 OpenAI의 API 키이다.
파이썬으로 ChatGPT 봇 제작하기 4 — 파이썬 코드 만들기
아래 코드를 붙여넣자.
import telegram
from telegram.ext import Updater, MessageHandler, Filters
import openai
# Replace with your Telegram bot API token
telegram_token = 'YOUR_API_TOKEN'
# Replace with your OpenAI API key
openai.api_key = 'YOUR_API_KEY'
# Initialize the Telegram bot
bot = telegram.Bot(token=telegram_token)
print("Telegram bot initialized.")
# Define a function to handle incoming messages
def handle_message(update, context):
message = update.message.text
print(f"Received message: {message}")
# Call the OpenAI API to generate a response
response = openai.Completion.create(
engine="text-davinci-002",
prompt=message,
max_tokens=128,
n=1,
stop=None,
temperature=0.8,
presence_penalty=0.6,
)
print(f"Generated response: {response.choices[0].text}")
# Send the response back to the user
context.bot.send_message(chat_id=update.effective_chat.id, text=response.choices[0].text)
print("Response sent.")
# Start the Telegram bot
updater = Updater(token=telegram_token, use_context=True)
dispatcher = updater.dispatcher
dispatcher.add_handler(MessageHandler(Filters.text & ~Filters.command, handle_message))
updater.start_polling()
print("Bot started, listening for incoming messages...")
코드 위 부분의 telegram_token의 'YOUR_API_TOKEN'부분과 openai.api_key의 'YOUR_API_KEY'부분을 발급받은 것들로 바꿔넣자.
모두 따옴표 안에 집어넣어야한다. (따옴표는 살아있어야 한다. 내가 프로그래밍 뉴비일 때 이런 거에서 고생을 많이 했다.)
그리고 곳곳에 프린트 구문으로 잘 동작하고 있는지 나타나게 하였다. 필요없으면 지우자.
중간의 response = openai.Completion.create의 파라미터의 설명은 다음과 같다.
engine: 응답 생성에 사용할 GPT-3 모델을 지정한다. 작고 빠른 모델에서 더 크고 강력한 모델에 이르기까지 여러 모델을 사용할 수 있는데, 위 코드에서는 text-davinci-002을 사용했다.prompt: 응답을 생성하는데 사용되는 입력 프롬프트나 메시지를 지정한다.max-tokens: 응답에서 최대 토큰 수(단어 및 문장 부호)를 지정한다. 기본 값은 60이고 값이 높을수록 응답이 길어지고 값이 낮을 수록 응답이 짧아진다.n: 생성할 응답 수를 지정한다.stop: 응답 생성을 중지할 토큰의 순서를 지정한다. 위의 코드에서는 stop 시퀀스를 지정하지 않았고 이는 응답이 무기한 계속될 수 있음을 뜻한다.temperature: 생성된 응답의 무작위성을 제어한다. 높은 값은 보다 다양하고 창의적인 응답을 생성하는 반면 낮은 값은 보다 예측 가능하고 안전한(?) 응답을 생성한다.presence_penalty: 대화에서 동일한 응답을 여러 번 생성하는 모델의 경향을 조정하는 데 사용되는 파라미터이다. 값이 높을 수록 새롭고 다양한 답을 생성할 가능성이 높아지며 낮을 수록 모델이 반복적인 응답을 생성한다.
이제 토큰과 키를 잘 붙여넣고 파라미터를 조정하고 싶다면 조정한 다음 코드를 실행시키자.
파이썬으로 ChatGPT 봇 제작하기 5 — 실행하기
코드를 실행시켰다면 이제 기기나 데스크탑에서 텔레그램을 열자.
연락처 탭에서 2-3과정에서 만든 이름을 검색하여 봇을 찾은 다음 채팅방을 열자.
이제 ChatGPT와 대화를 시작할 수 있다.
만들어 써 보니까 질문에 대한 답은 하는데 일상적인 대화를 걸면 이상한 소리를 한다.
아마 engine 문제 같기는 한데 이것은 우리가 해결할 수 있는 게 아니니 그냥 넘어가자.
'머신 러닝 > Python' 카테고리의 다른 글
| [Python] 재귀 함수(Recursive Function)와 예제(팩토리얼, 이항계수 계산) (0) | 2024.01.02 |
|---|---|
| [Python] 예제를 통해 알아보는 파이썬 yield 활용법, 메모리 사용량 비교하기 (1) | 2023.04.28 |
| [KakaoTalk] 파이썬으로 카카오톡 메시지 봇 만들기 (5) | 2023.02.23 |
| [Python] 예제를 통해 알아보는 파이썬 멀티프로세싱 / Multi-processing, pool (0) | 2023.02.19 |
| [Python] 파이썬 가상환경 구축 / Build a Virtual Environment (1) | 2023.02.15 |