호텔 객실 검색 만들기
호텔과 객실 데이터를 로컬 UQA에 저장하고 검색·시설 필터를 구현해요
완성할 검색
호텔 1,520개에 등록된 객실 7,563개를 예시로 사용합니다. 먼저 검색어와 시설 필터가 실제 데이터에 적용되는 검색 화면을 구현합니다. 의미 검색은 기본 검색을 확인한 뒤 확장합니다.
현재 체험 화면에는 지역 관계와 추가 순위 신호도 포함돼 있습니다. 이 실습의 기본 결과가 체험 화면과 완전히 같은 순서로 표시되지는 않습니다.
호텔 검색 체험하기1. 환경과 데이터 확인
클로드나 코덱스에 프롬프트를 전달하세요. 호텔과 객실이 각각 몇 개이고 어떤 필드가 있는지 확인한 다음 로컬 프로젝트를 준비합니다.
호텔 객실 검색 실습을 시작하기 전에 환경과 데이터를 확인해줘 - UQA 설치 여부와 버전, 로컬 데이터베이스 명령의 사용법 확인 - Node.js 20 이상인지 확인 - https://uqa.cognica.io/hotel-data/hotels.json에서 JSON 다운로드 - hotels와 rooms 배열의 개수, 각 배열의 첫 항목 필드 확인 - 기존 프로젝트나 파일은 변경하지 말고 확인 결과만 알려줘
데이터 파일: hotels.json
2. 호텔과 객실 저장
호텔과 객실을 별도 테이블에 저장하고 객실의 hotel_id로 연결합니다. 실습에서 사용하지 않는 전화번호와 예약 정보는 저장 대상에서 제외합니다.
호텔 객실 검색 실습용 UQA 로컬 프로젝트를 준비해줘 - 프로젝트 이름은 hotel-search-101 - 같은 이름의 프로젝트가 있으면 데이터와 상태를 먼저 확인하고 삭제하거나 덮어쓰지 않기 - UQA CLI 사용법을 확인한 뒤 프로젝트 생성 또는 시작, 상태와 건강 상태 확인 - https://uqa.cognica.io/hotel-data/hotels.json의 hotels와 rooms에서 검색에 필요한 필드만 저장 - hotels: id, name, region, category, swimming_pool, parking_available - rooms: id, hotel_id, name, searchable_text, facility_tags, detail_text - 호텔과 객실의 연결은 hotel_id로 유지 - 문자열을 SQL에 직접 합치지 말고 파라미터 사용 - 저장 후 호텔 1,520개, 객실 7,563개인지 조회해 알려줘 - 중간에 실패하면 기존 데이터를 삭제하지 말고 원인과 현재 저장 건수를 알려줘
완료 확인: 호텔 1,520개, 객실 7,563개와 로컬 프로젝트의 정상 상태
3. 검색과 시설 필터
객실 설명에서 검색어를 찾고, 수영장·주차장 조건은 호텔 데이터로 검사합니다. 검색 점수가 같은 객실은 id순으로 정렬해 실행할 때마다 순서를 비교할 수 있게 합니다.
hotel-search-101에서 객실 검색과 시설 필터를 구현해줘 - 객실의 searchable_text와 시설 설명을 대상으로 단어 검색 구성 - 검색용 색인을 만든 뒤 검색어를 파라미터로 전달 - 수영장과 주차장 필터는 hotels의 실제 boolean 필드로 적용 - 객실과 호텔을 hotel_id로 연결해 호텔명, 객실명, 지역, 시설 정보를 함께 반환 - 검색 점수가 있는 결과는 점수 내림차순, 동점이면 객실 id 오름차순으로 정렬 - 결과가 없으면 임의의 객실을 대신 표시하지 않기 - 검색어와 필터를 각각 바꿔 실행하고, 필터를 적용한 결과가 실제 시설 값과 일치하는지 알려줘
완료 확인: 필터 적용 후 표시된 호텔의 시설 값과 검색 결과의 정렬 순서
4. 검색 화면과 순위 근거
검색 화면에는 실제 점수와 일치한 검색 필드만 표시합니다. 검색 점수가 높은 이유를 모델이 생성한 문장으로 추측해 표시하지 않습니다.
hotel-search-101의 검색 화면을 내 컴퓨터에서 실행해줘 - 검색창과 수영장·주차장 필터, 결과 목록 구현 - 검색어와 필터는 서버에 전달하고 UQA 접속 정보는 브라우저 코드에 포함하지 않기 - 결과마다 호텔명, 객실명, 지역, 적용된 시설 필터와 실제 검색 점수 표시 - 순위 설명은 실제 조회한 점수와 일치한 필드만 사용하고 AI가 추측한 이유는 표시하지 않기 - 검색어 변경, 필터 해제, 결과 없음 상태를 확인 - 실행 주소와 각 확인 결과를 짧게 알려줘
완료 확인: 검색어 변경, 필터 해제, 결과 없음 상태와 로컬 검색 화면 주소
5. 의미 검색 확장
체험 화면은 객실 임베딩과 검색어 임베딩도 사용합니다. 이 확장은 같은 모델과 384차원 데이터가 준비된 경우에만 진행합니다. 엔진 버전과 임베딩 순서가 다르면 기본 검색을 유지합니다.
호텔 객실 검색에 의미 검색을 추가할 수 있는지 먼저 확인해줘 - 기존 검색과 필터가 정상 작동하는 상태를 보존 - https://uqa.cognica.io/hotel-data/hotels.json의 rooms 배열 순서와 대응하는 384차원 임베딩 파일: https://uqa.cognica.io/hotel-data/embeddings-q8.bin - 검색어에는 Xenova/paraphrase-multilingual-MiniLM-L12-v2 모델의 q8 버전을 사용하고 mean pooling과 정규화 적용 - 설치된 UQA 엔진과 사용 중인 패키지의 벡터 검색 지원 여부 및 버전 일치 확인 - 파일 길이가 7,563 × 384바이트인지 확인하고 rooms 배열 순서를 변경하지 않기 - 개수·차원·배열 순서를 확인할 수 없으면 적재하지 말고 알려줘 - 단어 검색과 의미 검색 결과를 실제 실행한 뒤 중복 객실 처리와 정렬 기준을 설명 - 지원되지 않는 기능을 임의의 점수나 가짜 결과로 대체하지 않기
임베딩 파일: embeddings-q8.bin
내 데이터에 적용
검색에 사용할 CSV 또는 JSON 파일을 작업 폴더에 준비하고, 클로드나 코덱스에 파일 경로와 프롬프트를 전달하세요. 에이전트가 실제 필드를 확인한 뒤 검색할 텍스트, 필터, 결과 정렬 기준을 제안합니다.
내 데이터 파일로 검색 기능을 구성해줘 - 내가 전달한 CSV 또는 JSON 파일의 경로를 사용 - 파일의 필드와 데이터 건수를 먼저 확인 - 검색 결과 한 건에 해당하는 데이터, 검색할 텍스트, 필터로 사용할 필드, 결과 정렬 기준을 실제 파일 내용을 기준으로 제안 - 제안한 항목을 내게 보여주고 내가 확인하면 구현 - 기존 hotel-search-101 프로젝트와 호텔 실습 파일은 변경하지 말고 새 로컬 프로젝트 사용 - 데이터에 없는 필드나 검색 점수를 임의로 생성하지 않기 - 완성 후 검색어 3개와 필터 1개를 실행하고 실제 데이터와 결과가 일치하는지 알려줘
완료 확인: 새 프로젝트의 데이터 건수와 검색어·필터별 실제 결과
다른 튜토리얼 보기