티스토리 뷰
project/로컬 LLM + RAG 기반 AI 채팅봇 만들기
로컬 LLM + RAG 기반 AI 채팅봇 만들기 # 35 - 챗봇 API 설계
octo54 2025. 3. 1. 00:35반응형
로컬 LLM + RAG 기반 AI 채팅봇 만들기
5.1 챗봇 API 설계
이제 백엔드와 프론트엔드가 WebSocket을 통해 실시간으로 통신할 수 있도록 구현했습니다.
이번 단계에서는 RESTful API를 활용하여 챗봇 기능을 확장하고, API 문서화를 진행하겠습니다.
1) 챗봇 API 설계 개요
✅ 왜 REST API를 추가해야 하는가?
- WebSocket은 실시간 메시지 전송에 적합하지만 대화 이력 조회 및 관리 기능이 부족
- RESTful API를 통해 대화 이력을 저장하고, 특정 세션의 대화를 불러오는 기능 추가
- API 문서화를 진행하여 프론트엔드 및 외부 시스템과의 연동을 쉽게 지원
2) API 엔드포인트 설계
📌 챗봇 관련 API 엔드포인트
HTTP 메서드 엔드포인트 설명
POST | /api/chat/send | 메시지 전송 (LLM 요청 및 응답) |
POST | /api/chat/save | 대화 메시지 저장 |
GET | /api/chat/{sessionId} | 특정 대화 세션의 대화 기록 조회 |
GET | /api/chat/sessions/{userId} | 사용자의 전체 대화 세션 목록 조회 |
3) API 엔드포인트 구현
📌 ① AI 챗봇 메시지 전송 API (/api/chat/send)
package ktor_chatbot.routes
import io.ktor.server.application.*
import io.ktor.server.request.*
import io.ktor.server.response.*
import io.ktor.server.routing.*
import ktor_chatbot.services.LlmService
import org.koin.ktor.ext.inject
fun Application.configureChatApi() {
val llmService: LlmService by inject()
routing {
post("/api/chat/send") {
val request = call.receive<Map<String, String>>()
val message = request["message"] ?: return@post call.respondText("메시지 필요", status = io.ktor.http.HttpStatusCode.BadRequest)
val response = llmService.getLlmResponse(message)
call.respond(mapOf("response" to response))
}
}
}
📌 ② 대화 저장 API (/api/chat/save)
post("/api/chat/save") {
val request = call.receive<Map<String, String>>()
val sessionId = request["sessionId"] ?: return@post call.respondText("세션 ID 필요", status = io.ktor.http.HttpStatusCode.BadRequest)
val sender = request["sender"] ?: return@post call.respondText("보낸 사람 필요", status = io.ktor.http.HttpStatusCode.BadRequest)
val message = request["message"] ?: return@post call.respondText("메시지 필요", status = io.ktor.http.HttpStatusCode.BadRequest)
chatService.saveMessage(sessionId, sender, message)
call.respondText("메시지 저장 완료", status = io.ktor.http.HttpStatusCode.OK)
}
📌 ③ 특정 대화 세션 조회 API (/api/chat/{sessionId})
get("/api/chat/{sessionId}") {
val sessionId = call.parameters["sessionId"] ?: return@get call.respondText("세션 ID 필요", status = io.ktor.http.HttpStatusCode.BadRequest)
val messages = chatService.getMessagesBySession(sessionId)
call.respond(messages)
}
📌 ④ 사용자의 전체 대화 세션 조회 API (/api/chat/sessions/{userId})
get("/api/chat/sessions/{userId}") {
val userId = call.parameters["userId"] ?: return@get call.respondText("사용자 ID 필요", status = io.ktor.http.HttpStatusCode.BadRequest)
val sessions = chatService.getUserSessions(userId)
call.respond(sessions)
}
4) Ktor 서버에서 API 활성화
📌 Application.kt 수정
package ktor_chatbot
import io.ktor.server.application.*
import ktor_chatbot.plugins.*
import ktor_chatbot.services.ChatService
import ktor_chatbot.routes.configureChatApi
import org.koin.dsl.module
import org.koin.ktor.plugin.Koin
fun Application.module() {
install(Koin) {
modules(module {
single { ChatService() }
})
}
configureChatApi()
configureRouting()
}
5) API 테스트
🔹 Ktor 서버 실행
./gradlew run
🔹 Postman 또는 cURL을 사용한 API 테스트
✅ 1) AI 챗봇 메시지 전송
curl -X POST "http://localhost:8080/api/chat/send" \
-H "Content-Type: application/json" \
-d '{"message": "챗봇이 뭐야?"}'
📌 예상 응답
{
"response": "AI 챗봇은 사용자 질문을 분석하고 응답을 제공하는 시스템입니다."
}
✅ 2) 특정 세션의 대화 조회
curl -X GET "http://localhost:8080/api/chat/session123"
📌 예상 응답 (JSON)
[
{ "sender": "user", "message": "안녕하세요!" },
{ "sender": "ai", "message": "안녕하세요! 무엇을 도와드릴까요?" }
]
✅ 3) 사용자의 전체 대화 세션 조회
curl -X GET "http://localhost:8080/api/chat/sessions/guest"
📌 예상 응답
[
"session123",
"session456"
]
6) API 문서화 (Swagger 적용)
Ktor의 Swagger (OpenAPI) 를 활용하여 API 문서를 자동으로 생성할 수 있습니다.
📌 Swagger 플러그인 추가 (build.gradle.kts)
dependencies {
implementation("io.ktor:ktor-server-swagger:2.3.5")
}
📌 Swagger 설정 (SwaggerConfig.kt)
package ktor_chatbot.plugins
import io.ktor.server.application.*
import io.ktor.server.plugins.swagger.*
fun Application.configureSwagger() {
install(SwaggerUI) {
path = "/swagger"
}
}
📌 API 문서 확인
서버를 실행한 후, 브라우저에서 다음 URL로 접속하면 API 문서를 확인할 수 있습니다.
👉 http://localhost:8080/swagger
7) API 설계 요약
기능 엔드포인트 메서드
AI 챗봇 응답 | /api/chat/send | POST |
대화 저장 | /api/chat/save | POST |
세션별 대화 조회 | /api/chat/{sessionId} | GET |
사용자 세션 조회 | /api/chat/sessions/{userId} | GET |
8) 다음 단계
이제 RESTful API를 통해 챗봇과의 상호작용을 확장하고, API 문서화를 진행했습니다.
다음으로 5.2 API 테스트 (Postman 사용) 을 진행하여 API가 정상적으로 동작하는지 검증하겠습니다! 🚀
'project > 로컬 LLM + RAG 기반 AI 채팅봇 만들기' 카테고리의 다른 글
로컬 LLM + RAG 기반 AI 채팅봇 만들기 # 37 - WebSocket 테스트 (웹 브라우저 콘솔 활용) (0) | 2025.03.01 |
---|---|
로컬 LLM + RAG 기반 AI 채팅봇 만들기 # 36 - API 테스트 (Postman 사용) (0) | 2025.03.01 |
로컬 LLM + RAG 기반 AI 채팅봇 만들기 # 34 - WebSocket을 활용한 실시간 채팅 기능 구현 (0) | 2025.03.01 |
로컬 LLM + RAG 기반 AI 채팅봇 만들기 # 33 - 챗봇 UI 설계 및 Tailwind CSS 적용 (0) | 2025.02.28 |
로컬 LLM + RAG 기반 AI 채팅봇 만들기 # 32 - SvelteKit 소개 및 환경 설정 (0) | 2025.02.28 |
※ 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Python
- 백엔드개발
- seo 최적화 10개
- rag
- LangChain
- github
- SEO최적화
- fastapi
- 프론트엔드
- gatsbyjs
- Webpack
- Ktor
- Next.js
- nextJS
- 관리자
- 웹개발
- App Router
- CI/CD
- REACT
- 개발블로그
- 프론트엔드면접
- Docker
- NestJS
- llm
- nodejs
- AI챗봇
- PostgreSQL
- kotlin
- SEO 최적화
- Prisma
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
글 보관함
반응형