← Docs hub

Cloud Rewrite Query Quality Guide

이 문서는 Cloud LLM의 rewrite_query를 어떻게 설계하고 검증해야 하는지 정리합니다. 핵심은 Case 2가 나왔다는 사실만으로 성공이 아니라는 점입니다. rewrite_query가 다시 온디바이스 로컬 파이프라인에 들어가 기대 <sk_xx> 토큰으로 매칭되어야 최종 성공입니다.

PDF-safe Cloud Rewrite Quality Gate

PDF-safe Cloud Rewrite Prompt Hardening

1. 소스 근거

1. 소스 근거

영역 파일/위치 역할
On-device Case 2 처리 ForegroundService.kt:2699 Cloud response에서 rewrite_query 추출
로컬 재진입 ForegroundService.kt:2718 runCloudResolvedQueryThroughLocalPipeline(rewrite_query) 호출
재진입 함수 ForegroundService.kt:2039 Cloud가 만든 query를 processLLAMA()로 전달
Cloud request 생성 ForegroundService.kt:2420 originalSttResult, system prompt, environment를 Cloud로 전송
Prompt 정책 app/src/main/assets/LLM_PROMPT_kr.text:79 Case 2 JSON과 rewrite pipeline 정의
Prompt 정책 app/src/main/assets/LLM_PROMPT_en.text:78 영어 Case 2 JSON과 rewrite pipeline 정의
Cloud Lambda 진입 backend-cloud-llm-lambda/lambda_function.py:30 request body parse 및 full_rag() 호출
Cloud RAG 조합 gemini/gemini_full_rag_api.py:35 default/File RAG/Web Search 후보 조합
File RAG gemini/gemini_file_rag_api.py:36 내부 문서 기반 답변 후보
Web Search RAG gemini/gemini_gsearch_rag_api.py:10 검색 기반 최신 정보 후보
검색어 생성 gemini/search_keyword_generator.py:28 Web Search용 keyword 생성

2. Rewrite 성공 정의

2. Rewrite 성공 정의

Cloud rewrite 성공은 아래 조건을 모두 만족해야 합니다.

단계 성공 조건 실패 예
Case 분류 제품 기능이면 Case 2 제품 기능인데 Case 1 설명으로 답변
function 제품 기능명과 일치 Air quality map 요청을 일반 air quality 설명으로 분류
available_function 지원 가능한 action으로 제한 미지원 action을 실행 가능처럼 표기
rewrite_query 사용자가 말할 법한 명령형 문장 “I will execute...” 같은 수행 완료 문장
로컬 재진입 processLLAMA(rewrite_query) 호출 Cloud TTS만 하고 기능 경로 종료
token 기대 <sk_xx>로 매칭 error_answer 또는 다른 token
실행 검증 Validator/API/TTS까지 기대와 일치 token은 맞지만 error/API/TTS가 다름

3. Rewrite 문장 작성 규칙

3. Rewrite 문장 작성 규칙

한국어

좋은 rewrite_query:
- 공기질 맵 히스토리 보여줘
- 배터리 확인해줘
- 온도 단위 섭씨로 바꿔줘
- 모든 동작 멈춰줘

나쁜 rewrite_query:
- 공기질 맵 히스토리를 확인하겠습니다
- 배터리 정보를 알려드릴게요
- 사용자가 공기질 맵을 보고 싶어 합니다

영어

Good rewrite_query:
- Check the air quality map history, please
- Check the battery, please
- Set the temperature unit to celsius, please
- Stop all actions, please

Bad rewrite_query:
- I will check the air quality map history
- The user wants to see the air quality map
- Air quality map history information

4. 온디바이스 딕셔너리 적합성 기준

4. 온디바이스 딕셔너리 적합성 기준

rewrite_query는 사람이 보기 자연스러운 것만으로 부족합니다. 온디바이스 dictionary에 재매칭 가능한 형태여야 합니다.

기준 설명
기능명 명시 air quality map, battery, temperature unit처럼 기능명이 빠지면 안 됨
action 명시 check, show, set, stop 등 실제 action이 있어야 함
상태조회/설정 구분 status/checkturn on/set을 섞지 않음
대상 slot 보존 공간명, 단위, 모드 같은 필수 slot을 제거하지 않음
일반 동사 단독 금지 show me, tell me만 남기면 오매칭 위험
말레이시아 표현 확인 현지 지명/건물명은 제품 공간명으로 오해하지 않게 분리

5. 실패 패턴과 수정 방향

5. 실패 패턴과 수정 방향

실패 패턴 관찰 로그 수정 방향
Case 2가 아니라 Case 1 API Response case=1 Cloud prompt/router에 제품 기능 예시 추가
rewrite가 너무 일반적 rewrite_query=show me please 기능명 + action + slot을 명시
rewrite가 실행 완료 문장 rewrite_query=I will... 사용자 명령형으로 변경
로컬 token 미매칭 Cloud rewrite_query enters local routing pipeline 이후 error_answer 온디바이스 dictionary positive case 추가 또는 rewrite 표현 제한
다른 token 매칭 [DICTIONARY_MATCH] key=<wrong> negative case 추가, dictionary 조건 강화
말레이시아 RAG가 기능을 답변으로 처리 Case 1 또는 RAG 답변 기능 실행 요청은 RAG가 아니라 Case 2로 라우팅

