Implement Phase 19: Query Rewriting via LangGraph node

- query_rewrite 노드 추가 (agent → query_rewrite → tools 순서)
- route_after_agent: search_documents 호출 시에만 query_rewrite 라우팅, 그 외 직접 tools
  - tools_condition(prebuilt) 제거 → 커스텀 라우팅 함수로 대체
- query_rewrite_node: 구어체 쿼리를 키워드 중심 문장으로 변환
  - 이전 대화 2턴 컨텍스트로 대명사·지시어 해소
  - enable_thinking=False 바인딩으로 불필요한 사고 과정 제거
  - __query_rewrite 커스텀 이벤트 emit → RAG_VERBOSE 시 변환 결과 출력
- QUERY_REWRITE_ENABLED=true 로 활성화 (기본값 false)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
sal
2026-05-29 17:55:13 +09:00
parent 86370f6c1e
commit e4c56a9b6c
5 changed files with 97 additions and 14 deletions
+11 -8
View File
@@ -204,14 +204,17 @@ turns = conversation_repository.load_turns_after(self._conv_id, None, limit=10)
---
## Phase 19 — Query Rewriting ★☆☆
## Phase 19 — Query Rewriting ★☆☆
**배경**: 사용자 구어체 질문("아이가 밥을 안 먹어요")은 벡터 검색에 최적화되어 있지 않다. LLM이 검색 전에 질문을 재작성하면 관련 문서 검색 확률이 높아진다.
**구현 방식**:
- LangGraph에 `query_rewrite` 노드 추가 (agent → query_rewrite → tools 순서)
- 또는 `search_documents` 도구 내부에서 rewrite 후 검색
- 프롬프트: "다음 질문을 문서 검색에 최적화된 키워드 중심 문장으로 변환하세요"
**구현 내용**:
- LangGraph 그래프`query_rewrite` 노드 추가 `agent → query_rewrite → tools` 순서
- `search_documents` 호출 시에만 작동하는 조건부 라우팅 (`route_after_agent`): 다른 도구 호출이나 tool 없음 케이스는 그대로 통과
- 구어체 → 키워드 중심 쿼리로 변환 + 대명사·지시어를 구체적 명칭으로 해소 (이전 대화 2턴 컨텍스트 활용)
- `tools_condition` 제거 → 커스텀 `route_after_agent` 함수로 대체
- 변환 결과를 custom stream 이벤트로 emit → `RAG_VERBOSE=true``쿼리 최적화: "원본" → "최적화"` 출력
- `.env` `QUERY_REWRITE_ENABLED=true`로 활성화
**난이도**: 하 | **임팩트**: 중간 (구어체 질문 검색 품질 향상)
@@ -277,8 +280,8 @@ docker-compose.yml
```
단기 (1~2주) 중기 (1개월) 장기
──────────────────────── ────────────────────── ──────────────────
Phase 19 Query Rewriting → Phase 15 (모델선택) → Phase 16 (Docker)
Phase 20 (RAGAS 평가) → Phase 17 (멀티모달)
Phase 20 RAGAS 평가 → Phase 15 (모델선택) → Phase 16 (Docker)
→ Phase 17 (멀티모달)
```
### 우선순위 매트릭스
@@ -302,7 +305,7 @@ Phase 19 Query Rewriting → Phase 15 (모델선택) → Phase 16 (Docker)
| Phase 14 음성 인터페이스 | ✅ 완료 | — | — | — |
| Phase 13-B Reranker | ✅ 완료 | — | — | — |
| Phase 18 Hybrid Search | ✅ 완료 | — | — | — |
| Phase 19 Query Rewriting | 🔲 신규 | | 중간 | 3순위 |
| Phase 19 Query Rewriting | ✅ 완료 | | | |
| Phase 15 모델 선택 | 🔲 미완 | 중간 | 중간 | 4순위 |
| Phase 20 RAGAS 평가 | 🔲 신규 | 중간 | 중간 | 5순위 |
| Phase 16 Docker | 🔲 미완 | 높음 | 중간 | 6순위 |