API 사용법 - ssingi/open-source-project GitHub Wiki
-
이 챗봇은
Rasa
프레임워크를 기반으로 하며, 복잡하거나 지능적인 여행 추천을 위해Google Gemini API
를 활용 -
내부적으로
gemini_url = f"https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key={gemini_api_key}"
와 같은 방식으로 Gemini API를 호출 -
gemini_api_key
는Google Cloud Console
에서 발급받아.env
또는 환경변수로 관리
-
Google Cloud console
에서Gemini API Key
발급 후Gemini API
호출
Gemini API 호출 예시
class ActionGeminiFallback(Action):
def name(self) -> Text:
return "action_gemini_fallback"
def run(self, dispatcher: CollectingDispatcher,
tracker: Tracker,
domain: Dict[Text, Any]) -> List[Dict[Text, Any]]:
# 사용자의 마지막 메시지(질문) 추출
user_msg = tracker.latest_message.get("text", "")
gemini_api_key = os.getenv("GEMINI_API_KEY")
gemini_url = f"https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key={gemini_api_key}"
if not gemini_api_key:
dispatcher.utter_message(text="⚠️ Gemini API 키 오류")
return []
if not user_msg:
dispatcher.utter_message(text="⚠️ 유효한 질문이 없습니다")
return []
# Gemini API 요청 헤더 및 데이터 구성
headers = {"Content-Type": "application/json"}
data = {"contents": [{"parts": [{"text": user_msg}]}]}
try:
# Gemini API에 POST 요청
response = requests.post(gemini_url, headers=headers, json=data, timeout=30)
if response.status_code == 200:
# 응답에서 답변 텍스트 추출
res_json = response.json()
gemini_answer = res_json.get("candidates", [{}])[0].get("content", {}).get("parts", [{}])[0].get("text", "답변을 생성할 수 없습니다.")
# 답변이 2000자를 넘을 경우 분할하여 전송 (디스코드 메시지 제한 대응)
chunks = split_text(f"Gemini의 답변: {gemini_answer}")
for chunk in chunks:
dispatcher.utter_message(text=chunk)
else:
error_msg = f"⚠️ API 호출 실패 (코드: {response.status_code})"
dispatcher.utter_message(text=error_msg[:2000])
except Exception as e:
error_msg = f"🔌 연결 오류: {str(e)}"
dispatcher.utter_message(text=error_msg[:2000])
return []
-
Bot 탭에서
Presence Intent
/Server Members Intent
/Message Content Intent
설정 켜두기 및 Token 발급 -
OAuth2 탭에서 아래의 설정 대로 한 후 url 생성
OAuth2 설정
- 사용할 Discord 서버에 초대
-
Discord
메시지를 수신하면Rasa NLU
에 전달하여intent
를 판별 -
Rasa
가 처리 불가능한 질문은fallback
으로Gemini API
에 넘기고, 응답 결과를Discord
채널에 전송
-
Gemini API
호출 실패 시 재시도 로직 또는 사용자에게 에러 메시지를 안내 -
API 사용량 제한(쿼터) 및 비용 관련은 처음 사용시 90일 혹은 특정 크레딧까지는 무료로 사용이 가능