본문으로 건너뛰기

카카오톡 AI 챗봇 제작 가이드

image-20241104-070152.png

1. 소개

카카오톡 AI 챗봇은 카카오톡 채널을 통해 사용자가 자연스럽게 소통하며 다양한 작업을 자동화할 수 있는 대화형 인터페이스입니다. 본 가이드는 LaaS(LLM as a Service)를 활용하여 카카오톡 AI 챗봇을 설계, 개발, 배포하는 과정을 상세히 설명합니다.

1.1 LaaS와 카카오톡 AI 챗봇의 개요

LaaS(LLM as a Service)는 대규모 언어 모델(LLM)을 기반으로 AI 서비스를 쉽고 빠르게 구축할 수 있는 강력한 도구입니다. LaaS는 다양한 LLM(OpenAI GPT 시리즈, Naver Clova, Claude 등)을 지원하며, 기존 챗봇이 제공하던 기능의 한계를 극복하고 새로운 가능성을 열어줍니다.

LaaS의 주요 강점

  1. 다양한 LLM 선택

    • LaaS는 OpenAI, Claude, Solar Mini 등 다양한 LLM을 지원하여 목적에 맞는 최적의 모델을 선택할 수 있습니다.
  2. 쉽고 빠른 개발 환경

    • 프리셋(Preset) 기반의 작업 환경과 샌드박스 기능을 통해 신속한 개발과 테스트가 가능합니다.
  3. 유연한 확장성

    • 그룹-프로젝트-프리셋 구조를 기반으로 데이터를 체계적으로 관리하여 효율성을 극대화합니다.

기존 카카오톡 챗봇의 한계와 LLM의 극복

  • 기존 카카오톡 챗봇은 정해진 스크립트와 조건 기반 응답만을 제공해 복잡한 대화 흐름을 처리하는 데 한계가 있었습니다.

  • LLM을 활용하면 다음과 같은 이점을 제공합니다.

    • 자연어 이해: 사용자 의도를 보다 정교하게 파악

    • 상황 맞춤형 응답: 고도화된 대화 흐름 처리

    • 데이터 활용: 사용자 데이터를 기반으로 한 맞춤형 응답 가능



1.2 LaaS와 카카오톡 챗봇 연동의 기대 효과

LaaS를 활용하여 카카오톡 챗봇을 개발하면 다음과 같은 효과를 기대할 수 있습니다.

  1. 고도화된 대화 기능

    • 단순한 FAQ 응답을 넘어 복잡한 질의에 대해 유연한 대화가 가능합니다.
  2. 사용자 맞춤형 경험 제공

    • 개인화된 서비스 제공으로 사용자 만족도 향상
  3. 운영 효율성 증가

    • 반복 작업의 자동화와 인건비 절감
  4. 서비스 확장성 향상

    • 다양한 도메인에 적합한 모델을 선택하고 통합 가능

1.3 사용자 흐름

카카오톡 AI 챗봇과 LaaS의 연동 흐름은 다음과 같습니다.

  1. 사용자가 카카오톡 채널에서 메시지를 입력합니다. (사용자의 발화 또는 요청)

  2. 카카오 챗봇 스킬 서버가 사용자의 요청을 수신합니다.

  3. 스킬 서버는 LaaS API를 호출하여 메시지를 분석하고 적합한 응답을 생성합니다.

  4. 생성된 응답은 콜백 서버를 통해 다시 카카오톡으로 전달됩니다.

  5. 사용자는 챗봇의 답변을 실시간으로 확인합니다.


1.4 카카오 챗봇 설정 및 LaaS 통합

카카오톡 AI 챗봇의 가장 핵심적인 설정은 스킬 서버 연동입니다. 카카오 챗봇 관리자센터에서 스킬 서버를 등록하고, 발화에 따라 적절한 스킬 서버가 호출되도록 설정합니다. 나머지 주요 기능과 세부 설정은 모두 LaaS를 통해 관리할 수 있습니다.

LaaS에서 제공하는 주요 설정

  1. 프롬프트 작성 및 프리셋 관리

    • LaaS에서 대화 흐름과 응답 구조를 관리하여 챗봇의 전체적인 성능을 설정합니다.
  2. 외부 API 호출을 위한 Function Calling 기능

    • 사용자가 입력한 정보에 따라 외부 API를 호출하여 실시간 데이터를 가져오거나 동적 응답을 생성할 수 있습니다.
  3. 샌드박스 기능을 통한 테스트

    • 다양한 시나리오를 사전에 테스트하여 응답 품질을 개선할 수 있습니다.

1.5 카카오 챗봇 특화 기능과 LLM 활용

