Document Company X grounding closure path
This commit is contained in:
parent
0e8e3076bf
commit
a6fda1b024
@ -321,6 +321,14 @@ utils
|
||||
- ❌ 복잡한 규칙 체인 구축 (LLM이 더 정확하고 유지보수 용이)
|
||||
- ❌ 새로운 패턴마다 규칙 추가하는 방식 (LLM이 자동으로 처리)
|
||||
- ❌ "규칙으로 처리 가능하면 규칙 사용" 사고방식 (LLM 우선 사고)
|
||||
- ❌ 질문별 `if` 분기와 질문별 프롬프트/답변 문장을 코드에 누적해 시나리오를 닫는 방식
|
||||
- ❌ 대표 질문 몇 개만 통과시키는 특례 처리로 `완료` 판단하는 방식
|
||||
- ❌ `검색 hit 있음 = 성공`처럼 취급하고 질문 적합도/근거 부족 판정을 생략하는 방식
|
||||
|
||||
### 추가 강제 규칙
|
||||
- LLM/RAG 응답 경로는 `질문 유형 계약`, `근거 채택 규칙`, `근거 부족 시 실패 규칙`을 공통 구조로 먼저 정의해야 합니다.
|
||||
- 질문이 늘어날수록 분기와 프롬프트가 늘어나는 구조는 설계 실패로 간주합니다.
|
||||
- 특정 질문 대응이 필요하면 질문별 특례를 추가하기 전에 공통 계약으로 올릴 수 없는지 먼저 검토합니다.
|
||||
|
||||
### 장점
|
||||
- **유연성**: 새로운 패턴에 대한 규칙 추가 없이 LLM이 자연스럽게 처리
|
||||
@ -400,6 +408,46 @@ utils
|
||||
- **실제 테스트 필수**: 코드 수정 후 추측하지 말고 실제로 테스트 (curl, Slack 직접 사용, DB 조회)
|
||||
- **컨테이너 테스트 파일 반영**: tests 디렉토리는 볼륨 마운트 아님 (빌드 시 COPY). 새 테스트 파일 추가 시 `docker cp [파일경로] [컨테이너명]:/code/tests/` 사용 또는 컨테이너 재빌드
|
||||
|
||||
## 18-1. 변경 실행 워크플로우
|
||||
|
||||
**핵심 원칙**: 변경은 `계획 -> 구현 -> 테스트 -> push -> 배포 대기 -> 실제 검증 -> worklog` 순서를 기본으로 고정합니다.
|
||||
|
||||
### 기본 순서
|
||||
1. **계획 확인**
|
||||
- 열린 `troubleshooting/scenario`와 대응 `research/plans`를 먼저 확인합니다.
|
||||
- 이번 변경이 어떤 문서를 닫기 위한 실행인지 먼저 고정합니다.
|
||||
|
||||
2. **구현**
|
||||
- 계획 범위 안에서만 수정합니다.
|
||||
- 질문별 특례 하드코딩, 광범위 폴백, 임시 우회로 닫지 않습니다.
|
||||
|
||||
3. **테스트**
|
||||
- 관련 단위 테스트, 통합 테스트, 최소 재현 질문셋을 먼저 돌립니다.
|
||||
- 가능하면 실패 케이스도 함께 검증합니다.
|
||||
|
||||
4. **push**
|
||||
- 자동 배포 레포는 `git push origin main`을 실행합니다.
|
||||
- 수동 배포 레포는 해당 서비스 배포 절차를 따릅니다.
|
||||
|
||||
5. **배포 대기**
|
||||
- Actions/배포 파이프라인 완료를 기다립니다.
|
||||
- 성공 메시지만으로 완료 판단하지 않습니다.
|
||||
|
||||
6. **실제 검증**
|
||||
- `docker ps`, 헬스체크, 실제 API 응답, 실제 로그를 확인합니다.
|
||||
- 이번 변경의 재현 질문셋/시나리오 기준 질문을 운영 경로에서 다시 확인합니다.
|
||||
|
||||
7. **문서 마감**
|
||||
- 문제 없이 끝났으면 `worklog`를 남깁니다.
|
||||
- 실행 중 새 문제가 생기면 `worklog`가 아니라 `troubleshooting`으로 되돌립니다.
|
||||
- `plans`는 완료 보고서로 길게 덮어쓰지 않고, 상태와 연결 문서만 갱신합니다.
|
||||
|
||||
### 완료 금지 기준
|
||||
- 테스트 전 `push`하고 끝냈다고 말하지 않습니다.
|
||||
- 배포 완료 메시지만 보고 끝냈다고 말하지 않습니다.
|
||||
- 실제 재현 질문/실제 응답/실제 로그 확인 없이 `해결`이라고 말하지 않습니다.
|
||||
- 문제가 남아 있으면 `worklog`로 보내지 않습니다.
|
||||
|
||||
## 19. 리팩토링 시 로직 상실 방지 원칙
|
||||
|
||||
### 필수 체크리스트 (코드 이동/리팩토링 전)
|
||||
|
||||
@ -19,6 +19,12 @@ LLM 출력을 후처리하여 로빙의 고유한 성격과 윤리적 기준을
|
||||
### 경험치 (Experience Points, XP)
|
||||
로빙이 작업을 수행하거나 사용자와 상호작용할 때 획득하는 포인트. 일정량 누적 시 레벨업이 발생함.
|
||||
|
||||
### 공통 계약 (Common Contract)
|
||||
특정 기능 경로가 따라야 하는 공통 `입력-판단-출력` 약속. 질문별 예외 문장을 계속 추가하는 대신, 질문 유형 분류, 근거 채택 기준, 실패 조건 같은 규칙을 한 번 정의해 코드·프롬프트·테스트가 함께 따르도록 고정한 기준을 뜻한다.
|
||||
관련 문서:
|
||||
- [311_backend_coding_principles.md](../300_architecture/311_backend_coding_principles.md)
|
||||
- [Company X RAG 답변합성 시나리오·트러블 동시종결 리서치](../../journey/research/260315_companyx_rag_답변합성_시나리오동시종결_리서치.md)
|
||||
|
||||
## ㄷ
|
||||
|
||||
### 디지털 동료 (Digital Colleague)
|
||||
|
||||
138
journey/plans/260315_companyx_rag_답변합성_시나리오동시종결_계획.md
Normal file
138
journey/plans/260315_companyx_rag_답변합성_시나리오동시종결_계획.md
Normal file
@ -0,0 +1,138 @@
|
||||
---
|
||||
tags: [plans, companyx, rag, answer-composition, scenario, troubleshooting]
|
||||
---
|
||||
|
||||
# Company X RAG 답변합성 시나리오·트러블 동시종결 계획
|
||||
|
||||
**작성일**: 2026-03-15
|
||||
**상태**: planned
|
||||
**목표**: Company X 내부문서 근거응답 경로를 `대표 질문 특례 처리`에서 `공통 계약 기반 답변합성` 구조로 바꿔, 대응 troubleshooting 문서와 scenario 문서를 함께 닫습니다.
|
||||
|
||||
## 관련 문서
|
||||
- [Company X RAG 답변 합성 회귀](../troubleshooting/260312_companyx_rag_answer_composition_regression.md)
|
||||
- [Company X 내부 문서 근거응답 사용자 시나리오](../scenarios/260312_companyx_내부문서_근거응답_사용자시나리오.md)
|
||||
- [Company X RAG 답변합성 시나리오·트러블 동시종결 리서치](../research/260315_companyx_rag_답변합성_시나리오동시종결_리서치.md)
|
||||
- [Company X RAG 스킬 문서](../../skills/companyx-rag/SKILL.md)
|
||||
|
||||
## 1. 이번 계획의 결정
|
||||
- 이 문제는 `검색 인프라 확장`보다 `답변 합성 계약 부재` 문제로 다룹니다.
|
||||
- 질문별 `if` 분기, 질문별 direct answer, 질문별 프롬프트 추가로 닫지 않습니다.
|
||||
- `Company X grounding` 경로에 공통 계약 3개를 먼저 고정합니다.
|
||||
1. 질문 유형 계약
|
||||
2. 근거 채택 계약
|
||||
3. 근거 부족 시 실패 계약
|
||||
- 성공 기준은 `검색 hit 존재`가 아니라 `직접 답 + 질문 적합 근거 또는 명시적 부족 안내`로 바꿉니다.
|
||||
|
||||
## 2. 범위
|
||||
- 포함:
|
||||
- `rb8001/app/services/companyx_grounding_service.py`
|
||||
- Company X 재오픈 기준 질문 3개의 응답 계약
|
||||
- `SKILL.md`와 코드 계약 정합화
|
||||
- 테스트 보강
|
||||
- 제외:
|
||||
- Company X 전체 문서셋 대규모 확대
|
||||
- 다른 RAG 경로 공통화
|
||||
- Prompt DB 전면화
|
||||
- `skill-rag-file` 자체 리팩토링
|
||||
|
||||
## 3. 공통 계약 고정안
|
||||
|
||||
### A. 질문 유형 계약
|
||||
- 최소 유형은 아래 4개로 고정합니다.
|
||||
- 설명형
|
||||
- 사실 확인형
|
||||
- 수치 확인형
|
||||
- 재정리형
|
||||
- 판단 결과는 코드 내부 enum 또는 동등한 상수로 다룹니다.
|
||||
- 질문별 문자열 특례가 아니라 유형별 처리로 묶습니다.
|
||||
|
||||
### B. 근거 채택 계약
|
||||
- 검색 결과가 있다고 바로 근거로 채택하지 않습니다.
|
||||
- 채택 기준:
|
||||
- 질문의 핵심 엔티티와 직접 관련이 있어야 합니다.
|
||||
- 질문 유형에 맞는 문서여야 합니다.
|
||||
- 상위 결과라도 질문과 무관하면 버립니다.
|
||||
- `relevance_score`는 후보 신호일 뿐, 최종 성공 판정 기준이 아닙니다.
|
||||
|
||||
### C. 실패 계약
|
||||
- 아래 경우는 성공처럼 반환하지 않습니다.
|
||||
- 검색 결과 0개
|
||||
- 검색 결과는 있으나 질문과 무관
|
||||
- 수치/규정 질문인데 단정 가능한 근거가 없음
|
||||
- 실패 응답은 아래 셋 중 하나로 고정합니다.
|
||||
- `문서 없음`
|
||||
- `질문과 맞는 문서 미확인`
|
||||
- `내부 문서만으로는 단정 불가`
|
||||
|
||||
## 4. 구현 원칙
|
||||
- `SKILL.md`의 답변 순서(`direct answer -> evidence documents -> short evidence summary`)를 코드 계약으로 내립니다.
|
||||
- 질문별 direct answer 하드코딩을 더 늘리지 않습니다.
|
||||
- 질문 유형 판정과 근거 채택 판정은 별도 함수로 분리합니다.
|
||||
- `검색됨`과 `답할 수 있음`을 같은 상태로 취급하지 않습니다.
|
||||
- 메타 대화(`어떤 부분이 더 필요하신지...`)는 실패 기본 경로로 사용하지 않습니다.
|
||||
|
||||
## 5. 구현 단계
|
||||
|
||||
### Phase 1. 구조 분리
|
||||
- `companyx_grounding_service`에서 아래 책임을 분리합니다.
|
||||
- 질문 유형 판정
|
||||
- query candidate 생성
|
||||
- retrieval 결과 수집
|
||||
- 근거 채택 판정
|
||||
- direct answer 생성
|
||||
- failure answer 생성
|
||||
- 목표:
|
||||
- 현재 질문별 특례 분기와 generic fallback이 어디서 작동하는지 코드상 경계를 명확히 나눕니다.
|
||||
|
||||
### Phase 2. 질문 유형 계약 도입
|
||||
- 최소 4개 유형 분류 함수를 추가합니다.
|
||||
- 재오픈 기준 질문 3개는 각 유형에 명시 매핑돼야 합니다.
|
||||
- `컴퍼니엑스의 투자사는 몇개야?` -> 수치 확인형
|
||||
- `그럼 컴퍼니엑스 내부 규정 상 휴가는 얼마나 쓸 수 있어?` -> 사실 확인형 또는 규정 확인형 성격
|
||||
- `오늘전통 프로그램을 Company X가 옐로펀치랑 같이 운영한다는 근거 있어?` -> 사실 확인형
|
||||
|
||||
### Phase 3. 근거 채택 판정 추가
|
||||
- 검색 결과를 그대로 상위 3개 노출하지 않습니다.
|
||||
- 질문 유형에 맞지 않는 청크는 버립니다.
|
||||
- 필요 최소 판정:
|
||||
- 엔티티 일치 여부
|
||||
- 문서 성격 일치 여부
|
||||
- 답변 가능 근거인지 여부
|
||||
- `휴가` 질문에 `todaytradition` 청크가 잡히는 경우는 `무관한 결과`로 실패 처리해야 합니다.
|
||||
|
||||
### Phase 4. direct/failure 응답 계약 재구성
|
||||
- direct answer는 유형별 템플릿과 채택된 근거 상태를 바탕으로 생성합니다.
|
||||
- 질문별 하드코딩 문장을 추가하지 않습니다.
|
||||
- failure answer는 `문서 없음 / 문서 미확인 / 단정 불가` 중 하나로 분명히 떨어져야 합니다.
|
||||
|
||||
### Phase 5. 테스트 고정
|
||||
- 최소 테스트:
|
||||
- 대표 성공 질문은 계속 성공
|
||||
- 투자사 질문은 generic 문장 금지
|
||||
- 휴가 질문은 무관한 청크 반환 금지
|
||||
- 근거 부족 시 명시적 실패 응답
|
||||
- 재정리형 질문은 근거 목록 재사용 또는 재구성
|
||||
- 테스트는 질문별 예외 성공이 아니라 공통 계약 준수 여부를 검증해야 합니다.
|
||||
|
||||
## 6. 검증 기준
|
||||
- 재오픈 기준 질문 3개에서 아래가 확인돼야 합니다.
|
||||
1. 직접 답이 먼저 나온다.
|
||||
2. 질문과 맞는 근거만 붙는다.
|
||||
3. 근거가 부족하면 명시적으로 부족하다고 답한다.
|
||||
- `검색 hit 있음 = success` 경로가 제거돼야 합니다.
|
||||
- 질문별 특례 추가 없이도 재오픈 질문셋이 통과해야 합니다.
|
||||
- `SKILL.md` 요구사항과 실제 응답 형식이 일치해야 합니다.
|
||||
|
||||
## 7. 완료 판정 기준
|
||||
1. [260312_companyx_rag_answer_composition_regression.md](../troubleshooting/260312_companyx_rag_answer_composition_regression.md)에서 정의한 재현 질문셋이 더 이상 회귀하지 않습니다.
|
||||
2. [260312_companyx_내부문서_근거응답_사용자시나리오.md](../scenarios/260312_companyx_내부문서_근거응답_사용자시나리오.md)의 재오픈 기준 질문 3개가 기대 결과를 만족합니다.
|
||||
3. `companyx_grounding_service`에 질문별 direct answer 특례를 추가하지 않고 공통 계약 구조로 바뀝니다.
|
||||
4. 테스트가 추가되고 통과합니다.
|
||||
5. 실행 결과는 `worklog 1건`으로 마감하고, 시나리오/트러블 문서와 양방향 링크를 연결합니다.
|
||||
|
||||
## 8. 후속 경계
|
||||
- 이 계획이 닫혀도 Company X 전체 문서군 확대나 범용 RAG 정책 공통화는 별도 계획으로 다룹니다.
|
||||
- `Prompt DB`나 전역 오케스트레이션 구조 변경은 이번 계획 범위 밖입니다.
|
||||
|
||||
## 한 줄 결론
|
||||
- 이번 계획은 `대표 질문 특례 처리 제거` 자체가 아니라, Company X 근거응답을 `질문 유형 계약 + 근거 채택 계약 + 실패 계약`으로 재구성해 시나리오와 트러블을 함께 닫는 작업입니다.
|
||||
@ -59,6 +59,11 @@
|
||||
|
||||
**참고**: `plans/archive/250808_감정시스템_현실적용_5단계_로드맵.md`
|
||||
|
||||
### 6. Company X RAG 답변합성 시나리오·트러블 동시종결 (260315)
|
||||
**상태**: planned
|
||||
**목표**: Company X 내부문서 근거응답을 질문별 특례 처리에서 공통 계약 기반 답변합성 구조로 전환
|
||||
**참고**: `plans/260315_companyx_rag_답변합성_시나리오동시종결_계획.md`
|
||||
|
||||
---
|
||||
|
||||
## 🟡 부분 완료 항목 (남은 작업만)
|
||||
|
||||
192
journey/research/260315_companyx_rag_답변합성_시나리오동시종결_리서치.md
Normal file
192
journey/research/260315_companyx_rag_답변합성_시나리오동시종결_리서치.md
Normal file
@ -0,0 +1,192 @@
|
||||
---
|
||||
tags: [research, companyx, rag, answer-composition, scenario, troubleshooting]
|
||||
---
|
||||
|
||||
# Company X RAG 답변합성 시나리오·트러블 동시종결 리서치
|
||||
|
||||
## 상위 원칙
|
||||
- [Writing Principles](../../book/300_architecture/312_writing-principles.md)
|
||||
- [Company X RAG 답변 합성 회귀](../troubleshooting/260312_companyx_rag_answer_composition_regression.md)
|
||||
- [Company X 내부 문서 근거응답 사용자 시나리오](../scenarios/260312_companyx_내부문서_근거응답_사용자시나리오.md)
|
||||
|
||||
## 목적
|
||||
- `Company X` 근거응답 이슈를 `트러블슈팅 + 시나리오` 한 문제로 보고, 둘을 함께 닫기 위한 원인 기준을 고정합니다.
|
||||
- 현재 실패가 `검색 인프라 문제`인지, `답변 합성 문제`인지, `질문별 하드코딩 구조 문제`인지 단일 경로로 좁힙니다.
|
||||
- 이 문서는 해결안 확장보다 `다음 plan 1건`을 만들 수 있을 정도로 직접 원인을 확정하는 데만 집중합니다.
|
||||
|
||||
## 조사 질문
|
||||
1. 현재 실패의 직접 레이어는 검색인가, 답변 합성인가
|
||||
2. `컴퍼니엑스의 투자사는 몇개야?`, `내부 규정 상 휴가는 얼마나 쓸 수 있어?`가 왜 깨지는가
|
||||
3. 현재 Company X 경로는 일반 규칙 기반인가, 질문별 하드코딩 기반인가
|
||||
4. 트러블 문서와 시나리오 문서를 함께 닫으려면 무엇을 plan에서 고정해야 하는가
|
||||
|
||||
## 범위 / 비범위
|
||||
- 범위:
|
||||
- `rb8001`의 Company X grounding 진입/검색/응답 합성 경로
|
||||
- 재오픈 기준 질문 3개에 대한 처리 구조
|
||||
- 프롬프트/if 분기/질문 적합도 선별 구조
|
||||
- 비범위:
|
||||
- Company X 전체 문서셋 확대 작업
|
||||
- `skill-rag-file` 인덱싱 성능 일반론
|
||||
- 다른 프로젝트나 다른 RAG 경로 전면 리팩토링
|
||||
- 최종 수정안 구현 자체
|
||||
|
||||
## 사실(Facts)
|
||||
|
||||
### 1. Company X 질문은 의도 분류 전에 전용 grounding 경로로 우선 진입한다
|
||||
- `route_message()`는 사용자 컨텍스트 생성 직후 `try_companyx_grounding()`을 먼저 호출합니다.
|
||||
- 위치:
|
||||
- `rb8001/app/services/message_service.py:81-93`
|
||||
- 의미:
|
||||
- Company X 질문은 일반 intent/skill 경로 전에 별도 처리됩니다.
|
||||
- 따라서 이번 실패는 `일반 의도 분류가 Company X 질문을 놓쳤다`만으로 설명되지 않습니다.
|
||||
|
||||
### 2. Company X 경로 진입 조건은 팀 ID + 문자열 marker 기반 휴리스틱이다
|
||||
- `should_handle_companyx_grounding()`은 `team_id == COMPANYX_TEAM_ID`와 `_looks_like_companyx_grounding_question(message)`로만 판단합니다.
|
||||
- `_looks_like_companyx_grounding_question()`은 `근거`, `내부 문서`, `공동 운영`, `컴퍼니엑스`, `companyx` 같은 marker 포함 여부를 봅니다.
|
||||
- 위치:
|
||||
- `rb8001/app/services/companyx_grounding_service.py:28-60`
|
||||
- 의미:
|
||||
- 질문 유형이나 필요한 답변 방식보다 문자열 포함 여부가 우선입니다.
|
||||
- `컴퍼니엑스`만 들어가도 grounding 경로로 진입할 수 있습니다.
|
||||
|
||||
### 3. 검색 질의 확장은 사실상 질문 2종만 별도 하드코딩돼 있다
|
||||
- `_build_query_candidates()`는 기본적으로 원문 질문 1개를 그대로 사용합니다.
|
||||
- 추가 질의 확장은 아래 경우에만 있습니다.
|
||||
- `오늘전통 + 옐로펀치`
|
||||
- `X-COURSE`
|
||||
- 위치:
|
||||
- `rb8001/app/services/companyx_grounding_service.py:63-91`
|
||||
- 의미:
|
||||
- `투자사 몇 개`, `휴가 규정` 같은 재오픈 질문은 전용 query expansion이 없습니다.
|
||||
- 대표 질문만 상대적으로 유리한 구조입니다.
|
||||
|
||||
### 4. 검색 결과는 질문 적합도 재평가 없이 relevance score 순으로만 합쳐진다
|
||||
- `_search_companyx_documents()`는 후보 질의별 검색 결과를 병합한 뒤 `relevance_score` 내림차순으로만 정렬합니다.
|
||||
- 질문 유형, 문서 종류, 문서-질문 정합성 재평가 단계는 없습니다.
|
||||
- 위치:
|
||||
- `rb8001/app/services/companyx_grounding_service.py:113-127`
|
||||
- 의미:
|
||||
- 검색 hit가 있어도 그 hit가 질문에 맞는 근거인지 다시 검증하지 않습니다.
|
||||
|
||||
### 5. 직접 답 생성은 질문별 if 분기 하드코딩이고, 기본값은 generic 문장이다
|
||||
- `_build_direct_answer()`는 아래 경우만 별도 문장을 가집니다.
|
||||
- `오늘전통 + 옐로펀치`
|
||||
- `X-COURSE`
|
||||
- 그 외 모든 질문은 기본값 `Company X 내부 문서에서 관련 근거를 찾았습니다.`를 반환합니다.
|
||||
- 위치:
|
||||
- `rb8001/app/services/companyx_grounding_service.py:136-153`
|
||||
- 의미:
|
||||
- `투자사는 몇개야?` 같은 수치형 질문은 답을 계산하거나 `단정 불가`를 판단하지 않고 generic 문장으로 끝납니다.
|
||||
- 현재 구조는 질문 유형별 답변 계약이 아니라 일부 질문별 문장 하드코딩입니다.
|
||||
|
||||
### 6. 실패 처리는 `검색 결과가 0개일 때`만 작동하고, `검색은 됐지만 무관한 경우`를 다루지 않는다
|
||||
- `_build_grounded_response()`의 실패 문장은 `if not results`일 때만 반환됩니다.
|
||||
- 결과가 1개라도 있으면 질문 적합성 검증 없이 `근거 문서:` 목록을 붙입니다.
|
||||
- 위치:
|
||||
- `rb8001/app/services/companyx_grounding_service.py:155-171`
|
||||
- 의미:
|
||||
- 휴가 질문에 무관한 `companyx_todaytradition.pdf` 청크가 잡히면, 시스템은 이를 실패가 아니라 성공처럼 출력합니다.
|
||||
- 즉 현재 실패 경계는 `no result`만 있고 `irrelevant result`는 없습니다.
|
||||
|
||||
### 7. 현재 Company X 응답은 LLM 기반 합성이 아니라 규칙 기반 문자열 조합이다
|
||||
- Company X 전용 경로는 검색 결과를 가져온 뒤 `_build_direct_answer()`와 청크 요약 문자열을 이어붙여 응답을 만듭니다.
|
||||
- 위치:
|
||||
- `rb8001/app/services/companyx_grounding_service.py:130-171`
|
||||
- 의미:
|
||||
- 현재 이 문제의 본질은 `프롬프트가 약해서`라기보다, `규칙 설계가 질문 유형을 감당하지 못하는 상태`입니다.
|
||||
- 다만 구현 형태는 질문별 문장/분기 하드코딩에 의존하고 있어 유지보수성이 낮습니다.
|
||||
|
||||
### 8. 스킬 문서가 요구하는 계약과 현재 구현 계약은 일치하지 않는다
|
||||
- `SKILL.md`는 답변 순서를 `direct answer -> evidence documents -> short evidence summary`로 고정합니다.
|
||||
- 또한 `documents are missing, say the evidence is insufficient`를 요구합니다.
|
||||
- 위치:
|
||||
- `DOCS/skills/companyx-rag/SKILL.md`
|
||||
- 현재 구현은 아래 차이가 있습니다.
|
||||
- `직접 답`이 generic 문장으로 대체될 수 있음
|
||||
- `문서 부족`과 `무관한 문서 반환`을 구분하지 않음
|
||||
- 증거 문서 적합성 검증 없이 score 상위 청크를 그대로 노출함
|
||||
- 의미:
|
||||
- 문제의 직접 원인은 스킬 문서 부재가 아니라, 구현이 스킬 계약을 끝까지 지키지 못하는 데 있습니다.
|
||||
|
||||
### 9. 대표 성공 질문은 구조적으로 우대돼 있고, 재오픈 질문은 일반화 경로에 놓여 있다
|
||||
- `오늘전통 + 옐로펀치` 질문은
|
||||
- 별도 query expansion이 있고
|
||||
- 별도 direct answer 하드코딩이 있으며
|
||||
- 대표 근거 문서셋도 이미 worklog에 남아 있습니다.
|
||||
- 관련 문서:
|
||||
- [Company X 내부문서 RAG 근거응답 1차 구현 및 부분 검증](../worklog/260312_companyx_내부문서_rag_근거응답_구현및시나리오검증.md)
|
||||
- 반면 재오픈 질문 2개는
|
||||
- 전용 query expansion이 없고
|
||||
- 질문 유형 분기 규칙도 없고
|
||||
- generic fallback 문장으로 마감됩니다.
|
||||
- 의미:
|
||||
- 현재 성공은 일반화된 성공이 아니라 `대표 질문 최적화 성공`에 가깝습니다.
|
||||
|
||||
### 10. 따라서 지금 실패는 `검색 부재`보다 `답변 합성 + 실패 판정 부재 + 질문별 하드코딩 편향`의 결합이다
|
||||
- 앞선 사실을 합치면 현재 경로는 아래 구조입니다.
|
||||
1. marker 기반으로 Company X 경로 진입
|
||||
2. 일부 질문만 유리한 query expansion
|
||||
3. relevance score만으로 검색 결과 채택
|
||||
4. 일부 질문만 direct answer 하드코딩
|
||||
5. 결과가 하나라도 있으면 성공처럼 문서 목록 노출
|
||||
- 의미:
|
||||
- 이번 이슈의 직접 레이어는 `answer composition`입니다.
|
||||
- 그러나 더 깊게 보면 `질문 유형 계약이 없는 규칙 하드코딩 구조`가 상위 원인입니다.
|
||||
|
||||
## 해석(Interpretation)
|
||||
|
||||
### 1. 이 문제는 검색 인프라 장애가 아니라 응답 정책 부재 문제다
|
||||
- Company X 전용 경로는 실제로 존재하고, 검색 호출도 수행합니다.
|
||||
- 실패가 나는 지점은 `질문에 대한 직접 답을 어떻게 만들고, 어떤 검색 결과를 근거로 채택하며, 언제 모른다고 말할지`가 비어 있다는 점입니다.
|
||||
|
||||
### 2. 지금 구조는 시나리오를 닫기 어려운 형태다
|
||||
- 시나리오는 `설명형`, `사실 확인형`, `수치 확인형`, `재정리형`을 모두 요구합니다.
|
||||
- 하지만 현재 구현은 실질적으로 `대표 사실 확인형 2종`만 특례 처리합니다.
|
||||
- 따라서 새 질문이 들어올수록 `if`와 문장 하드코딩이 늘어날 가능성이 높고, 시나리오를 일반 규칙으로 닫을 수 없습니다.
|
||||
|
||||
### 3. 트러블 문서가 지적한 회귀의 직접 원인은 질문 적합도 검증 부재다
|
||||
- 재오픈 질문들은 검색 결과가 0개라서 실패한 것이 아닙니다.
|
||||
- 결과가 있어도 질문과 무관한 청크를 success처럼 출력했습니다.
|
||||
- 즉 이번 회귀를 닫는 핵심은 `retrieval result exists`가 아니라 `retrieval result is fit for this question`를 판정하는 단계입니다.
|
||||
|
||||
### 4. 스킬 문서는 방향이 맞지만, 구현 계약으로 내려오지 않았다
|
||||
- `SKILL.md`는 이미 직접 답, 근거 문서, 부족 시 명시를 요구합니다.
|
||||
- 문제는 그 계약이 코드에서 재현 가능한 판정 규칙으로 변환되지 않은 것입니다.
|
||||
- 따라서 다음 plan은 새 문구를 더 쓰는 게 아니라, 스킬 계약을 코드가 판정 가능한 구조로 바꾸는 데 집중해야 합니다.
|
||||
|
||||
### 5. 하드코딩 프롬프트/문장 증식은 이 문제의 해법이 아니다
|
||||
- 현재도 대표 질문 성공은 이미 하드코딩 특례에 기대고 있습니다.
|
||||
- 이 상태에서 `투자사`, `휴가`, `투자 건수`, `규정`, `복지` 식으로 질문별 문장을 더 추가하면,
|
||||
- 시나리오는 겉보기로만 닫히고
|
||||
- 트러블은 다른 질문에서 다시 열리며
|
||||
- 프롬프트와 if 분기 중복만 쌓이게 됩니다.
|
||||
|
||||
## 미확정 항목(Unresolved)
|
||||
1. `skill-rag-file`의 반환 score만으로 질문 적합도를 판정할 수 있는지, 별도 rerank가 필요한지는 아직 미확정입니다.
|
||||
2. 수치형 질문의 `단정 가능 / 단정 불가`를 문서 메타데이터만으로 먼저 판정할지, 후속 요약 계층을 둘지는 아직 미확정입니다.
|
||||
3. `재정리형 질문`을 이전 응답 재사용으로 처리할지, 다시 검색해도 되는지는 아직 미확정입니다.
|
||||
4. Company X 전용 규칙을 독립 계약 모듈로 둘지, 범용 grounding 정책으로 올릴지는 아직 미확정입니다.
|
||||
|
||||
## 결론
|
||||
- 이 이슈의 직접 원인은 `Company X 검색 실패`가 아니라 `질문 적합 근거 선별 없는 답변 합성`입니다.
|
||||
- 더 근본 원인은 `질문 유형 계약 없이 일부 질문만 하드코딩 특례 처리하는 구조`입니다.
|
||||
- 따라서 다음 plan은 `프롬프트 문장 추가`가 아니라 아래 3가지를 고정해야 합니다.
|
||||
1. 질문 유형별 판정 계약
|
||||
2. 검색 결과의 질문 적합도 판정 계약
|
||||
3. 근거 부족 시 명시적 실패 계약
|
||||
|
||||
## 다음 plan이 반드시 고정해야 할 항목
|
||||
1. 재오픈 기준 질문 3개를 공통 검증셋으로 고정할 것
|
||||
2. `success`의 정의를 `검색 hit 존재`가 아니라 `직접 답 + 질문 적합 근거 또는 명시적 부족 안내`로 바꿀 것
|
||||
3. 질문별 direct answer 하드코딩 추가를 금지하고, 질문 유형별 공통 계약으로 대체할 것
|
||||
4. `무관한 청크 반환`을 `실패`로 판정하는 경계를 추가할 것
|
||||
5. 스킬 문서 계약과 코드 계약을 1:1로 맞출 것
|
||||
|
||||
## 관련 문서
|
||||
- [Company X RAG 답변 합성 회귀](../troubleshooting/260312_companyx_rag_answer_composition_regression.md)
|
||||
- [Company X 내부 문서 근거응답 사용자 시나리오](../scenarios/260312_companyx_내부문서_근거응답_사용자시나리오.md)
|
||||
- [Company X 내부문서 RAG 근거응답 현황 리서치](./260312_companyx_내부문서_rag_근거응답_현황_리서치.md)
|
||||
- [Company X RAG 답변합성 시나리오·트러블 동시종결 계획](../plans/260315_companyx_rag_답변합성_시나리오동시종결_계획.md)
|
||||
- [Company X 내부문서 RAG 근거응답 1차 구현 및 부분 검증](../worklog/260312_companyx_내부문서_rag_근거응답_구현및시나리오검증.md)
|
||||
- [Company X RAG 스킬 문서](../../skills/companyx-rag/SKILL.md)
|
||||
@ -13,6 +13,7 @@
|
||||
- [자가수정 에이전트 프레임워크 및 Workspace CLI 검증 리서치 (260311)](./260311_자가수정_에이전트_프레임워크_및_workspace_cli_검증_리서치.md)
|
||||
- [NAVER WORKS 브리핑 인사이트 서두 누출 종료 리서치 (260311)](./260311_naverworks_briefing_insight_preamble_leak_closure_research.md)
|
||||
- [인간 업무행동과 원자스킬 분류 리서치 (260312)](./260312_인간_업무행동과_원자스킬_분류_리서치.md)
|
||||
- [Company X RAG 답변합성 시나리오·트러블 동시종결 리서치 (260315)](./260315_companyx_rag_답변합성_시나리오동시종결_리서치.md)
|
||||
- [스킬 계약 문서 기반 컨텍스트 오케스트레이션 리서치 (260314)](./260314_스킬_계약_문서_기반_컨텍스트_오케스트레이션_리서치.md)
|
||||
|
||||
### [기억(Memory)](./memory/README.md)
|
||||
|
||||
@ -23,6 +23,11 @@ tags: [robeing, companyx, rag, scenarios, user-experience]
|
||||
- 수치 확인형 질문: "이번 달 확정 투자 건수 몇 건이야?"
|
||||
- 재정리형 질문: "근거 문서명만 다시 정리해줘."
|
||||
|
||||
## 이 시나리오의 운영 범위
|
||||
- 대상은 `Company X 소속 사용자`의 `내부 문서 근거응답 경험`입니다.
|
||||
- 핵심은 검색 성공 자체보다 `답변을 어떻게 마무리해 사용자에게 신뢰 가능한 형태로 보여주느냐`입니다.
|
||||
- 따라서 이 시나리오는 `검색됨`만으로 닫히지 않고, `직접 답 + 맞는 근거 + 부족 시 명시적 한계 고지`까지 충족해야 닫힙니다.
|
||||
|
||||
## 장면 1. 프로그램 자료를 빠르게 찾고 설명받고 싶다
|
||||
1. 사용자가 묻습니다. "X-COURSE가 뭐야? 내부 자료 기준으로 설명해줘."
|
||||
2. 로빙은 Company X 내부 문서에서 `X-COURSE` 관련 소개서, 운영 문서, 제안서 등을 먼저 찾습니다.
|
||||
@ -86,6 +91,17 @@ tags: [robeing, companyx, rag, scenarios, user-experience]
|
||||
- 근거가 부족하면 추정 대신 부족한 이유와 다음 확인 대상을 말합니다.
|
||||
- 사용자가 재사용할 수 있게 근거 문서 목록을 다시 뽑아줄 수 있어야 합니다.
|
||||
|
||||
## 재오픈 기준 질문과 기대 결과
|
||||
1. `컴퍼니엑스의 투자사는 몇개야?`
|
||||
- 기대 결과: 수치를 말할 수 있으면 문서 근거와 함께 말하고, 말할 수 없으면 `내부 문서만으로는 단정 불가`를 분명히 답합니다.
|
||||
|
||||
2. `그럼 컴퍼니엑스 내부 규정 상 휴가는 얼마나 쓸 수 있어?`
|
||||
- 기대 결과: 휴가 규정 문서가 확인되지 않으면 `관련 내부 규정을 아직 확인하지 못했다`고 답합니다.
|
||||
|
||||
3. `오늘전통 프로그램을 Company X가 옐로펀치랑 같이 운영한다는 근거 있어?`
|
||||
- 기대 결과: 직접 답 + 근거 문서명 + 근거 요약이 함께 나와야 합니다.
|
||||
- 의미: 이미 일부 동작 확인된 질문이므로, 재오픈 이후에도 계속 유지돼야 하는 기준 질문입니다.
|
||||
|
||||
## 금지 답변
|
||||
- 내부 문서에 없는 최신 수치를 추정해 단정하지 않습니다.
|
||||
- 근거 문서 없이 "알고 있다", "그럴 것이다" 같은 표현으로 넘기지 않습니다.
|
||||
@ -116,6 +132,12 @@ tags: [robeing, companyx, rag, scenarios, user-experience]
|
||||
- 사용자가 답변 후 "근거 문서가 뭐냐"를 다시 묻는 빈도가 줄어듭니다.
|
||||
- 설명형, 사실 확인형, 수치 확인형, 재정리형 질문 모두에서 답변 형식이 크게 흔들리지 않습니다.
|
||||
|
||||
## 닫힘 판정 기준
|
||||
- 재오픈 기준 질문 3개에서 각각 기대 결과가 실제 응답으로 재현돼야 합니다.
|
||||
- 성공 질문 1개만 맞고 다른 질문에서 무관한 청크를 반환하는 상태는 닫힘으로 보지 않습니다.
|
||||
- 사용자가 추가 질문을 했을 때도 메타 대화로 빠지지 않고, 근거 재정리 또는 근거 부족 안내로 이어져야 합니다.
|
||||
- 이 시나리오는 대응 troubleshooting 문서와 함께 만족하는 단일 research와 단일 plan이 작성돼야 다음 단계로 넘어갑니다.
|
||||
|
||||
## 현재 재오픈 이유
|
||||
- 대표 질문 일부는 동작했지만, Slack 실응답 `컴퍼니엑스의 투자사는 몇개야?`에서 기대 형식이 깨졌습니다.
|
||||
- 실제 응답은 직접 답 없이 관련성 낮은 청크만 반환했고, 이는 이 시나리오의 완료 기준을 만족하지 못합니다.
|
||||
@ -126,4 +148,6 @@ tags: [robeing, companyx, rag, scenarios, user-experience]
|
||||
- [Company X 내부 문서 RAG 응답 아이디어](../ideas/260312_companyx_내부문서_rag_응답_아이디어.md)
|
||||
- [Company X 내부문서 RAG 근거응답 구현 및 시나리오 검증](../worklog/260312_companyx_내부문서_rag_근거응답_구현및시나리오검증.md)
|
||||
- [Company X RAG 답변 합성 회귀](../troubleshooting/260312_companyx_rag_answer_composition_regression.md)
|
||||
- [Company X RAG 답변합성 시나리오·트러블 동시종결 리서치](../research/260315_companyx_rag_답변합성_시나리오동시종결_리서치.md)
|
||||
- [Company X RAG 답변합성 시나리오·트러블 동시종결 계획](../plans/260315_companyx_rag_답변합성_시나리오동시종결_계획.md)
|
||||
- [컴퍼니엑스(Company X) 개요](../../book/500_business/560_컴퍼니엑스_개요.md)
|
||||
|
||||
@ -8,6 +8,13 @@ tags: [robeing, companyx, rag, troubleshooting, answer-quality]
|
||||
- [Company X 내부 문서 근거응답 사용자 시나리오](../scenarios/260312_companyx_내부문서_근거응답_사용자시나리오.md)
|
||||
- [Company X 내부문서 RAG 근거응답 구현 및 시나리오 검증](../worklog/260312_companyx_내부문서_rag_근거응답_구현및시나리오검증.md)
|
||||
- [Company X 내부문서 RAG 근거응답 구현계획](../plans/260312_companyx_내부문서_rag_근거응답_구현계획.md)
|
||||
- [Company X RAG 답변합성 시나리오·트러블 동시종결 리서치](../research/260315_companyx_rag_답변합성_시나리오동시종결_리서치.md)
|
||||
- [Company X RAG 답변합성 시나리오·트러블 동시종결 계획](../plans/260315_companyx_rag_답변합성_시나리오동시종결_계획.md)
|
||||
|
||||
## 이 문서가 다루는 범위
|
||||
- 대상은 `Company X 내부문서 근거응답`의 `답변 합성 단계`입니다.
|
||||
- 검색 인프라 자체 장애, 권한 차단, 문서 업로드 실패는 본 문서의 1차 범위가 아닙니다.
|
||||
- 핵심은 `질문에 맞는 직접 답`, `질문 적합 근거 선별`, `근거 부족 시 실패 처리`가 실제 응답에서 깨진 문제입니다.
|
||||
|
||||
## 문제
|
||||
- Company X RAG 연결 자체는 되었지만, 실제 Slack 실응답이 시나리오의 기대 답변 형식을 만족하지 못했습니다.
|
||||
@ -34,12 +41,30 @@ tags: [robeing, companyx, rag, troubleshooting, answer-quality]
|
||||
- 규정형 질문처럼 아예 문서군이 다를 가능성이 큰 질의에서도, `근거 없음` 대신 무관한 청크를 억지로 반환했습니다.
|
||||
- 즉 현재 구현은 `질문별 답변 합성 품질`이 안정화되지 않았습니다.
|
||||
|
||||
## 재현 질문셋과 기대 결과
|
||||
1. `컴퍼니엑스의 투자사는 몇개야?`
|
||||
- 기대 결과: 직접 답이 먼저 나와야 하며, 내부 문서만으로 단정 불가하면 그 사실을 명확히 말해야 합니다.
|
||||
- 금지 결과: `관련 근거를 찾았습니다` 같은 메타 문장만 반환하거나, 개수와 무관한 청크를 그대로 노출하는 것
|
||||
|
||||
2. `그럼 컴퍼니엑스 내부 규정 상 휴가는 얼마나 쓸 수 있어?`
|
||||
- 기대 결과: 휴가 규정 문서가 없거나 확인되지 않으면 `내부 문서 기준으로는 확인되지 않는다`고 답해야 합니다.
|
||||
- 금지 결과: 휴가와 무관한 사업계획서 청크를 근거처럼 붙이는 것
|
||||
|
||||
3. `오늘전통 프로그램을 Company X가 옐로펀치랑 같이 운영한다는 근거 있어?`
|
||||
- 기대 결과: 직접 답 + 근거 문서명 + 짧은 근거 요약이 함께 나와야 합니다.
|
||||
- 의미: 이 질문은 이미 일부 성공한 기준 질문으로, 회귀 여부를 함께 봐야 합니다.
|
||||
|
||||
## 원인 가설
|
||||
1. retrieval 결과를 질문 적합도 기준으로 재정렬/필터링하지 않습니다.
|
||||
2. 수치형 질문과 사실 확인형 질문을 분리하지 않고 같은 응답 포맷으로 처리합니다.
|
||||
3. `직접 답 생성` 전에 `근거 청크 선별`이 충분히 정교하지 않습니다.
|
||||
4. 적절한 근거가 없을 때 `모른다/문서 미확인`로 빠지는 실패 경로가 약합니다.
|
||||
|
||||
## 범위 밖으로 고정하는 것
|
||||
- Company X 전체 문서셋 확대 자체를 이번 회귀의 직접 원인으로 단정하지 않습니다.
|
||||
- `skill-rag-file` 검색 API 자체가 항상 실패한다고 보지 않습니다.
|
||||
- `rb8001` 메모리 컬렉션의 `768/384` 차원 드리프트는 별도 이슈이며, 이번 회귀의 직접 원인으로 섞지 않습니다.
|
||||
|
||||
## 필요한 조치
|
||||
1. 질문 유형별 응답 규칙 분기
|
||||
- 수치 확인형
|
||||
@ -50,5 +75,10 @@ tags: [robeing, companyx, rag, troubleshooting, answer-quality]
|
||||
4. Slack 실응답 기준으로 시나리오 질문셋 재검증
|
||||
5. 근거 부족 시 메타 대화가 아니라 `문서 없음 또는 미확인`으로 답하는 실패 경로 고정
|
||||
|
||||
## 닫힘 판정 기준
|
||||
- 위 재현 질문셋에서 `직접 답 없음`, `무관한 청크 노출`, `메타 대화로 회피`가 더 이상 재현되지 않아야 합니다.
|
||||
- 성공 질문은 계속 성공해야 하고, 근거 부족 질문은 억지 답변 대신 명시적 부족 안내로 고정돼야 합니다.
|
||||
- 이 문서와 시나리오 문서를 함께 만족시키는 단일 research 문서가 후속으로 작성돼야 합니다.
|
||||
|
||||
## 상태
|
||||
- 열림
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user