NAA/XROO Lab

DEVELOPER PLAYGROUND

Space Guide.

공간을 연결하고, 코스와 답변을 확인하세요.

API 미확인

02 Request

POST /test/course

공개 /v1/tour/course와 같은 생성 흐름에 평가 자료 수집을 추가한 테스트 전용 경로입니다.

평가 조건을 확인하는 중입니다.

요청 모드와 내용

Survey와 선택적인 선호를 바탕으로 코스를 생성합니다.

0 / 1,000

샘플 요청을 불러오는 중입니다.

Request JSON 실제 전송할 본문

‘직접 편집’ → ‘JSON 적용’으로 scenes 범위, current.position, activeCourse 등을 설정할 수 있습니다. 편집 중에는 전송이 잠깁니다. API Key는 X-API-Key 헤더로만 전송합니다.

API guide 필수값 · 진행 상태 · 응답 · RAG · 오류

POST /v1/tour/course · Content-Type: application/json. 두 모드 모두 같은 API를 사용합니다. 필드별 전체 스키마는 API Docs ↗에서 확인하세요.

Modes

aiChatEnabled입력과 동작
false 또는 생략survey 필수. free_text는 선택적인 코스 선호입니다. 직접 코스를 생성하며 RAG 검색은 사용하지 않습니다.
true공백이 아닌 free_text 필수, survey 선택. 공간 질문에 답하고, 코스를 요청하면 생성·검증한 코스를 제안할 수 있습니다.

aiChatEnabled는 올림플래닛(XROO)이 제어할 예정인 설정이며, 이 화면에서는 직접 선택합니다. JSON boolean만 받으며 "true", 1, null은 허용하지 않습니다.

Request fields

FieldContract
identifier
language
항상 필수. 식별값은 문자열 1~256자, 언어는 ko 또는 en입니다. 대화 이력은 서버에 저장되지 않으며 필요한 상태를 요청마다 보내야 합니다.
survey
free_text
Survey는 자유 형식 JSON 또는 자연어 문자열이며, 알려진 코드의 뜻과 원문을 함께 참고합니다. 공간별 서베이 가중치는 사용하지 않습니다. free_text는 한 번의 질문 또는 요청이며 앞뒤 공백을 제외하고 최대 1,000자입니다.
spaceContext공간 JSON 원본. 생략하면 서버의 기본 샘플을 사용하며 명시적 null은 거절합니다. 파일 첨부 시 이 필드에 넣고, 이전 진행 상태와 코스 참조를 비웁니다. 파일 선택만으로 API를 호출하거나 적재하지 않습니다.
scenes안내·목적지로 사용할 Scene ID 배열(중복 없이 1~5,000개). 생략하면 해당 공간 전체를 사용합니다. 파일 첨부 시 전체 ID를 설정하며, 범위 변경은 Request JSON에서 합니다. 출발점 startingSceneID·current.sceneId와 방문 기록은 전체 spaceContext.scenes에 존재하면 되며 이 배열에 넣을 필요는 없습니다. aiTourFlag: false인 Scene은 출발점이어도 안내하지 않습니다.
options.maxScenes제안 코스의 최대 Scene 수. 정수 1~6, 기본 6입니다. 가능한 코스에 따라 더 적게 반환할 수 있습니다.

