본문 바로가기
AI/Ollama

Ollama와 카카오톡 챗봇 연동하기: 로컬 AI 모델로 나만의 챗봇 만들기

by 루이스파파 2025. 5. 7.
728x90
반응형



들어가며

요즘 인공지능 기술이 발전하면서 ChatGPT와 같은 대형 언어 모델(LLM)을 활용한 서비스가 많아지고 있습니다. 하지만 대부분의 서비스는 클라우드 기반으로 제공되어 개인정보 보안 문제나 비용 문제가 발생할 수 있습니다. 이런 상황에서 로컬 환경에서 AI 모델을 실행할 수 있는 Ollama와 카카오톡 챗봇을 연동하면 개인 서버에서 운영되는 나만의 AI 챗봇을 만들 수 있습니다.
이 글에서는 Ollama를 설치하고 로컬 환경에서 LLM을 실행한 후, 이를 카카오톡 챗봇과 연동하는 전체 과정을 단계별로 알아보겠습니다.

1. Ollama란?

Ollama는 로컬 환경에서 대형 언어 모델(LLM)을 쉽게 실행할 수 있게 해주는 오픈소스 프로젝트입니다. 복잡한 설정 없이 간단한 명령어로 다양한 AI 모델을 다운로드하고 실행할 수 있습니다.

"Get up and running with large language models, locally." - Ollama 공식 사이트

Ollama의 주요 특징:

  • 로컬 환경에서 LLM 실행 가능
  • 다양한 모델 지원 (Llama, Mistral, DeepSeek 등)
  • API 제공으로 다른 애플리케이션과 연동 가능
  • 메모리 요구사항에 따라 다양한 크기의 모델 선택 가능

2. Ollama 설치하기

macOS 설치

brew install ollama

Linux 설치

curl -fsSL https://ollama.com/install.sh | sh

Windows 설치

Windows의 경우 Ollama 공식 사이트에서 설치 파일을 다운로드하여 설치할 수 있습니다.

3. Ollama 실행 및 모델 다운로드

Ollama를 설치한 후, 서버를 실행하고 원하는 모델을 다운로드합니다.

# Ollama 서버 실행
ollama serve

# 새 터미널에서 모델 다운로드 및 실행
ollama run llama3

처음 실행 시 모델을 다운로드하는 데 시간이 걸릴 수 있습니다. 다운로드가 완료되면 터미널에서 바로 모델과 대화할 수 있습니다.

4. Python으로 Ollama API 사용하기

Ollama는 API를 제공하므로 Python을 사용하여 쉽게 연동할 수 있습니다. 먼저 필요한 라이브러리를 설치합니다.

pip install langchain langchain_community requests

다음은 Ollama API를 사용하는 간단한 Python 코드입니다:

from langchain_community.llms import Ollama

# Ollama 모델 초기화
llm = Ollama(model="llama3")

# 모델에 질문하기
response = llm("한국의 전통 음식에 대해 알려줘")
print(response)

5. 카카오톡 챗봇 설정하기

카카오톡 챗봇을 만들기 위해서는 먼저 카카오 비즈니스 계정과 카카오톡 채널이 필요합니다.

5.1 카카오톡 채널 생성하기

  1. 카카오 비즈니스에 접속하여 로그인합니다.
  2. 좌측 상단의 '채널'을 클릭한 후 '카카오톡 채널 시작하기'를 선택합니다.
  3. 채널 정보를 입력하고 채널을 생성합니다.

5.2 챗봇 생성하기

  1. 카카오 비즈니스에서 '채널' > '챗봇'으로 이동합니다.
  2. '봇 만들기' > '카카오톡 챗봇'을 선택합니다.
  3. 봇 이름을 입력하고 확인을 누릅니다.

5.3 채널과 챗봇 연결하기

  1. 채널 관리자센터에서 '서비스 연결' > '챗봇 설정하기'로 이동합니다.
  2. 챗봇 관리자센터에서 '설정' > '카카오톡 채널 선택'에서 앞서 만든 채널을 선택합니다.

6. Flask 서버 구축하기

카카오톡 챗봇과 Ollama를 연동하기 위해 Flask 서버를 구축합니다.

pip install flask

다음은 간단한 Flask 서버 코드입니다:

from flask import Flask, request, jsonify
from langchain_community.llms import Ollama

app = Flask(__name__)

# Ollama 모델 초기화
llm = Ollama(model="llama3")

@app.route('/message', methods=['POST'])
def handle_message():
    # 카카오톡에서 전송된 데이터 파싱
    req = request.get_json()
    user_message = req['userRequest']['utterance']

    # Ollama 모델에 질문하기
    response = llm(user_message)

    # 카카오톡 응답 형식에 맞게 변환
    res = {
        "version": "2.0",
        "template": {
            "outputs": [
                {
                    "simpleText": {
                        "text": response
                    }
                }
            ]
        }
    }

    return jsonify(res)

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

7. 서버 배포하기

로컬에서 개발한 서버를 인터넷에 공개해야 카카오톡 챗봇과 연동할 수 있습니다. 여러 방법이 있지만, 간단하게 ngrok을 사용하는 방법을 소개합니다.

# ngrok 설치
pip install pyngrok

# ngrok으로 서버 공개
ngrok http 5000