카카오 챗봇은 기존에도 다양한 특화 기능을 제공하며, LLM과 연동하면 이를 더욱 효과적으로 사용할 수 있습니다.

  1. 카카오톡 메시지 템플릿 활용

    • LLM의 응답 데이터를 카카오톡의 템플릿 형식(텍스트, 이미지, 카드 등)에 맞게 변환하여 사용자에게 전달할 수 있습니다.
  2. 다양한 발화 유형 처리

    • 기존에는 정해진 패턴만 처리할 수 있었던 반면, LLM을 통해 자연어로 표현된 발화도 유연하게 대응할 수 있습니다.
  3. 실시간 데이터 연동

    • Function Calling 기능을 활용해 사용자 요청에 따라 외부 데이터를 실시간으로 가져오고 활용할 수 있습니다.

1.6 기대 효과 요약

LaaS와 카카오톡 AI 챗봇의 통합은 다음과 같은 혁신적인 효과를 제공합니다.

  1. 사용자 요청에 대해 더욱 유연하고 자연스러운 응답 제공

  2. 대화 품질 향상과 더불어 카카오톡 특화 기능의 시너지 효과

  3. 외부 시스템과 연동하여 동적 데이터 활용 가능



2. 환경 준비

LaaS와 카카오톡 AI 챗봇을 연동하기 위한 환경을 설정하는 단계입니다. 이 가이드는 MacOS와 Windows 환경 모두를 고려하여 작성되었으며, GCP 프로젝트 생성, Firebase CLI 설치, LaaS API 정보 설정 등 필요한 준비 과정을 포함합니다.

2.1 MacOS 및 Windows 환경에서의 기본 설정

MacOS와 Windows에서의 필수 개발 도구 설치 및 환경 설정을 진행합니다.


2.1.1 Node.js 설치

  1. Node.js 공식 웹사이트에서 Node.js를 다운로드합니다.

  2. OS에 맞는 설치 파일을 선택하여 설치를 완료합니다.


2.1.2 Firebase CLI 설치

  1.  Firebase CLI를 설치하려면 다음 명령을 실행합니다.
npm install -g firebase-tools
  1. 설치 확인
firebase --version

2.1.3 GCP SDK 설치 (선택 사항)

  • Windows: GCP SDK 다운로드 링크에서 설치 파일을 다운로드합니다.

  • MacOS: 다음 명령어로 GCP SDK를 설치합니다

brew install --cask google-cloud-sdk
  • 설치 후 gcloud init 명령어를 실행하여 GCP 계정을 초기화합니다.

2.2 GCP 프로젝트 생성 및 Cloud Functions 설정

2.2.1 GCP 프로젝트 생성

  1. Google Cloud Console에 접속하여 새 프로젝트를 만듭니다.

  2. 프로젝트 ID를 확인하여 기록해 둡니다.


2.2.2 Cloud Functions API 활성화

  1. Google Cloud Console에서 API 및 서비스라이브러리로 이동합니다.

  2. Cloud Functions API를 검색하고 활성화합니다.


2.2.3 서비스 계정 키 생성

  1. IAM 및 관리자서비스 계정 메뉴로 이동합니다.

  2. 새 서비스 계정을 생성하고 JSON 키 파일을 다운로드합니다.

  3. 키 파일을 Firebase CLI와 함께 사용할 수 있도록 준비합니다.


2.3 Firebase CLI 설치 및 초기화

2.3.1 Firebase 프로젝트 연결

  1. Firebase CLI를 통해 GCP 프로젝트를 Firebase에 연결합니다
firebase login
firebase init
  1. Functions를 선택하고, 기존 GCP 프로젝트를 선택합니다.

2.3.2 Firebase Functions 초기화

  1. Firebase Functions 디렉토리를 생성합니다.
mkdir functions && cd functions
  1.   기본 파일 설치
npm install

2.4 LaaS API 키, 프로젝트 ID, 프리셋 해시코드 확인 및 설정

LaaS를 활용하여 AI 챗봇 응답을 처리하기 위해 필요한 API 키와 프로젝트 정보를 설정합니다.


2.4.1 LaaS API 정보 확인

  1. LaaS 에디터에 접속하여 로그인합니다.

  2. 프로젝트 선택 후 프리셋을 생성합니다.

  3. API 키, 프로젝트 ID, 프리셋 해시코드를 복사하여 기록합니다.


2.4.2 LaaS API 정보 코드에 설정

  • Firebase Functions 코드에 LaaS API 정보를 다음과 같이 설정합니다.
const LAAS_CONFIG = {
API_URL: 'https://api-laas.wanted.co.kr/api/preset/v2/chat/completions',
PROJECT_ID: '프로젝트_ID',
API_KEY: 'API_KEY',
HASH: '프리셋_해시코드',
};
  • 이 설정은 functions/index.js 파일에 포함되어야 합니다.

환경 준비가 완료되었으면, 스킬 서버와 콜백 서버를 구현하여 LaaS와 카카오톡 AI 챗봇을 연결할 수 있습니다.




3. 카카오톡 스킬 서버 구현

