728x90
반응형
OpenAI API를 활용한 디스코드 챗봇 만들기
이번 포스팅에서는 OpenAI의 최신 API를 사용하는 버전을 만들어보겠습니다. 이 봇은 지정된 채널에서만 사용자의 메시지에 응답하며, OpenAI API의 최신 버전과 호환됩니다.
준비 사항
- Python 3.7 이상
- discord.py 라이브러리
- openai 라이브러리 (1.0.0 이상 버전)
- python-dotenv 라이브러리
- Discord 봇 토큰
- OpenAI API 키
- 챗봇을 사용할 Discord 채널 ID
필요한 라이브러리 설치:
pip install discord.py openai python-dotenv
업데이트된 코드
ex4-openai-chatbot.py
파일을 작성합니다.
import os
import discord
from discord.ext import commands
from openai import OpenAI
from dotenv import load_dotenv
# .env 파일에서 환경 변수 로드
load_dotenv()
# Discord 봇 설정
intents = discord.Intents.default()
intents.message_content = True
bot = commands.Bot(command_prefix='!', intents=intents)
# OpenAI 클라이언트 설정
client = OpenAI(api_key=os.getenv('OPENAI_API_KEY'))
# 지정된 채널 ID
CHANNEL_ID = int(os.getenv('CHANNEL_ID'))
@bot.event
async def on_ready():
print(f'{bot.user} 봇이 준비되었습니다!')
print(f'지정된 채널 ID: {CHANNEL_ID}')
@bot.event
async def on_message(message):
if message.author == bot.user:
return
if message.channel.id != CHANNEL_ID:
return
if message.content.startswith('!chat'):
await chat(message)
async def chat(message):
try:
# '!chat ' 이후의 메시지만 추출
user_message = message.content[6:].strip()
if not user_message:
await message.channel.send("메시지를 입력해주세요. 예: !chat 안녕하세요")
return
print(f"받은 메시지: {user_message}") # 디버깅을 위한 출력
# OpenAI API를 사용하여 응답 생성
response = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": user_message}
]
)
# 생성된 응답 추출
ai_response = response.choices[0].message.content
print(f"AI 응답: {ai_response}") # 디버깅을 위한 출력
# Discord에 응답 전송
await message.channel.send(ai_response)
except Exception as e:
print(f"Error: {e}")
await message.channel.send("죄송합니다. 응답을 생성하는 중 오류가 발생했습니다.")
# Discord 봇 실행
bot.run(os.getenv('DISCORD_TOKEN'))
사용 방법
.env
파일에 다음 내용을 추가합니다:DISCORD_TOKEN=your_discord_bot_token_here OPENAI_API_KEY=your_openai_api_key_here CHANNEL_ID=your_discord_channel_id_here
- 터미널에서 봇을 실행합니다:
python ex4-openai-chatbot.py
- 지정된 Discord 채널에서 다음과 같이 명령어를 사용합니다:
!chat 안녕하세요, 오늘 날씨에 대해 알려주세요.
주의사항
- 반드시 OpenAI 라이브러리의 최신 버전(1.0.0 이상)을 사용해야 합니다.
- 올바른 채널 ID를
.env
파일에 입력해야 합니다. - 봇은 지정된 채널에서만 응답합니다.
- OpenAI API 사용량과 비용에 주의하세요.
- API 키와 봇 토큰의 보안에 유의하세요.
트러블슈팅
- 라이브러리 버전 문제:
pip install --upgrade openai
명령어로 OpenAI 라이브러리를 최신 버전으로 업그레이드하세요.
- 봇이 응답하지 않는 경우:
- 올바른 채널에서 명령어를 사용하고 있는지 확인하세요.
- 콘솔 출력을 확인하여 봇이 메시지를 받았는지 확인하세요.
CHANNEL_ID
가 올바르게 설정되었는지 확인하세요.
- API 오류가 발생하는 경우:
- OpenAI API 키가 올바른지 확인하세요.
- API 사용 한도를 초과하지 않았는지 확인하세요.
이 업데이트된 버전의 챗봇은 OpenAI API의 최신 변경사항을 반영하여 더욱 안정적으로 동작합니다. 특정 채널에서만 동작하며, 향상된 에러 처리와 디버깅 정보를 제공합니다. 이를 기반으로 더욱 발전된 Discord 챗봇을 개발해보세요!
728x90
반응형
'언어모델 LLM > 프로젝트 예제' 카테고리의 다른 글
Streamlit과 Langchain으로 TTS 지원 챗봇 만들기 (1) | 2024.07.12 |
---|---|
로컬 모델로 Streamlit 챗봇 만들기 (0) | 2024.07.12 |
Streamlit으로 PDF 추출기 만들기 (0) | 2024.07.12 |
RAG vs Non-RAG: 지하철 정보 검색 실험 (0) | 2024.07.10 |
ollama API로 간단한 애플리케이션 만들기 (0) | 2024.07.06 |