
들어가며
요즘 인공지능 기술이 발전하면서 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 카카오톡 채널 생성하기
- 카카오 비즈니스에 접속하여 로그인합니다.
- 좌측 상단의 '채널'을 클릭한 후 '카카오톡 채널 시작하기'를 선택합니다.
- 채널 정보를 입력하고 채널을 생성합니다.
5.2 챗봇 생성하기
- 카카오 비즈니스에서 '채널' > '챗봇'으로 이동합니다.
- '봇 만들기' > '카카오톡 챗봇'을 선택합니다.
- 봇 이름을 입력하고 확인을 누릅니다.
5.3 채널과 챗봇 연결하기
- 채널 관리자센터에서 '서비스 연결' > '챗봇 설정하기'로 이동합니다.
- 챗봇 관리자센터에서 '설정' > '카카오톡 채널 선택'에서 앞서 만든 채널을 선택합니다.
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. 카카오톡 챗봇 스킬 설정하기
- 챗봇 관리자센터에서 '스킬' > '스킬 만들기'를 선택합니다.
- 스킬 이름을 입력하고 'API 형식'을 선택합니다.
- 앞서 복사한 ngrok URL + '/message' 경로를 API URL로 입력합니다.
(예: https://abcd1234.ngrok.io/message) - '저장' 버튼을 클릭하여 스킬을 생성합니다.
9. 블록 생성 및 스킬 연결하기
- 챗봇 관리자센터에서 '블록' > '블록 만들기'를 선택합니다.
- 블록 이름을 입력하고 '확인'을 누릅니다.
- '스킬 데이터 사용'을 선택하고, 앞서 만든 스킬을 연결합니다.
- 사용자 발화 예시를 추가합니다. (예: "안녕", "뭐해?", "날씨 어때?" 등)
- '저장' 버튼을 클릭하여 블록을 생성합니다.
10. 폴백 블록 설정하기
사용자의 모든 메시지를 AI로 처리하려면 폴백 블록을 설정해야 합니다.
- 챗봇 관리자센터에서 '폴백 블록'으로 이동합니다.
- '스킬 데이터 사용'을 선택하고, 앞서 만든 스킬을 연결합니다.
- '저장' 버튼을 클릭하여 설정을 완료합니다.
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와 카카오톡 챗봇을 활용해 보세요!
참고 자료
'AI > Ollama' 카테고리의 다른 글
Ollama-OCR, 이제 Python 패키지로 간편하게 사용하세요! (4) | 2025.05.11 |
---|---|
Ollama 설치 (0) | 2025.05.05 |