카카오톡 AI 챗봇과 LaaS를 연결하기 위해 스킬 서버를 구현합니다. 이 서버는 사용자 발화를 처리하고 LaaS API를 통해 생성된 응답을 카카오톡 사용자에게 전달하는 역할을 합니다. 아래에서 스킬 서버 구현 과정과 주요 기능을 자세히 설명합니다.


3.1 스킬 서버 코드 작성

Firebase Functions를 사용하여 스킬 서버를 구현합니다. 이 서버는 다음과 같은 프로세스를 따릅니다

  • 사용자 요청(발화 메시지, 사용자 ID, 콜백 URL)을 수신하고 검증합니다.

  • 카카오톡에 즉시 응답을 반환하여 대기 시간을 최소화합니다.

  • LaaS API를 호출하여 사용자 요청에 대한 응답 메시지를 생성합니다.

  • 생성된 응답을 콜백 URL로 전달하여 최종 사용자에게 표시됩니다.


주요 스킬 서버 코드 흐름

  1. 사용자 요청 검증: 발화 메시지와 콜백 URL을 확인.

  2. 즉시 응답: `useCallback`을 사용해 빠른 초기 응답 제공.

  3. LaaS API 호출: 발화 메시지를 LaaS로 전달해 결과 생성.

  4. 콜백 URL로 응답 전송: 생성된 결과를 콜백을 통해 사용자에게 전달.


주요 코드 예제

  • 사용자가 입력한 발화를 LaaS API로 처리하고, 콜백으로 응답을 전송하는 코드 구조를 포함
const functions = require('firebase-functions');
const axios = require('axios');

// 환경 설정
const LAAS_CONFIG = {
API_URL: 'LaaS API의 호출 URL을 입력합니다.',
PROJECT_ID: '프로젝트 식별자(Project ID)를 입력합니다.',
API_KEY: 'LaaS에서 발급받은 API 키를 입력합니다.',
HASH: '프리셋의 고유 해시코드를 입력합니다.',
};