5-1. Cloud prompt/router 강화 판단 기준

5-1. Cloud prompt/router 강화 판단 기준

Cloud 쪽을 고쳐야 하는 경우와 온디바이스 dictionary를 고쳐야 하는 경우를 분리해야 합니다.

증상 Cloud 수정 대상 On-device 수정 대상
제품 기능 발화를 Case 1 일반 답변으로 처리 Case Router 예시/우선순위 해당 없음
미지원 기능을 Case 2로 처리 Unsupported feature list, Case 4 규칙 해당 없음
Case 2지만 rewrite_query가 설명문/완료문 rewrite rule, bad example 추가 해당 없음
Case 2 + 좋은 rewrite인데 로컬 token 미매칭 rewrite 표현을 dictionary 친화적으로 제한 dictionary positive case 추가
로컬 token은 맞지만 파라미터가 빠짐 slot 보존 규칙 강화 parser/FunctionCallHandler 파라미터 처리
말레이시아 지명/건물명이 공간명으로 오해됨 Malaysia RAG/지역명 분리 규칙 공간명 dictionary negative case

Cloud prompt에 추가해야 하는 rewrite rule은 아래처럼 운영합니다.

1. 제품 기능 요청은 Case 2로 보낸다.
2. rewrite_query는 사용자가 다시 말할 법한 명령형 문장으로 작성한다.
3. rewrite_query에는 기능명, action, 필수 slot을 포함한다.
4. "I will", "I'll", "하겠습니다", "알려드릴게요" 같은 수행 완료 문장은 금지한다.
5. Malaysia RAG 문서가 있어도 제품 기능 실행 요청은 RAG 답변으로 끝내지 않는다.
6. rewrite_query 예시는 온디바이스 dictionary test positive case와 같이 관리한다.

변경 요청서에는 Cloud prompt 수정안만 쓰지 말고, 반드시 아래 근거를 같이 넣습니다.

원문 발화
originalSttResult
Cloud response case/function/available_function/rewrite_query
rewrite_query 로컬 재진입 결과
기대 token / 실제 token
Cloud 수정 필요 여부
Dictionary 수정 필요 여부

6. 테스트 매트릭스

6. 테스트 매트릭스

입력 발화 기대 Cloud 기대 온디바이스
Please show me the air quality map history Case 2 또는 로컬 직접 처리 <sk_29>(get=True)
Check the battery Case 2 배터리 상태 token
Set temperature unit to Celsius Case 2 온도 단위 설정 token
Open YouTube Case 4 기능 실행 없음
What is the Malaysia service center number? Case 1 + Malaysia RAG 기능 실행 없음
Turn on security mode Case 2 또는 로컬 직접 처리 <sk_46>

7. 리포트 필수 필드

7. 리포트 필수 필드

원문 발화:
originalSttResult:
Cloud request user content:
Cloud response raw:
case:
function:
available_function:
rewrite_query:
로컬 재진입 로그:
dictionary match 로그:
기대 token:
실제 token:
최종 TTS/API:
판정:
수정 대상:

8. 말레이시아 Custom RAG와의 경계

8. 말레이시아 Custom RAG와의 경계

말레이시아 현지 운영 의사결정 라우터

말레이시아 Custom RAG는 현지 고객센터, 보증, 앱 사용법, 국가별 제한 기능 같은 문서 기반 답변을 강화하는 경로입니다. 제품 기능 실행 요청을 RAG 답변으로 끝내면 안 됩니다.

질문 유형 처리
현지 서비스/보증/앱 사용법 Case 1 + Malaysia Custom RAG
제품 기능 실행 Case 2 + rewrite_query + On-device 재진입
미지원 앱/외부 서비스 실행 Case 4
현지 날씨/공기질 최신 정보 Web Search 필요 여부 판단

수정 대상 분리 기준:

관찰 결과 1차 수정 대상 같이 확인할 대상
현지 서비스 질문에 제품 기능 token이 나옴 dictionary negative Cloud router/RAG
제품 기능 요청이 RAG 답변으로 끝남 Cloud Case Router rewrite rule
Case 2 rewrite가 로컬에서 실패 dictionary positive 또는 rewrite 제한 function/action/slot 보존
현지 정책 답변 근거가 없음 Malaysia RAG 문서 Web Search 필요성
지역명/건물명이 공간명으로 오해됨 공간명 dictionary 규칙 현지 표현 regression

Keyboard shortcuts

⌘K / Ctrl+KOpen command palette
/Focus search
g hGo to home
g pGo to projects
g sGo to sessions
j / kNext / prev row (tables)
?Show this help
EscClose dialogs

Structured queries

Mix key:value filters with free text in the palette:

type:sessionOnly session pages
project:llm-wikiFilter by project name (substring)
model:claudeFilter by model name (substring)
date:>2026-03-01Sessions after a date
date:<2026-04-01Sessions before a date
tags:rustPages mentioning a tag/topic
sort:dateSort results by date (newest first)

Example: type:session project:llm-wiki date:>2026-04 sort:date