[메신저봇R] 카카오톡 ChatGPT 챗봇 만들기 (코드 설명)

카카오톡 ChatGPT 챗봇 만들기 

카카오톡 메신저에서 ChatGPT API를 활용하여 대화형 봇을 구현하는 방법을 소개합니다.

이 챗봇은 메시지를 받아 GPT 모델에 전달하고, 응답을 다시 카카오톡으로 보내주는 기능을 합니다.

코드 설명

// 봇의 이름을 설정합니다.
const scriptName = "gpt";

// OpenAI API 키를 저장하는 변수입니다. 실제 사용시에는 본인의 API 키로 교체해야 합니다.
let key = "your_api_key!!";

// 메시지를 받았을 때 실행되는 메인 함수입니다.
function response(room, msg, sender, isGroupChat, replier, imageDB, packageName) {
    // 메시지가 "!챗 "으로 시작하는지 확인합니다.
    if (msg.startsWith("!챗 ")) {
        // "!챗 " 이후의 텍스트만 추출합니다.
        cmd = msg.substr(3);
        // GPT 응답을 받아서 채팅방에 전송합니다.
        replier.reply("[답변] \n" + getResponse(cmd));
    }
}

// ChatGPT API에 요청을 보내고 응답을 받는 함수입니다.
function getResponse(msg) {
    let result;
    // API 요청에 필요한 데이터를 설정합니다.
    let data = {
        "model": "gpt-4o",
        "messages": [
            {
                "role": "user",
                "content": msg
            }
        ],
        "temperature": 0,
        "max_tokens": 1024,
        "top_p": 1,
        "frequency_penalty": 0.0,
        "presence_penalty": 0.0
    }

    try {
        // Jsoup 라이브러리를 사용하여 API 요청을 보냅니다.
        let response = org.jsoup.Jsoup.connect("https://api.openai.com/v1/chat/completions")
            .header("Content-Type", "application/json")
            .header("Authorization", "Bearer " + key)
            .requestBody(JSON.stringify(data))
            .ignoreContentType(true)
            .ignoreHttpErrors(true)
            .timeout(200000)
            .post();

        // API 응답을 텍스트로 받습니다.
        let responseText = response.text();
        // 디버깅을 위해 응답 로그를 남깁니다.
        Log.d("API Response:", responseText);

        // JSON 응답을 파싱합니다.
        let result1 = JSON.parse(responseText);

        // API 응답에서 실제 메시지 내용을 추출합니다.
        if (result1.choices && result1.choices.length > 0 && result1.choices[0].message) {
            result = result1.choices[0].message.content;
        } else {
            // 응답 구조가 예상과 다를 경우 에러 메시지를 반환합니다.
            result = "API 응답 구조가 예상과 다릅니다: " + JSON.stringify(result1);
        }
    } catch(e) {
        // 에러 발생 시 에러 메시지를 반환합니다.
        result = "오류 발생: " + e.toString();
    }
    return result;
}

사용 방법

  1. OpenAI API 키를 발급받아 key 변수에 입력합니다.
  2. 카카오톡 메신저봇R 앱에 코드를 넣고 실행합니다.
  3. 채팅방에서 !챗 [질문내용] 형식으로 메시지를 보냅니다.
    • 예: !챗 안녕하세요

주요 특징

  • 간단한 명령어: !챗 으로 시작하는 메시지만 처리
  • 에러 처리: try-catch 문을 통해 API 호출 중 발생하는 오류에 대응
  • 디버깅 로그: API 응답을 로그로 기록하여 문제 해결에 도움
  • 유연한 설정: temperature, max_tokens 등 GPT 모델의 다양한 매개변수를 조정할 수 있어 맞춤형 응답을 제공

커스터마이징을 하려면?

  1. temperature 조정
    • temperature 값을 변경하여 응답의 창의성을 조절 가능
    • 0에 가까울수록 일관된 응답을 제공하며, 1에 가까울수록 다양한 응답을 생성
  2. max_tokens 조정
    • max_tokens 값을 변경하여 응답의 길이를 제한 가능
  3. GPT 모델 선택
    • 다른 GPT 모델을 사용하려면 "model" 값을 원하는 모델로 변경하면 됨
728x90