// 마크다운 제거 함수
function removeMarkdown(text) {
return text
.replace(/\*\*(.*?)\*\*/g, '$1') // 볼드체 제거
.replace(/\*(.*?)\*/g, '$1') // 이탤릭체 제거
.replace(/`(.*?)`/g, '$1') // 인라인 코드 제거
.replace(/```[\s\S]*?```/g, '') // 코드 블록 제거
.replace(/\[(.*?)\]\((.*?)\)/g, '$1') // 링크 제거
.replace(/#{1,6}\s/g, '') // 헤더 제거
.replace(/\n\s*[-*+]\s/g, '\n• ') // 리스트 통일
.replace(/\n\s*\d+\.\s/g, '\n• ') // 숫자 리스트 통일
.trim();
}

// 카카오 챗봇 스킬 서버
exports.kakaobot = functions.https.onRequest(async (req, res) =--> {
console.log('=== 새로운 요청 시작 ===');
console.log('[Request Body]', JSON.stringify(req.body, null, 2));

try {
// 요청 파라미터 검증
const userMessage = req.body?.userRequest?.utterance;
const callbackUrl = req.body?.userRequest?.callbackUrl;
const userId = req.body?.userRequest?.user?.id;

if (!userMessage || !callbackUrl) {
throw new Error('필수 파라미터가 누락되었습니다.');
}

// 즉시 응답 (useCallback: true)
res.status(200).json({
version: '2.0',
useCallback: true,
data: {
text: '답변을 생성하고 있습니다. 잠시만 기다려주세요...',
},
});

// 비동기로 LaaS 처리 및 콜백 전송
processLaaSAndCallback(userMessage, callbackUrl, userId);
} catch (error) {
console.error('[Initial Error]', error);
res.status(200).json({
version: '2.0',
template: {
outputs: [{
simpleText: {
text: '죄송합니다. 요청을 처리하는 중 오류가 발생했습니다.',
},
}],
},
});
}
});

// LaaS 처리 및 콜백 전송 함수
async function processLaaSAndCallback(userMessage, callbackUrl, userId) {
try {
console.log('[Processing] Started for userId:', userId);

// LaaS API 호출 및 응답 받기
const laasResponse = await callLaaSAPI(userMessage);
console.log('[LaaS] Final Response:', laasResponse);

// 카카오 콜백 응답 포맷
const callbackPayload = {
version: '2.0',
template: {
outputs: [{
simpleText: {
text: laasResponse,
},
}],
},
};

console.log('[Callback Payload]', JSON.stringify(callbackPayload, null, 2));

// 콜백 URL로 응답 전송
const callbackResponse = await axios.post(callbackUrl, callbackPayload, {
headers: { 'Content-Type': 'application/json' },
timeout: 50000,
});

console.log('[Callback Success] userId:', userId, 'Status:', callbackResponse.status);
} catch (error) {
console.error('[Process Error] userId:', userId, 'Error:', error);

// 에러 발생시에도 콜백 시도
try {
await axios.post(callbackUrl, {
version: '2.0',
template: {
outputs: [{
simpleText: {
text: '죄송합니다. 응답 생성 중 오류가 발생했습니다. 잠시 후 다시 시도해 주세요.',
},
}],
},
});
} catch (callbackError) {
console.error('[Callback Error] userId:', userId, 'Error:', callbackError);
}
}
}

// LaaS API 호출 함수
async function callLaaSAPI(userMessage) {
try {
console.log('[LaaS Request] Message:', userMessage);

const response = await axios({
method: 'post',
url: LAAS_CONFIG.API_URL,
headers: {
'Content-Type': 'application/json',
'project': LAAS_CONFIG.PROJECT_ID,
'apiKey': LAAS_CONFIG.API_KEY,
},
data: {
messages: [{
role: 'user',
content: userMessage + ' (마크다운 형식 없이 일반 텍스트로 응답해주세요)',
}],
hash: LAAS_CONFIG.HASH,
},
timeout: 30000,
});

console.log('[LaaS Raw Response]', JSON.stringify(response.data, null, 2));

// choices 배열에서 응답 추출 및 마크다운 제거
if (response.data?.choices && response.data.choices.length > 0) {
const message = response.data.choices[0].message;
if (message?.content) {
const cleanText = removeMarkdown(message.content);
console.log('[Cleaned Response]', cleanText);
return cleanText;
}
}

return '응답을 처리할 수 없습니다.';
} catch (error) {
console.error('[LaaS API Error]', error.response?.data || error.message);
throw new Error('LaaS API 호출 중 오류가 발생했습니다.');
}
}

3.2 LaaS API 연동

스킬 서버는 LaaS API를 사용해 사용자 발화를 처리하고 적합한 응답을 생성합니다. 이 과정은 다음과 같은 방식으로 진행됩니다.

  1. 발화 메시지 전달: 사용자 입력을 LaaS API로 전송하여 적절한 결과 생성.

  2. 응답 데이터 처리: LaaS API에서 받은 응답을 사용자에게 적합한 형식으로 변환.

  3. 오류 처리: API 호출 중 오류가 발생하면 기본 응답을 제공하거나 로그에 기록.


LaaS API 요청 구성

{
“messages”: [{“role”: “user”, “content”: “안녕하세요”}],
“hash”: “프리셋 해시코드”
}

3.3 사용자 발화와 응답 매핑

스킬 서버는 사용자 발화를 받아 LaaS API를 통해 처리한 결과를 사용자에게 전달합니다. 다음은 일반적인 매핑 예제입니다:


응답 매핑 예제

  • 사용자 입력: "좋은 책 추천해줘."

  • AI 응답: "오늘은 'The Alchemist'를 추천드려요. 스토리가 정말 감동적이에요."


위와 같은 방식으로 간단한 문구 생성 및 추천과 같은 대화형 응답을 제공합니다. 실시간 데이터가 필요하지 않은 정적 응답에 적합합니다.


3.4 카카오 메시지 템플릿 활용

스킬 서버는 기본 텍스트 응답 외에도 다양한 메시지 템플릿을 지원합니다. 이를 활용하여 더 나은 사용자 경험을 제공합니다:


  • 단순 텍스트 메시지: 사용자의 요청에 대해 텍스트로 응답.

  • 이미지 추가 템플릿: 이미지와 함께 정보를 전달.

  • 버튼 포함 템플릿: 링크나 동작 버튼을 추가하여 인터랙션 강화.


템플릿 활용 예제

  • 단순 텍스트

    • 사용자: "위로가 필요해"

    • AI: "힘들 땐 잠시 쉬어가도 괜찮아요. 당신은 충분히 잘하고 있어요. 😊"

  • 버튼 템플릿

    • 사용자: "더 자세히 알고 싶어"

    • AI: "관련 정보를 확인하시려면 아래 버튼을 눌러주세요."

      • 버튼: "자세히 보기"

3.5 스킬 서버 테스트

구현 후, 카카오톡 관리자센터에서 발화를 통해 스킬 서버를 테스트하세요

  1. 발화 메시지 입력 : 사용자 메시지를 입력하여 스킬 서버가 제대로 작동하는지 확인.

  2. 응답 확인 : LaaS API와의 통신이 원활하며, 응답이 카카오톡에 표시되는지 검증.

  3. 오류 처리 확인 : 예외 상황에서 적절한 기본 메시지가 반환되는지 점검.


이 단계를 통해 카카오톡 챗봇이 사용자 발화를 처리하고 LaaS API 응답을 사용자에게 전달하는 기본 기능을 완성할 수 있습니다.





4. Firebase Functions 배포 및 테스트

Firebase Functions를 활용하여 구현된 스킬 서버를 배포하고, 이를 테스트하여 정상 작동 여부를 확인하는 과정을 다룹니다. 이 단락에서는 Firebase Functions 배포 및 테스트, 디버깅, 최적화까지 모든 단계를 자세히 설명합니다.


4.1 Firebase Functions 배포

Firebase Functions 배포는 스킬 서버를 클라우드에 업로드하여 실시간 사용자 요청을 처리할 수 있도록 준비하는 중요한 단계입니다.

4.1.1 Firebase CLI를 사용한 배포 명령 실행

  1. Firebase CLI가 설치되어 있는지 확인
firebase --version

명령어를 통해 Firebase CLI 버전을 확인합니다. 설치되어 있지 않다면 Firebase CLI 설치 가이드를 참조하세요.


  1. Functions 디렉토리로 이동

Firebase 프로젝트 디렉토리에서 functions 폴더로 이동합니다.

cd functions

  1. 배포 명령 실행
firebase deploy --only functions
  • 이 명령어는 Firebase에 스킬 서버 코드를 배포합니다.

  • 배포가 성공적으로 완료되면 생성된 함수 URL이 출력됩니다.

  • 예시 출력:

✔ Deploy complete!
Function URL (kakaobot): https://<region-->-<project-id>.cloudfunctions.net/kakaobot

4.2 배포된 함수 확인 및 URL 복사

Firebase Console에서 함수 URL 확인

  1. Firebase Console에 접속하고 프로젝트를 선택합니다.

  2. 좌측 메뉴에서 Functions를 클릭합니다.

  3. 배포된 함수 목록에서 생성된 URL을 확인하고 복사합니다.


4.3 배포 후 테스트

4.3.1 Postman 또는 cURL을 사용한 테스트

Postman 또는 cURL로 HTTP 요청을 보내 배포된 스킬 서버를 테스트합니다.

  • 요청 예시 (cURL)
curl -X POST https://<region-->-<project-id>.cloudfunctions.net/kakaobot \
-H "Content-Type: application/json" \
-d '{
"userRequest": {
"utterance": "안녕하세요",
"callbackUrl": "https://callback-url.example.com",
"user": { "id": "user123" }
}
}'

  • 예상 응답
{
  "version": "2.0",
  "useCallback": true,
  "data": {
    "text": "답변을 생성하고 있습니다. 잠시만 기다려주세요..."
  }
}

