Model API 설계 - 100-hours-a-week/6-nemo-wiki GitHub Wiki
🤖 LLM 기반 모임 추천 및 정보 생성 API 설계
네모 서비스는 사용자의 성향과 선호에 따라 모임을 추천하고, AI를 활용하여 모임 정보를 자동 생성 및 저장하는 기능을 제공합니다. 본 문서는 해당 기능을 구성하는 API 명세를 설명합니다.
📌 API 목록
기능 | 메서드 | URL |
---|---|---|
모임 정보 생성 | POST |
/ai/v1/groups/information |
챗봇 객관식 질문 생성 | POST |
/ai/v2/chatbot/questions |
챗봇 객관식 답변 분석 | POST |
/ai/v2/chatbot/answers |
챗봇 자유입력 기반 추천 | POST |
/ai/v2/chatbot/freeform |
벡터 DB - 모임 정보 저장 | POST |
/ai/v2/vector/save/groups |
벡터 DB - 사용자 정보 저장 | POST |
/ai/v2/vector/save/users |
📥 입력 & 📤 출력 명세
Version 1
1. 모임 정보 생성
Request
POST /ai/v1/groups/information
{
"name": "SB 모임",
"goal": "스스로 웹사이트를 제작할 수 있다.",
"category": "IT/개발",
"period": "1개월 이하",
"isPlanCreated": true
}
Response
{
"code": 200,
"message": "모임 정보 생성 완료",
"data": {
"name": "SB 모임",
"summary": "Spring boot를 개발할 수 있다.",
"description": "안녕하세요 Spring boot를 학습하는 SB 모임입니다~~~....",
"tags": ["Java", "비전공자 환영", "온라인스터디", "기초부터"],
"plan": [
{
"step": 1,
"title": "환경 설정",
"content": "Spring boot 개발 환경을 설정합니다."
}
]
}
}
Version 2
2. 챗봇 객관식 질문 생성
Request
POST /ai/v2/chatbot/questions
{
"user_id": "123"
}
Response
{
"code": 200,
"message": "챗봇 질문 생성 완료",
"data": {
"questions": [
{
"question": "모임에서 더 중요한 건?",
"options": ["사람", "주제", "장소"]
}
]
}
}
3. 챗봇 객관식 답변 분석
Request
POST /ai/v2/chatbot/answers
{
"user_id": "123",
"answers": [
{
"question": "모임에서 더 중요한 건?",
"selected_option": "사람"
}
]
}
Response
{
"code": 200,
"message": "챗봇 질문 답변 완료",
"data": null
}
4. 챗봇 자유입력 기반 추천
Request
POST /ai/v2/chatbot/freeform
{
"user_id": "123",
"query": "사람 많은 곳은 피하고, 조용한 대화 중심의 모임이 좋아요."
}
Response
{
"code": 200,
"message": "챗봇 질문 답변 완료",
"data": {
"context": "조용한 분위기에서 책을 함께 읽는 소모임이나 산책 중심의 모임이 잘 어울릴 것 같아요.",
"groupId": ["123", "456"]
}
}
5. 벡터 DB - 모임 정보 저장
Request
POST /ai/v2/vector/save/groups
{
"code": 201,
"message": "모임이 생성되었습니다.",
"data": {
"groupId": 123,
"name": "SB 모임",
"summary": "Spring boot를 개발할 수 있다.",
"description": "...",
"category": "개발",
"location": "판교",
"maxUserCount": "50",
"imageUrl": "image.jpg",
"tags": ["Java", "비전공자 환영", "온라인스터디", "기초부터"],
"plan": "asdfasdfasdf"
}
}
Response
{
"code": 200,
"message": "모임 정보 저장 완료",
"data": null
}
6. 벡터 DB - 사용자 정보 저장
Request
POST /ai/v2/vector/save/users
{
"code": 201,
"message": "모임이 생성되었습니다.",
"data": {
"user_id": "1234",
"group_id": ["8765", "3452"]
}
}
Response
{
"code": 200,
"message": "사용자 정보 저장 완료",
"data": null
}
❌ 오류 처리
상태 코드 | 설명 | 예시 메시지 |
---|---|---|
400 | 잘못된 요청 | {"code":"INVALID_REQUEST","message":"요청에 잘못된 형식이 포함되었거나, 필수 입력값이 누락되었습니다."} |
409 | 리소스 충돌 | {"code":"FORBIDDEN","message":"이미 존재하는 리소스입니다."} |
422 | 유효성 검사 실패 | {"code":"FORBIDDEN","message":"요청 형식이 잘못되었습니다. 필수 입력값을 확인해주세요."} |
429 | 요청 과다 | {"code":"UNPROCESSABLE CONTENT","message":"요청이 너무 많습니다. 잠시 후 다시 시도해주세요."} |
500 | AI 응답 처리 실패 | {"code":"MODEL_GENERATION_FAILED","message":"AI 모델 응답 처리 중 문제가 발생했습니다."} |
503 | 서비스 불가 | {"code":"SERVICE_UNAVAILABLE","message":"AI 생성 서비스가 현재 사용 불가능합니다. 잠시 후 다시 시도해주세요."} |
🧩 시스템 연계 구조
[사용자 입력]
↓
/chatbot/questions (질문 생성)
↓
/chatbot/answers (답변 분석)
↓
/chatbot/freeform (자유 입력 기반 추천)
↓
/groups/information (모임 정보 생성)
↓
/vector/save/groups & /vector/save/users (벡터 DB 저장)
🧪 API 테스트 예시
curl -X POST http://localhost:8000/ai/v2/chatbot/freeform \
-H "Content-Type: application/json" \
-d '{
"user_id": "123",
"query": "조용한 분위기의 책 모임을 찾고 있어요."
}'
응답
{
"code": 200,
"message": "챗봇 질문 답변 완료",
"data": {
"context": "조용한 분위기에서 책을 함께 읽는 소모임이나 산책 중심의 모임이 잘 어울릴 것 같아요.",
"groupId": ["123", "456"]
}
}
본 API 명세는 네모 서비스의 AI 기능과 프론트/백엔드 간의 원활한 연동을 위한 기준 문서입니다.