Progress context

  • current: {sceneId, position?}는 실제 현재 위치, history: [sceneId, …]는 방문 기록, themeId는 사용할 Theme ID입니다. 위치·기록은 전체 공간에 존재해야 합니다. 코스 생성의 Theme은 안내 범위 전체와 실제 출발 위치에서 공통으로 사용 가능해야 합니다. 정보 질문의 조회 범위는 그대로 유지합니다.
  • 출발점이 허용된 미방문 안내 공간이면 그곳부터 안내합니다. 그렇지 않으면 출발점에서 직접 연결된 허용 미방문 공간부터 안내하며, 제외된 중간 공간을 자동 경유하지 않습니다. 안내하지 않는 출발점은 maxScenes에 세지 않습니다.
  • 직접 코스 생성 시 current와 history는 함께 보내고, 현재 위치가 있으면 themeId도 필요합니다. Q&A 정보 질문은 current만으로 가능합니다. 진행 상태가 있는 Q&A에서 코스까지 생성하려면 세 필드가 모두 필요합니다.
  • history가 비어 있지 않거나 activeCourse를 보내면 current가 필수입니다. current·history·themeId는 null 대신 생략하고, 방문 기록이 없음을 명시하려면 []를 보냅니다.
  • previousCourse는 직전 제안, activeCourse는 실제 진행 중인 코스입니다. 둘 다 {themeId, scenes: [{sceneId, actions?}]} 형태이며 현재 공간·범위의 유효한 코스를 보내야 합니다. activeCourse.themeId는 함께 보낸 themeId와 같아야 합니다.

Response fields

FieldMeaning
message사용자에게 보여줄 답변·안내(최대 2,000자).
course
requiresApproval
제안이 있으면 course: {themeId, scenes: [{sceneId, actions}]}, requiresApproval: true입니다. 정보 답변이나 생성 가능한 코스가 없는 경우 course: null, requiresApproval: false인 정상 HTTP 200 응답입니다. 코스가 없는 이유는 message를 확인하세요.
sources[{sceneId, title}]. 응답 과정에서 실제 조회한 Scene 목록입니다. 문장별 사실 검증이나 RAG 검색 성공을 나타내지는 않으며 빈 배열일 수 있습니다.
suggestions[{type, text, sceneId?}]. 후속 요청 제안입니다. 선택하면 Q&A 모드로 전환해 text를 질문란에 채우며, 직접 전송해야 합니다. type·sceneId를 별도 실행 명령으로 보내지는 않습니다.

‘이 제안을 다음 요청에서 참조’는 previousCourse만 설정합니다. 실제 승인·XR 재생·방문 기록 갱신은 XROO가 담당합니다. 이 화면은 Scene 순서와 DISPLAY_TEXT를 표시하며 전체 actions는 Response JSON에서 확인할 수 있습니다. course: null이면 이전 제안은 별도 표시로 유지됩니다.

RAG lifecycle

RAG가 활성화된 서버는 코스·Q&A의 성공 응답 후 spaceContext.id와 JSON 내용의 버전으로 저장 여부를 확인합니다. 같은 버전이 완전히 저장되어 있으면 재임베딩을 건너뛰고, 미적재·변경·부분 적재된 자료는 백그라운드에서 보완합니다. 기본 샘플에도 같은 규칙이 적용됩니다.

새 JSON의 첫 응답은 적재 완료를 기다리지 않습니다. 해당 버전의 적재가 끝난 뒤 후속 Q&A에서 검색할 수 있으며, 검색을 사용할 수 없을 때는 요청의 공간정보를 직접 조회하도록 안내합니다. 적재 실패는 이미 보낸 응답을 바꾸지 않고 다음 성공 요청 후 재시도합니다. 현재 API는 RAG 활성화·적재 완료·검색 성공 상태를 응답에 포함하지 않습니다.

Errors & diagnostics

HTTP / code확인할 내용
400 · INVALID_INPUT
MISSING_PROGRESS_CONTEXT
필수값·타입·공간 참조·진행 상태를 확인하세요. 응답에 details가 있으면 필드별 사유를 볼 수 있습니다.
401 · UNAUTHORIZED인증이 켜진 서버에는 올바른 X-API-Key 헤더가 필요합니다.
413 · PAYLOAD_TOO_LARGE파일뿐 아니라 전체 요청 본문이 서버 크기 제한(기본 10 MiB)을 넘었습니다. 서버 설정에 따라 제한은 달라질 수 있습니다.
422 · NO_AVAILABLE_THEME선택한 모든 Scene에서 함께 사용할 수 있는 Theme이 있는지 확인하세요.
503 · GUIDE_UNAVAILABLE
PLANNER_UNAVAILABLE
각각 Q&A 안내 또는 코스 생성 처리의 실패·시간 초과입니다. Request ID로 서버 로그를 확인해야 정확한 원인을 알 수 있습니다.