4.3.2 카카오톡 관리자센터를 사용한 테스트

  1. 카카오톡 관리자센터에 접속하여 스킬 서버 URL을 등록합니다.

  2. 발화 메시지를 입력하여 챗봇 응답이 정상적으로 반환되는지 확인합니다.


4.4 Firebase Functions 디버깅 및 로그 확인


4.4.1 Firebase Console에서 로그 확인

  1. Firebase Console에 접속하여 프로젝트를 선택합니다.

  2. 좌측 메뉴에서 Functions를 클릭합니다.

  3. 특정 함수를 선택하고 로그(Log) 탭에서 실행 내역을 확인합니다.

  • 로그 예시
=== 새로운 요청 시작 ===
[Request Body] { userRequest: { utterance: '안녕하세요', user: { id: 'user123' } } }
[Processing] Started for userId: user123
[LaaS Request] Message: 안녕하세요

4.4.2 Firebase CLI를 통한 실시간 로그 확인

Firebase CLI를 사용하여 실시간 로그를 모니터링합니다.

firebase functions:log

  • 특정 함수 로그만 보고 싶다면 다음 명령어를 사용합니다.
firebase functions:log --only kakaobot

4.5 성능 최적화 및 비용 관리

4.5.1 응답 시간 최적화

  • LaaS API 호출 최적화: 응답 데이터 크기를 줄이고 불필요한 요청을 제거합니다.

  • 함수 메모리 및 타임아웃 설정 조정: Firebase Console에서 함수의 메모리 크기와 실행 시간을 최적화합니다.


4.5.2 Firebase 비용 관리

  • 사용량 모니터링: Firebase Console의 사용량 대시보드를 통해 호출 빈도 및 비용을 모니터링합니다.

  • 함수 호출 제한 설정: 트래픽이 예상보다 많을 경우 호출 제한을 설정하여 불필요한 비용을 방지합니다.


4.6 배포 후 점검 체크리스트

  • HTTP 상태 코드 확인

    • 모든 요청에 대해 상태 코드 200이 반환되는지 확인합니다.
  • 응답 데이터 검증

    • LaaS API에서 반환된 데이터가 카카오톡 응답 형식에 맞게 변환되었는지 점검합니다.
  • 콜백 응답 테스트

    • 콜백 URL로 전송된 데이터가 정확히 전달되는지 확인합니다.
  • 오류 처리 테스트

    • 오류 상황에서 적절한 기본 메시지가 반환되는지 확인합니다.




5. 카카오톡 관리자센터 설정