ngrok이 제공하는 URL(예: https://abcd1234.ngrok.io)을 복사해둡니다.

8. 카카오톡 챗봇 스킬 설정하기

  1. 챗봇 관리자센터에서 '스킬' > '스킬 만들기'를 선택합니다.
  2. 스킬 이름을 입력하고 'API 형식'을 선택합니다.
  3. 앞서 복사한 ngrok URL + '/message' 경로를 API URL로 입력합니다.
    (예: https://abcd1234.ngrok.io/message)
  4. '저장' 버튼을 클릭하여 스킬을 생성합니다.

9. 블록 생성 및 스킬 연결하기

  1. 챗봇 관리자센터에서 '블록' > '블록 만들기'를 선택합니다.
  2. 블록 이름을 입력하고 '확인'을 누릅니다.
  3. '스킬 데이터 사용'을 선택하고, 앞서 만든 스킬을 연결합니다.
  4. 사용자 발화 예시를 추가합니다. (예: "안녕", "뭐해?", "날씨 어때?" 등)
  5. '저장' 버튼을 클릭하여 블록을 생성합니다.

10. 폴백 블록 설정하기

사용자의 모든 메시지를 AI로 처리하려면 폴백 블록을 설정해야 합니다.

  1. 챗봇 관리자센터에서 '폴백 블록'으로 이동합니다.
  2. '스킬 데이터 사용'을 선택하고, 앞서 만든 스킬을 연결합니다.
  3. '저장' 버튼을 클릭하여 설정을 완료합니다.

11. 배포하기

모든 설정이 완료되면 '배포' 버튼을 클릭하여 챗봇을 배포합니다. 배포가 완료되면 카카오톡에서 해당 채널을 검색하여 대화를 시작할 수 있습니다.

12. 고급 기능: 대화 기록 저장하기

사용자와의 대화 기록을 저장하고 관리하기 위해 Redis를 활용할 수 있습니다.

from flask import Flask, request, jsonify
from langchain_community.llms import Ollama
import redis
import json
import uuid

app = Flask(__name__)

# Ollama 모델 초기화
llm = Ollama(model="llama3")

# Redis 연결
r = redis.Redis(host='localhost', port=6379, db=0)

@app.route('/message', methods=['POST'])
def handle_message():
    # 카카오톡에서 전송된 데이터 파싱
    req = request.get_json()
    user_id = req['userRequest']['user']['id']
    user_message = req['userRequest']['utterance']

    # 사용자 대화 기록 가져오기
    chat_history_key = f"chat:{user_id}"
    chat_history = []

    if r.exists(chat_history_key):
        chat_history = json.loads(r.get(chat_history_key))

    # 사용자 메시지 추가
    chat_history.append({"role": "user", "content": user_message})

    # 컨텍스트를 포함한 프롬프트 생성
    context = "\n".join([f"{msg['role']}: {msg['content']}" for msg in chat_history[-5:]])
    prompt = f"이전 대화:\n{context}\n\n위 대화를 참고하여 답변해주세요."

    # Ollama 모델에 질문하기
    response = llm(prompt)

    # 봇 응답 추가
    chat_history.append({"role": "assistant", "content": response})

    # 대화 기록 저장
    r.set(chat_history_key, json.dumps(chat_history))

    # 카카오톡 응답 형식에 맞게 변환
    res = {
        "version": "2.0",
        "template": {
            "outputs": [
                {
                    "simpleText": {
                        "text": response
                    }
                }
            ]
        }
    }

    return jsonify(res)

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

13. 성능 최적화 팁

13.1 모델 선택

  • 작은 모델(예: llama3:8b)은 빠르지만 성능이 제한적
  • 큰 모델(예: llama3:70b)은 성능이 좋지만 하드웨어 요구사항이 높음
  • 한국어 성능이 좋은 모델 선택 (예: llama3-korean-blossom)

13.2 하드웨어 요구사항

  • 7B 모델: 최소 8GB RAM
  • 13B 모델: 최소 16GB RAM
  • 33B 이상 모델: 최소 32GB RAM 이상

13.3 응답 시간 개선

  • 첫 응답은 모델 로딩 시간으로 인해 느릴 수 있음
  • 서버 시작 시 모델 미리 로딩하기
  • 응답 캐싱으로 반복 질문에 대한 응답 시간 단축

14. 활용 사례

14.1 고객 서비스 챗봇

  • 자주 묻는 질문에 대한 답변 제공
  • 24시간 고객 응대 가능

14.2 개인 비서 챗봇

  • 일정 관리, 알림 설정
  • 정보 검색 및 요약

14.3 교육용 챗봇

  • 학습 내용 질의응답
  • 개념 설명 및 예제 제공

마치며

이 글에서는 Ollama를 사용하여 로컬 환경에서 LLM을 실행하고, 이를 카카오톡 챗봇과 연동하는 방법을 알아보았습니다. 이 방법을 통해 개인정보를 클라우드에 저장하지 않고도 강력한 AI 챗봇을 구축할 수 있습니다.
Ollama와 카카오톡 챗봇의 조합은 개인 프로젝트부터 소규모 비즈니스까지 다양한 용도로 활용할 수 있습니다. 또한 오픈소스 모델을 사용하기 때문에 비용 부담 없이 AI 기술을 경험할 수 있다는 장점이 있습니다.
여러분만의 창의적인 아이디어로 Ollama와 카카오톡 챗봇을 활용해 보세요!

참고 자료

728x90
반응형

'AI > Ollama' 카테고리의 다른 글

Ollama-OCR, 이제 Python 패키지로 간편하게 사용하세요!  (4) 2025.05.11
Ollama 설치  (0) 2025.05.05