JAVA

Java로 간단한 AI 챗봇 만들기

지오준 2024. 6. 2.
반응형

AI 챗봇은 사용자의 입력에 따라 응답을 생성하는 프로그램입니다. Java를 사용하여 간단한 AI 챗봇을 만드는 방법을 살펴보겠습니다. 이 글에서는 기본적인 챗봇의 구조와 샘플 코드를 제공합니다.

1. 기본 구조

AI 챗봇의 기본 구조는 다음과 같습니다:

  1. 사용자 입력 받기
  2. 입력 처리
  3. 응답 생성
  4. 응답 반환

이를 위해 Java에서 사용자 입력을 받는 방법, 입력을 처리하는 방법, 그리고 적절한 응답을 생성하는 방법을 알아보겠습니다.

2. 샘플 코드

먼저, 콘솔을 통해 사용자 입력을 받고 간단한 규칙 기반으로 응답을 생성하는 챗봇을 만들어보겠습니다.

import java.util.Scanner;

public class SimpleChatBot {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String userInput;

        System.out.println("안녕하세요! 저는 챗봇입니다. 무엇을 도와드릴까요?");
        
        while (true) {
            System.out.print("You: ");
            userInput = scanner.nextLine();
            
            if (userInput.equalsIgnoreCase("종료")) {
                System.out.println("챗봇: 안녕히 가세요!");
                break;
            }
            
            String response = generateResponse(userInput);
            System.out.println("챗봇: " + response);
        }
        
        scanner.close();
    }
    
    private static String generateResponse(String input) {
        // 간단한 규칙 기반 응답 생성
        if (input.contains("안녕")) {
            return "안녕하세요!";
        } else if (input.contains("이름")) {
            return "저는 간단한 챗봇입니다.";
        } else if (input.contains("날씨")) {
            return "오늘 날씨는 맑습니다.";
        } else {
            return "무슨 말씀인지 잘 모르겠어요.";
        }
    }
}

3. 코드 설명

  1. Scanner를 이용한 사용자 입력 받기:
    • Scanner 클래스를 사용하여 콘솔로부터 사용자 입력을 받습니다.
    • nextLine() 메서드를 통해 사용자의 입력을 문자열로 읽어옵니다.
  2. 사용자 입력 처리 및 응답 생성:
    • generateResponse 메서드에서 간단한 규칙 기반으로 응답을 생성합니다.
    • 입력된 문자열에 특정 키워드가 포함되어 있는지 검사하여 적절한 응답을 반환합니다.
  3. 종료 조건:
    • 사용자가 "종료"라고 입력하면 챗봇이 종료됩니다.

4. 확장 가능성

위의 간단한 챗봇을 확장하여 더 복잡한 대화를 처리할 수 있습니다. 예를 들어, 키워드 기반이 아닌 자연어 처리(NLP) 기법을 도입하거나, 데이터베이스와 연동하여 더 많은 정보를 제공할 수 있습니다.

확장 예시: 외부 API 사용

날씨 정보를 제공하기 위해 외부 API를 사용하여 실제 날씨 데이터를 가져올 수 있습니다. 이를 위해서는 API 키와 HTTP 클라이언트 라이브러리가 필요합니다.

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
import org.json.JSONObject;

public class WeatherChatBot {
    private static final String API_KEY = "your_api_key_here";
    private static final String WEATHER_API_URL = "http://api.openweathermap.org/data/2.5/weather?q=%s&appid=%s&units=metric";

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String userInput;

        System.out.println("안녕하세요! 저는 챗봇입니다. 무엇을 도와드릴까요?");
        
        while (true) {
            System.out.print("You: ");
            userInput = scanner.nextLine();
            
            if (userInput.equalsIgnoreCase("종료")) {
                System.out.println("챗봇: 안녕히 가세요!");
                break;
            }
            
            String response = generateResponse(userInput);
            System.out.println("챗봇: " + response);
        }
        
        scanner.close();
    }
    
    private static String generateResponse(String input) {
        if (input.contains("안녕")) {
            return "안녕하세요!";
        } else if (input.contains("이름")) {
            return "저는 간단한 챗봇입니다.";
        } else if (input.contains("날씨")) {
            String city = input.replace("날씨", "").trim();
            return getWeather(city);
        } else {
            return "무슨 말씀인지 잘 모르겠어요.";
        }
    }
    
    private static String getWeather(String city) {
        try {
            String urlString = String.format(WEATHER_API_URL, city, API_KEY);
            URL url = new URL(urlString);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("GET");

            BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            String inputLine;
            StringBuffer content = new StringBuffer();

            while ((inputLine = in.readLine()) != null) {
                content.append(inputLine);
            }
            in.close();
            conn.disconnect();
            
            JSONObject weatherData = new JSONObject(content.toString());
            return String.format("%s의 날씨는 %s°C 입니다.", city, weatherData.getJSONObject("main").getDouble("temp"));
        } catch (Exception e) {
            return "날씨 정보를 가져오는 중 오류가 발생했습니다.";
        }
    }
}

위의 코드에서는 OpenWeatherMap API를 사용하여 특정 도시의 날씨 정보를 가져와서 사용자에게 응답합니다. API 키를 your_api_key_here 부분에 입력해야 합니다.

결론

이 글에서는 Java로 간단한 AI 챗봇을 만드는 방법을 알아보았습니다. 기본적인 규칙 기반 챗봇을 구현하고, 외부 API를 사용하여 기능을 확장하는 방법도 살펴보았습니다. 이를 바탕으로 더 복잡하고 유용한 챗봇을 개발할 수 있습니다.

반응형

댓글