이 단락에서는 카카오톡 관리자센터에서 AI 챗봇과 LaaS 스킬 서버를 연동하고 콜백 설정을 완료하는 방법을 안내합니다. 기본 시나리오의 폴백 블록을 활용하여 AI 챗봇과 스킬 서버가 올바르게 작동하도록 설정합니다.


5.1 챗봇 생성

AI 챗봇을 사용하려면 먼저 카카오톡 관리자센터에서 새로운 챗봇을 생성해야 합니다.


챗봇 생성 단계

  • 챗봇 관리자센터 접속

  • 새로운 챗봇 생성

    • 챗봇 생성하기 버튼을 클릭하여 기본 정보를 입력합니다.

    • 챗봇 이름, 카테고리, 프로필 이미지를 설정합니다.

  • 생성된 챗봇 확인

    • 챗봇이 생성되면 관리자센터의 대시보드에서 확인할 수 있습니다.

5.2 스킬 서버 URL 등록

스킬 서버 URL 등록은 카카오톡과 LaaS를 연결하는 핵심 단계입니다.


스킬 서버 URL 등록 단계

  • 스킬 추가

    • 챗봇 관리자센터에서 스킬 관리 메뉴로 이동합니다.

    • 새로운 스킬을 추가하고 이름을 입력합니다.

  • 스킬 서버 URL 입력

    • Firebase Functions에서 배포한 LaaS 스킬 서버 URL을 입력합니다.

    • 예: https://[Firebase_Functions_URL]/kakaobot

image-20241227-064256.png
  • 저장 후 테스트

    • 설정을 저장한 후 스킬 테스트 기능을 사용해 서버와의 연동 상태를 확인합니다.
image-20241227-064339.png


5.3 기본 시나리오 폴백 블록 설정

기본 시나리오의 폴백 블록을 설정하여 스킬 서버가 정상적으로 작동하도록 구성합니다.


폴백 블록 설정 단계

  • 폴백 블록 진입

    • 관리자센터에서 시나리오 관리 > 기본 시나리오를 선택하고 폴백 블록으로 이동합니다.
  • 봇 응답 설정

    • 응답 추가에서 스킬데이터 를 선택합니다.
image-20241227-064426.png
  • 스킬 선택

    • 설정된 스킬 서버를 선택한 후 저장합니다.
image-20241227-064521.png

5.4 콜백 설정 활성화

AI 챗봇의 콜백 기능을 사용하려면 AI 챗봇 관리에서 설정을 활성화해야 합니다.


AI 챗봇 설정 활성화

  • AI 챗봇 관리 진입

    • 설정 탭에서 AI 챗봇 관리로 이동합니다.
  • AI 챗봇 활성화 요청

    • 상태를 ON으로 변경하고 활성화 요청 사유를 입력합니다.

    • 예: “응답시간 초과 문제 해결을 위한 AI 챗봇 전환 필요.”

  • 승인 대기

    • 카카오 측에서 요청을 검토 후 활성화를 승인합니다.

5.5 발화 테스트 및 검증

챗봇 설정이 완료되면 발화를 통해 기능을 테스트하고 올바르게 작동하는지 확인합니다.

image-20241227-064637.png

테스트 단계

  • 발화 입력

    • 챗봇 관리자센터에서 테스트 메시지를 입력하여 응답을 확인합니다.
  • 응답 확인

    • LaaS API와의 통신이 원활하며 적절한 응답이 반환되는지 검증합니다.
  • 오류 처리 검증

    • 예외 상황에서 기본 메시지가 제대로 표시되는지 점검합니다.




6. 최적화 및 유지보수

챗봇 개발이 완료된 이후에도 안정적인 운영과 효율적인 응답을 위해 지속적인 최적화와 유지보수가 필요합니다. 이 단락에서는 LaaS 기반 카카오톡 AI 챗봇의 성능을 최적화하고, 비용을 관리하며, 안정적인 운영을 위한 유지보수 방법을 다룹니다.

6.1 응답 속도 최적화

챗봇의 사용자 경험을 향상시키기 위해 응답 속도를 최적화하는 것이 중요합니다.


  • 응답 속도 최적화 방법

  • LaaS 프리셋 최적화

    • 응답 구조가 복잡하지 않은 작업에는 간단한 프리셋을 사용하여 처리 속도를 높입니다.

    • 불필요한 시스템 메시지를 줄여 요청 처리 시간을 단축합니다.

  • 모델 선택

    • 고성능 모델 대신 요청에 적합한 경량 모델을 사용하여 응답 시간을 줄입니다.

    • 예: 복잡한 질의에는 GPT-4o를, 간단한 응답에는 GPT-4o-mini를 사용.

  • 데이터 크기 관리

    • 요청 데이터와 반환 데이터의 크기를 최소화하여 API 처리 속도를 향상시킵니다.
  • 콜백 URL 최적화

    • Firebase Functions에서 비동기 응답 처리 방식을 활용하여 사용자 대기 시간을 단축합니다.

