[AI]1단계_모델_API_설계_유저행동기반_성향분석 - 100-hours-a-week/12-marong-Wiki GitHub Wiki
1. API 엔드포인트 목록 작성
분류 | HTTP Method | Endpoint | 설명 |
---|---|---|---|
초기 유저 등록 | POST |
/mbti/initialize |
회원가입 직후 사용자 정보 전체 저장 |
기존 유저 분석 요청 | GET |
/mbti/context |
기존 유저의 MBTI, 취미, 피드 통합 정보 조회 |
분석 결과 저장 | POST |
/mbti/update |
MBTI 및 취미 업데이트 결과 저장 |
2. API 입/출력 형식 명세서 작성
POST /mbti/initialize
2-1. 사용자 정보 전체를 받아 AI DB에 저장
Request Body
{
"user_id": "user123",
"mbti_scores": {"e":40, "s": 60, "t": 45, "j": 70},
"hobby": "운동",
"posts": [ {"content": "마니또랑 산책하며 기분이 좋아졌어요."} ]
}
필드명 | 타입 | 필수여부 | 설명 |
---|---|---|---|
user_id | string | 필수 | 사용자 고유 ID |
mbti_scores | object | 필수 | MBTI 점수 (0~100, 5단위, value는 정수형) |
hobby | string | 선택 | 사용자 취미 |
posts | object | 필수 | 사용자가 올리는 피드의 실제 내용 |
Response
200
{
"user_id": "user123",
"mbti_scores": {"e":40, "s": 60, "t": 45, "j": 70},
"hobby": "운동",
}
400
{
"message" : "invalid_request",
"data" : null
}
500
{
"message" : "internal_server_error",
"data" : null
}
GET /mbti/context
2-2. AI DB + BE API 조합으로 유저 성향 & 피드 통합 데이터 반환
Response
200
{
"user_id": "user123",
"mbti_scores": {"e":40, "s": 60, "t": 45, "j": 70},
"hobby": "운동",
"posts": [ {"content": "마니또랑 산책하며 기분이 좋아졌어요."} ]
}
400
{
"message" : "invalid_request",
"data" : null
}
500
{
"message" : "internal_server_error",
"data" : null
}
POST /mbti/update
2-3. Request Body
분석 결과를 AI DB에 저장
{
"user_id": "user123",
"mbti_scores": {"e":40, "s": 60, "t": 45, "j": 70},
"hobby": "운동",
}
필드명 | 타입 | 필수여부 | 설명 |
---|---|---|---|
user_id | string | 필수 | 사용자 고유 ID |
mbti_scores | object | 필수 | MBTI 점수 (0~100, 5단위, value는 정수형) |
hobby | string | 선택 | 사용자 취미 |
Response
200
{
"user_id": "user123",
"mbti_scores": {"e":40, "s": 60, "t": 45, "j": 70},
"hobby": "운동",
}
400
{
"message" : "invalid_request",
"data" : null
}
500
{
"message" : "internal_server_error",
"data" : null
}
3. 서비스 전체 구조 내 역할·연동 관계 설명 작성
'유저행동기반 성향분석'의 서비스 전체 구조 내 역할
"사용자의 피드를 기반으로 MBTI 점수를 정밀하게 업데이트해주는 LLM 기반 성향 분석 모듈"
- 유저가 작성한 피드 기반으로 성향을 업데이트
- MBTI 기반 추천 기능(매칭, 장소추천, 선물추천 등)의 정확도를 향상시키는 역할
'유저행동기반 성향분석'의 연동관계
연동대상 | 연동방식 | 설명 |
---|---|---|
BE 서버 | REST API(FastAPI) | 사용자 피드, 유저ID, 현재 MBTI, 취미 정보 전달 |
AI DB (Chroma Vector DB) | 내부 저장 | 분석된 MBTI 점수 및 사용자 데이터를 저장 및 갱신 |
추천/매칭 시스템 | DB 연동 | 업데이트된 성향 정보가 다른 기능의 기본 정보로 사용됨 |
4. API 호출 예시 및 예시 응답 정리
초기 유저 등록
Request
POST /ai/user/initialize
Content-Type: application/json
{
"message": "success",
"data": {
"user_id": 123,
"ei_score": 50,
"sn_score": 50,
"tf_score": 50,
"jp_score": 50,
"hobby": ["운동"],
"posts": [
{ "content": "나는 친구들이랑 노는게 제일 재밌어" }
]
}
}
Response
{
"message": "User data updated successfully"
}
기존 유저 성향 조회
Request
GET /ai/user/context/123
{
"message": "success",
"data": {
"user_id": 123,
"ei_score": 50,
"sn_score": 50,
"tf_score": 50,
"jp_score": 50,
"hobby": ["운동"],
"posts": [
{ "content": "나는 친구들이랑 노는게 제일 재밌어" }
]
}
}
분석 결과 저장
Request
POST /ai/user/update
Content-Type: application/json
{
"user_id": 123,
"ei_score": 40,
"sn_score": 60,
"tf_score": 65,
"jp_score": 45,
"hobby": ["영화 감상", "마라톤"]
}
Response
{
"message": "User data updated successfully"
}
실제결과 test를 위해 전부 MBTI 4가지 전부 50으로 설정 후 진행 { "content": "나는 친구들이랑 노는게 제일 재밌어" } 'e 상승, s/t/j 유지' 를 예측