[AI]1단계_모델_API_설계_미션_생성 - 100-hours-a-week/12-marong-Wiki GitHub Wiki

API 엔드포인트 목록

Method 경로 설명
POST /mission/generate 지정된 입력 난이도 수에 대한 마니또 미션 생성
GET(예정) /mission/history 사용자 요청 기반 마니또 미션 생성 히스토리 조회 (예정)

API 입/출력 형식 명세서

Request

POST /mission/generate

{
  "difficulty": {
    "상": 0,
    "중": 3,
    "하": 0
  }
}
필드명 타입 필수 여부 설명
difficulty object(dict) 필수 난이도별 요청 개수 ('key': '상', '중', '하' / value: int)

Response

200 OK

{
  "difficulty": "중",
  "missions": [
    {
      "content": "마니띠가 가장 좋아하는 개발 언어는 무엇인지 알아보기 ❤️ 🔍",
      "difficulty": "중"
    },
    {
      "content": "마니띠에게 오늘 한 가지 칭찬 쪽지로 남겨주기 📅 💌",
      "difficulty": "하"
    }
  ]
}

400 Bad Request

{
  "message": "invalid_request",
  "data": null
}

500 Internal Server Error

{
  "message": "internal_server_error",
  "data": null
}

서비스 전체 구조 및 연동 관계

1. FastAPI 서버 (/mission/generate)

  • 사용자 요청(난이도) 처리 → LLM + DB 검색 + 후처리 진행

2. MySQL DB (그룹별 정보, 피드 조회)

  • Groups 테이블에서 그룹별 설명 조회
  • Posts, GroupMissions 테이블을 JOIN하여 현재 주차 기준으로 3주간 좋아요가 많았던 게시글의 내용 조회

3. ChromaDB (RAG 컨텍스트)

  • 위 MySQL DB에서 조회한 정보를 포함하여 미션 유사도 검색, 데이터 기반 필터링

4. LLM (HyperCLOVA-X)

  • 난이도 기반 조건 프롬프트로 미션 생성
  • 요청 난이도 이하의 미션만 반환

5. 후처리 단계 (Emoji Mapping)

  • 이모지 자동 매핑 및 부적절 미션 필터링

6. 최종 미션 응답 반환

  • 난이도, 미션 내용 포함된 상, 중, 하 미션 반환

API 호출 예시 및 응답

요청 예시

{
  "difficulty": "중"
}

응답 예시

{
  "difficulty": "중",
  "missions": [
    {
      "content": "마니띠가 가장 좋아하는 개발 언어는 무엇인지 알아보기 ❤️ 🔍",
      "difficulty": "중"
    },
    {
      "content": "마니띠에게 오늘 한 가지 칭찬 쪽지로 남겨주기 📅 💌",
      "difficulty": "하"
    }
  ]
}

참고 사항

현재는 미션 데이터에 대해 DB 실시간 업로드가 불필요하여 API 엔드포인트를 별도로 구현하지 않았으나, 구현하는 경우 위 명세에 따라 구현할 예정입니다.