테스트 및 개선

  • 테스트 시나리오 작성: 다양한 발화 유형을 시뮬레이션하여 응답 속도를 점검합니다.

  • 지속적 모니터링: Firebase Functions와 LaaS API 호출 시간을 주기적으로 분석하고 개선점을 파악합니다.


6.2 Firebase 비용 관리

Firebase Functions를 사용하는 챗봇은 트래픽 증가에 따라 비용이 발생할 수 있으므로 효율적인 비용 관리가 필수적입니다.


비용 절감 방법

  • 함수 최적화

    • 함수 실행 시간을 줄이고 과도한 로깅을 방지하여 실행 비용을 절감합니다.

    • 불필요한 호출을 줄이기 위해 캐시를 활용합니다.

  • 트래픽 분산

    • 스케일링 설정을 통해 트래픽이 급증할 경우 추가 비용을 방지합니다.

    • 응답이 지연되지 않도록 Firebase Hosting과 함께 사용해 정적 리소스를 분리합니다.

  • 모니터링 도구 활용

    • Firebase Console에서 함수 실행 횟수, 실행 시간, 오류 비율 등을 모니터링하여 비효율적인 부분을 개선합니다.

    • BigQuery를 활용해 상세 데이터를 분석합니다.

  • 무료 할당량 활용

    • Firebase의 무료 할당량을 확인하고, 이를 최대한 활용하여 비용을 절감합니다.

비용 관리 도구

  • Firebase Billing Dashboard: 월별 사용량과 청구 금액을 확인합니다.

  • 알림 설정: 특정 비용 한도를 초과하면 알림을 받도록 설정합니다.


6.3 LaaS 사용량 모니터링 및 비용 절감 방안

LaaS는 API 호출 빈도와 사용량에 따라 비용이 발생하므로 적절한 모니터링과 관리가 필요합니다.


사용량 모니터링

  • 대시보드 활용

    • LaaS에서 제공하는 대시보드를 통해 API 호출 횟수, 응답 시간, 사용량을 실시간으로 모니터링합니다.
  • 분석 지표

    • 프로젝트별 사용량: 프로젝트 단위로 호출 데이터를 분석합니다.

    • 응답 성공률: 오류 비율을 확인하여 필요 시 설정을 최적화합니다.


비용 절감 방법

  • 효율적인 API 호출

    • 불필요한 데이터 요청을 최소화하여 호출 빈도를 줄입니다.

    • 필요한 데이터만 요청하도록 프리셋을 조정합니다.

  • 모델 선택 최적화

    • 복잡한 작업에만 고성능 모델을 사용하고, 간단한 작업에는 경량 모델을 활용합니다.
  • 사용량 예측

    • 주기적인 사용량 분석을 통해 API 호출 패턴을 파악하고, 예상 비용을 관리합니다.

6.4 대화 메시지 연속성 지원을 위한 추가 개발

제공되는 기본 코드는 메시지의 연속성을 포함하지 않습니다. 따라서 사용자의 이전 메시지를 기억하도록 하기 위해 별도의 데이터베이스 구성과 추가 개발이 필요합니다.


구현 방안

  • 데이터베이스 구성

    • Firebase Firestore, MySQL, MongoDB 등과 같은 데이터베이스를 사용하여 각 사용자의 대화 이력을 저장합니다.

    • 데이터 스키마에는 사용자 ID, 발화 내용, 시간 정보를 포함합니다.

  • 상태 관리 로직 추가

    • 각 요청 시 대화 이력을 조회하여, LLM에게 필요한 컨텍스트를 제공합니다.

    • 대화 흐름이 단절되지 않도록 상태 정보를 유지합니다.

  • LaaS 프롬프트 수정

    • LLM 호출 시 이전 대화 내용을 포함하여 프롬프트를 생성합니다.

"사용자가 이전에 물어본 내용은 다음과 같습니다: [이전 대화 내용]. 현재 질문은 다음과 같습니다: [현재 질문]."
  • 캐싱 활용

    • Redis 등 캐시 시스템을 사용하여 최근 대화 이력을 빠르게 조회할 수 있도록 합니다.

6.5 유지보수 방안

챗봇의 지속적인 운영을 위해 다음과 같은 유지보수 방안을 시행합니다.

  • 정기적인 코드 리뷰

    • Firebase Functions와 LaaS API 연동 코드가 최신 사양에 맞는지 점검합니다.
  • 오류 로그 관리

    • Firebase Console에서 오류 로그를 주기적으로 확인하여 문제를 즉시 해결합니다.
  • 보안 점검

    • API 키, 프로젝트 ID 등의 민감 정보를 주기적으로 변경하고, 보안 설정을 강화합니다.
  • 기능 추가 및 개선

    • 사용자 피드백을 기반으로 챗봇 기능을 지속적으로 추가하고 개선합니다.