‘연결 확인’은 GET /health/live로 API 프로세스 응답만 확인합니다. GET /health/ready는 모델 연결을 확인하지만 RAG 준비 상태는 검사하지 않습니다. 표시 시간은 브라우저가 응답 본문을 받을 때까지의 시간이며 백그라운드 적재 시간은 포함하지 않습니다. 이 화면은 최대 150초 동안 응답을 기다립니다. ‘대기 중단’ 후에도 서버 처리는 계속될 수 있습니다.

03 Response

아직 실행하지 않음

첫 요청을 보내보세요

답변, 제안 코스, 조회한 공간을 여기서 확인합니다.

화면 기록은 다음 요청의 대화 이력으로 전송되지 않습니다.

04 성능 평가

측정 전

응답 후 추천 품질·RAG 품질·응답 시간을 확인합니다.

① 추천 큐레이션 품질

요청 적합성
—
선호 충족도
—
추천 순위 적절성
—

세 항목을 0~4등급으로 판정해 동일 비중의 100점 점수로 환산합니다. AI 추정이며 정답률·F1·MAP과 다릅니다.

세션 AI 추천 평가: 측정 전

AI 평가 이유와 인용 근거
아직 평가하지 않았습니다.

정답 비교 · F1 / MAP

F1 · 이번 코스
—
AP@6 · 이번 추천 순위
—

F1 평균 · MAP@6: 측정 전

AP는 방문 동선이 아닌 추천 순위를 평가합니다. 중립 공간은 제외하며 정답은 가능한 방문 조건을 반영해야 합니다.

② RAG 종합 품질

Context Precision
—
Context Recall
—
Faithfulness
—
Answer Relevancy
—
RR@6 · 이번 검색 평균
—
Recall@6 · 이번 검색 평균
—

MRR · Recall 평균: 측정 전

MRR·Recall은 별도 검색 지표입니다. RAGAS는 LLM 자동평가이며 정확도 확률이 아닙니다.

③ 레이턴시

이번 응답
—
평균 / P95
—
추가 AI 채점
—

성공 응답 0건

브라우저 전송부터 테스트 응답·평가 자료 수신까지. 추천 AI·RAGAS 채점·백그라운드 적재 시간은 제외합니다.

추천 AI 평가는 정답 등록 없이 실행됩니다. 추가 모델 호출이 필요하며, 새 요청은 이전 평가 대기를 중단합니다.

정답과 평가 기준

합성 케이스는 저장된 정답을 자동 사용합니다. 자유 입력은 아래 JSON에 정답을 등록한 뒤 검토 확인을 체크하세요. 새 요청마다 수동 정답은 초기화됩니다.

relevantSceneIds: 적합 공간 전체, neutralSceneIds: 채점에서 제외할 시작점·경유지. retrievalGold: 검색 번호(0부터)별 정답 Point ID 배열. referenceAnswer: 기준 답변. 아래 원본 자료에서 검색되지 않은 정답 근거도 확인하세요.

합성 Q&A 정답은 Scene 단위이며 상위 K개 검색 문서에 포함된 Scene으로 비교합니다. 문서 단위 정답과 섞어 평균내지 않습니다. AP 분모는 min(정답 수, N), F1은 중립 공간을 뺀 최종 코스 기준입니다.

RAGAS Context 지표는 공간명을 포함한 실제 검색 문서를 호출순·순위순으로 평가합니다. Faithfulness는 답변에 제공된 도구 근거·공간 소개·안내 유의사항을 사용합니다. 동일 답변 모델의 자기 평가이므로 실제 정답 여부와 다를 수 있습니다.

평가 근거 · 추천 순위 · 검색 결과 · 원본 문서
아직 실행하지 않았습니다.

평균은 이 탭의 최근 성공 요청 200건 중 같은 모드·N·K·정답 유형·검색 단위끼리 계산합니다. 재평가는 같은 요청의 값을 교체합니다. 새로고침하면 초기화됩니다.