7. FAQ 및 문제 해결

카카오톡 AI 챗봇과 LaaS를 연동하는 과정에서 자주 발생하는 문제와 해결 방법을 안내합니다. 이를 통해 개발 과정에서의 오류를 최소화하고 원활한 운영이 가능하도록 지원합니다.


7.1 배포 시 발생할 수 있는 오류와 해결책


문제 1: Firebase Functions 배포 실패

  • 원인: Firebase CLI가 제대로 초기화되지 않았거나, Google Cloud 계정과의 연결이 올바르지 않을 수 있습니다.

  • 해결 방법:

  1. Firebase CLI가 최신 버전인지 확인:
firebase --version
  1. firebase login 명령어를 사용하여 Google 계정과 다시 연결.

  2. Firebase 프로젝트가 올바르게 설정되었는지 확인:

firebase use --add
  1. firebase deploy 명령어를 다시 실행.

문제 2: 함수 URL 호출 시 404 오류 발생

  • 원인: 배포된 함수 URL이 정확하지 않거나, Firebase 프로젝트 설정에서 해당 함수가 활성화되지 않음.

  • 해결 방법:

  1. Firebase Console에서 함수 URL 확인.

  2. 코드 내에서 함수 URL이 올바르게 설정되었는지 검토.


문제 3: 함수가 의도한 대로 작동하지 않음

  • 원인: 코드 오류 또는 LaaS API 호출에서 잘못된 데이터 전달.

  • 해결 방법:

  1. Firebase Functions 로그 확인:
firebase functions:log
  1. LaaS API 호출 시 전달하는 데이터 형식(project, apiKey, hash 등)을 점검.

  2. 에러 메시지를 기반으로 문제를 디버깅.


7.2 카카오톡 관리자센터 설정 관련 문제


문제 1: 스킬 서버가 호출되지 않음

  • 원인: 카카오톡 관리자센터에 잘못된 스킬 서버 URL이 등록되었거나, 콜백 설정이 누락됨.

  • 해결 방법:

  1. 스킬 서버 URL이 정확한지 확인. 예: https://[Firebase Functions URL]/kakaobot

  2. 기본 시나리오 > 폴백 블록에서 “봇 응답” 옵션이 “스킬 데이터 사용”으로 설정되었는지 확인.

  3. 관리자센터 > AI 챗봇 관리 메뉴에서 AI 기능이 활성화되어 있는지 점검.


문제 2: 발화 테스트 실패

  • 원인: 카카오톡 발화 텍스트와 스킬 서버의 처리 로직 간 불일치.

  • 해결 방법:

  1. 발화 텍스트가 LaaS API 요청 형식에 맞게 전달되는지 확인.

  2. 스킬 서버 로그를 통해 요청 및 응답 데이터를 검토.


문제 3: 콜백 설정이 작동하지 않음

  • 원인: 콜백 URL이 잘못되었거나, AI 챗봇 관리 메뉴에서 콜백 기능이 활성화되지 않음.

  • 해결 방법:

  1. 관리자센터 > AI 챗봇 관리 메뉴에서 콜백 설정 요청 상태를 확인.

  2. Firebase Console에서 배포된 URL이 활성 상태인지 확인.


7.3 LaaS API 응답 관련 주요 이슈


문제 1: LaaS API 호출 실패

  • 원인: API 키 또는 프로젝트 ID가 올바르지 않음.

  • 해결 방법:

  1. LaaS 에디터에서 API 키, 프로젝트 ID, 프리셋 해시코드가 정확한지 확인.

  2. Firebase Functions 코드에 해당 값이 올바르게 설정되었는지 검토.


문제 2: AI 응답이 예상과 다름

  • 원인: 프롬프트가 잘못 작성되었거나, LaaS 모델 설정이 적절하지 않음.

  • 해결 방법:

  1. LaaS 에디터에서 프롬프트 내용을 점검하고 수정.

  2. 적절한 LLM(대규모 언어 모델)을 선택하여 API 호출 결과를 테스트.


문제 3: 응답 속도 지연

  • 원인: LaaS API 호출 시간이 오래 걸리거나, Firebase Functions에서 과부하 발생.

  • 해결 방법:

  1. LaaS 대시보드에서 API 호출 상태 및 처리 속도를 확인.

  2. Firebase Functions의 메모리 및 타임아웃 설정을 증가:

firebase deploy --memory=512MB --timeout=60s

추가 팁

  • 로그 활용

    • Firebase Functions와 LaaS API 호출 로그를 지속적으로 모니터링하여 문제를 빠르게 파악.
  • 테스트 환경 유지

    • 운영 환경과 별도로 테스트 환경을 유지하여 안정적인 업데이트 및 디버깅 가능.
  • LaaS 비용 관리

    • API 호출 수와 사용량을 주기적으로 확인하여 과도한 비용 발생을 방지.