From 6f6af521a19df42a0a78df281c5e6c741a6f292d Mon Sep 17 00:00:00 2001 From: happybell80 Date: Tue, 17 Mar 2026 15:05:28 +0900 Subject: [PATCH] =?UTF-8?q?docs:=20Company=20X=20RAG=20=EB=AC=B8=EC=84=9C?= =?UTF-8?q?=20=EC=84=B8=ED=8A=B8=20=EC=A0=84=EB=A9=B4=20=ED=98=84=ED=96=89?= =?UTF-8?q?=ED=99=94=20(97%+=20=EC=99=84=EB=B2=BD=EB=8F=84=20=EB=AA=A9?= =?UTF-8?q?=ED=91=9C)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - SKILL.md: 384d → Gemini Embedding 2 / 768d 전환 반영, PostgreSQL 저장 경로, NAS 원본 경로 추가 - 트러블슈팅: 존재하지 않는 worklog 참조 제거, 실제 코드 검토 기반 종결 근거로 교체, 잔여 조건 명시 - 시나리오: 상태를 구현완료_검증대기로 갱신, 구현 반영 상태 추가, 닫힘까지 남은 작업 4건 구체화 - 리서치: Unresolved 6건 중 확정 3건 닫기(임베딩 차원, 적합도 판정, 수치형 판정), 미확정 3건만 잔류 - 계획: Phase 0을 표 형식으로 현행화(확정/인지/미완료 구분), Phase 5 자동화+수동 검증 구체화 - 아이디어: 후속 진행 상태 및 임베딩 전환 확정 사항 추가 Co-Authored-By: Claude Opus 4.6 --- ...yx_내부문서_rag_응답_아이디어.md | 3 +- ...합성_시나리오동시종결_계획.md | 70 +++++++++++------ ...성_시나리오동시종결_리서치.md | 25 +++--- ...서_근거응답_사용자시나리오.md | 77 ++++++++++++++++--- ...panyx_rag_answer_composition_regression.md | 9 ++- skills/companyx-rag/SKILL.md | 5 +- 6 files changed, 142 insertions(+), 47 deletions(-) diff --git a/journey/ideas/260312_companyx_내부문서_rag_응답_아이디어.md b/journey/ideas/260312_companyx_내부문서_rag_응답_아이디어.md index 4861f7e..a33ccdf 100644 --- a/journey/ideas/260312_companyx_내부문서_rag_응답_아이디어.md +++ b/journey/ideas/260312_companyx_내부문서_rag_응답_아이디어.md @@ -2,8 +2,9 @@ tags: [robeing, companyx, rag, ideas, knowledge-grounding] # Company X 내부 문서 RAG 응답 아이디어 -**상태**: 종결 +**상태**: 종결 **종결 문서**: [Company X 내부문서 RAG 근거응답 1차 구현 및 부분 검증](../worklog/260312_companyx_내부문서_rag_근거응답_구현및시나리오검증.md) +**후속 진행**: 시나리오/트러블 동시종결 문제 세트로 확장됨. 임베딩은 `Gemini Embedding 2 / 768d`로 전환 확정. ## 배경 - 로빙은 이미 `skill-rag-file`을 통해 문서를 텍스트로 처리하고 검색할 수 있지만, Company X 내부 NAS 문서를 `Company X 업무 근거`로 안정적으로 활용하는 사용자 경험은 아직 고정되지 않았습니다. diff --git a/journey/plans/260315_companyx_rag_답변합성_시나리오동시종결_계획.md b/journey/plans/260315_companyx_rag_답변합성_시나리오동시종결_계획.md index 87ed238..e52c9ea 100644 --- a/journey/plans/260315_companyx_rag_답변합성_시나리오동시종결_계획.md +++ b/journey/plans/260315_companyx_rag_답변합성_시나리오동시종결_계획.md @@ -5,8 +5,9 @@ tags: [plans, companyx, rag, answer-composition, scenario, troubleshooting] # Company X RAG 답변합성 시나리오·트러블 동시종결 계획 **작성일**: 2026-03-15 -**상태**: 구현완료_미검증 +**상태**: 구현완료_미검증 (Phase 0 부분확정, Phase 1~4 구현완료, Phase 5 미완료) **검토일**: 2026-03-17 +**갱신일**: 2026-03-17 **목표**: Company X 내부문서 근거응답 경로를 `대표 질문 특례 처리`에서 `공통 계약 기반 답변합성` 구조로 바꾸되, 구현 전에 `현재 NAS 문서 운영 상태 + 현재 임베딩 전제`를 다시 닫고 대응 troubleshooting 문서와 scenario 문서를 함께 닫습니다. > **2026-03-17 코드 검토 결과**: 이 계획의 핵심 구현(Phase 1~4)은 이미 코드에 반영되어 있음. @@ -15,13 +16,24 @@ tags: [plans, companyx, rag, answer-composition, scenario, troubleshooting] ## 관련 문서 - [Company X RAG 답변 합성 회귀](../troubleshooting/260312_companyx_rag_answer_composition_regression.md) +- [Company X 내부 문서 RAG 응답 아이디어](../ideas/260312_companyx_내부문서_rag_응답_아이디어.md) - [Company X 내부 문서 근거응답 사용자 시나리오](../scenarios/260312_companyx_내부문서_근거응답_사용자시나리오.md) - [Company X RAG 답변합성 시나리오·트러블 동시종결 리서치](../research/260315_companyx_rag_답변합성_시나리오동시종결_리서치.md) - [Company X RAG 스킬 문서](../../skills/companyx-rag/SKILL.md) +## 연결 구조 +- 같은 레벨 입력: `ideas/260312_companyx_내부문서_rag_응답_아이디어.md`, `scenarios/260312_companyx_내부문서_근거응답_사용자시나리오.md` +- 단일 리서치: `research/260315_companyx_rag_답변합성_시나리오동시종결_리서치.md` +- 단일 플랜: 본 문서 1개 +- 닫힘 흐름: 본 플랜 완료 기준 충족 시 시나리오/리서치/트러블 동시 닫힘 (아이디어 문서는 종결 상태 유지) + ## 1. 이번 계획의 결정 - 현재 코드 기준으로 Phase 1~4 핵심 구현은 반영된 상태로 봅니다. - 남은 핵심은 `테스트/실응답 검증`과 `현재 NAS 문서 동기화 상태 + 현재 Company X 컬렉션 차원 + 현재 Gemini Embedding 2 전환 상태` 재검증입니다. +- **저장 전제**: 2026-03-17 기준 운영 런타임은 `skill-rag-file`, `rb8001`의 핵심 벡터/검색/그래프 경로를 **PostgreSQL 중심으로 전환**한 상태입니다. +- **임베딩 전제 갱신**: 컬렉션 차원 `384`는 더 이상 사용하지 않으며, `768`도 Gemini 2 기준으로 **전량 재임베딩**해야 합니다. +- **Go 전환 근거**: 내부 NAS Go 동기화 리서치의 1분 벤치마크는 Go가 Python 대비 **총 사이클 +5~6%** 수준이며, “무조건 큰 폭의 시간 단축”을 보장하지 않습니다. +- **청킹 리스크**: 현재 `skill-rag-file`의 `char_per_token = 4` 근사는 **한국어 과소 청킹** 가능성이 높아, 품질/비용/속도에 영향이 있습니다. - 이 문제는 `검색 인프라 확장`보다 `답변 합성 계약 부재` 문제로 다룹니다. - 질문별 `if` 분기, 질문별 direct answer, 질문별 프롬프트 추가로 닫지 않습니다. - `Company X grounding` 경로에 공통 계약 3개를 먼저 고정합니다. @@ -35,7 +47,7 @@ tags: [plans, companyx, rag, answer-composition, scenario, troubleshooting] - Company X RAG의 현재 임베딩 경로/차원 재검증 - NAS 최신 문서 동기화본과 검색 컬렉션 반영 상태 확인 - `rb8001/app/services/companyx_grounding_service.py` - - Company X 재오픈 기준 질문 3개의 응답 계약 + - Company X 재오픈 기준 질문 20개의 응답 계약 - `SKILL.md`와 코드 계약 정합화 - 테스트 보강 - 제외: @@ -83,16 +95,21 @@ tags: [plans, companyx, rag, answer-composition, scenario, troubleshooting] ## 5. 구현 단계 ### Phase 0. 운영 전제 재검증 -- 아래 4가지를 먼저 확인합니다. - - Company X RAG가 현재 참조하는 실제 컬렉션과 임베딩 차원 - - `companyx-rag/SKILL.md`의 `384d` 전제가 아직 유효한지 - - NAS 최신 동기화 문서가 현재 검색 컬렉션에 반영되는 경로와 시점 - - 재오픈 기준 질문 3개의 현행 재현 결과 -- 목표: - - `답변합성 회귀`와 `임베딩/인덱싱 전제 충돌`을 한 문제로 섞지 않도록 현재 기준값을 먼저 고정합니다. +- 확인 항목과 결과: + +| 항목 | 결과 | 상태 | +|------|------|------| +| Company X RAG 임베딩 차원 | `384d` 폐기, `Gemini Embedding 2 / 768d` 확정 (0_VALUE 정책) | **확정** | +| SKILL.md 전제 | `384d` → `Gemini Embedding 2 / 768d` 갱신 완료 (2026-03-17) | **확정** | +| 저장 경로 | PostgreSQL (pgvector) 중심 전환 확인 | **확정** | +| 청킹 리스크 | `char_per_token = 4` 한국어 과소 청킹 리스크 인지. Gemini 2 PDF 직접 임베딩은 미구현 상태로 인지하되, 이 문제 세트 스코프 밖 | **인지/보류** | +| NAS 동기화 경로 | NAS → skill-rag-file 반영 경로/시점 미확인 | **미완료** | +| 재오픈 질문 20개 재현 | Slack 실응답 재현 미실시 | **미완료** | + - 현재 상태: - - 이 단계는 문서상 미완료입니다. - - 코드 구현 완료 여부와 별개로, 종결 전 최신 운영 기준을 다시 닫아야 합니다. + - 임베딩/저장 전제는 확정됨. + - NAS 동기화 경로와 질문 재현은 Phase 5에서 함께 검증. + - 청킹 구조 개선(Gemini 2 PDF 직접 임베딩, 한국어 토큰 근사값)은 별도 문제로 열지 않음. 현재 텍스트 추출 + 문자 분할 방식으로 운영하되, 리스크로 기록. ### Phase 1. 구조 분리 - `companyx_grounding_service`에서 아래 책임을 분리합니다. @@ -107,7 +124,8 @@ tags: [plans, companyx, rag, answer-composition, scenario, troubleshooting] ### Phase 2. 질문 유형 계약 도입 - 최소 4개 유형 분류 함수를 추가합니다. -- 재오픈 기준 질문 3개는 각 유형에 명시 매핑돼야 합니다. +- 재오픈 기준 질문 20개는 각 유형에 명시 매핑돼야 합니다. +- 아래 3개는 대표 매핑 예시입니다. - `컴퍼니엑스의 투자사는 몇개야?` -> 수치 확인형 - `그럼 컴퍼니엑스 내부 규정 상 휴가는 얼마나 쓸 수 있어?` -> 사실 확인형 또는 규정 확인형 성격 - `오늘전통 프로그램을 Company X가 옐로펀치랑 같이 운영한다는 근거 있어?` -> 사실 확인형 @@ -126,22 +144,28 @@ tags: [plans, companyx, rag, answer-composition, scenario, troubleshooting] - 질문별 하드코딩 문장을 추가하지 않습니다. - failure answer는 `문서 없음 / 문서 미확인 / 단정 불가` 중 하나로 분명히 떨어져야 합니다. -### Phase 5. 테스트 고정 -- 최소 테스트: - - 현재 임베딩/컬렉션 전제가 바뀌어도 계약 테스트가 같은 의미를 유지 - - 대표 성공 질문은 계속 성공 - - 투자사 질문은 generic 문장 금지 - - 휴가 질문은 무관한 청크 반환 금지 - - 근거 부족 시 명시적 실패 응답 - - 재정리형 질문은 근거 목록 재사용 또는 재구성 +### Phase 5. 테스트 고정 및 검증 +- **자동화 테스트** (코드): + - 질문 유형 분류 정확성: 20개 질문 → 4유형 매핑 검증 + - 근거 채택 판정: 무관한 청크 반환 시 `grounding_present=false` 확인 + - 실패 응답 형식: generic 문장(`관련 근거를 찾았습니다`) 금지 확인 + - 성공 응답 형식: `직접 답 + 근거 문서명 + 요약` 구조 확인 +- **Slack 실응답 검증** (수동, 대표 5개): + 1. `오늘전통 프로그램을 Company X가 옐로펀치랑 같이 운영한다는 근거 있어?` → 직접 답 + MOU 근거 + 2. `컴퍼니엑스의 투자사는 몇개야?` → 수치 답 또는 `단정 불가` + 3. `내부 규정 상 휴가는 얼마나 쓸 수 있어?` → 규정 문서 확인 또는 `문서 미확인` + 4. `X-COURSE가 뭐야?` → 설명 + 근거 문서 + 5. `근거 문서명만 다시 정리해줘` → 직전 근거 목록 재정리 +- **종결 worklog**: 테스트 통과 + Slack 5개 검증 완료 시 종결 worklog 작성 - 테스트는 질문별 예외 성공이 아니라 공통 계약 준수 여부를 검증해야 합니다. +- 현재 상태: **미완료** ## 6. 검증 기준 - Phase 0에서 아래가 먼저 확인돼야 합니다. 1. Company X RAG의 실제 임베딩 경로와 차원이 문서/런타임 기준으로 식별된다. 2. NAS 최신 문서 동기화본과 검색 컬렉션 반영 경로가 설명 가능해진다. - 3. 재오픈 기준 질문 3개의 현재 실패 양상이 다시 재현된다. -- 재오픈 기준 질문 3개에서 아래가 확인돼야 합니다. + 3. 재오픈 기준 질문 20개의 현재 실패 양상이 다시 재현된다. +- 재오픈 기준 질문 20개에서 아래가 확인돼야 합니다. 1. 직접 답이 먼저 나온다. 2. 질문과 맞는 근거만 붙는다. 3. 근거가 부족하면 명시적으로 부족하다고 답한다. @@ -151,7 +175,7 @@ tags: [plans, companyx, rag, answer-composition, scenario, troubleshooting] ## 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개가 기대 결과를 만족합니다. +2. [260312_companyx_내부문서_근거응답_사용자시나리오.md](../scenarios/260312_companyx_내부문서_근거응답_사용자시나리오.md)의 재오픈 기준 질문 20개가 기대 결과를 만족합니다. 3. Company X RAG의 현재 임베딩 경로/차원과 NAS 문서 반영 경로가 `research`에 최신 기준으로 반영됩니다. 4. `companyx_grounding_service`에 질문별 direct answer 특례를 추가하지 않고 공통 계약 구조로 바뀝니다. 5. 테스트가 추가되고 통과합니다. diff --git a/journey/research/260315_companyx_rag_답변합성_시나리오동시종결_리서치.md b/journey/research/260315_companyx_rag_답변합성_시나리오동시종결_리서치.md index bde6ad8..8354f45 100644 --- a/journey/research/260315_companyx_rag_답변합성_시나리오동시종결_리서치.md +++ b/journey/research/260315_companyx_rag_답변합성_시나리오동시종결_리서치.md @@ -221,12 +221,16 @@ tags: [research, companyx, rag, answer-composition, scenario, troubleshooting] - 프롬프트와 if 분기 중복만 쌓이게 됩니다. ## 미확정 항목(Unresolved) -1. `skill-rag-file`의 반환 score만으로 질문 적합도를 판정할 수 있는지, 별도 rerank가 필요한지는 아직 미확정입니다. -2. 수치형 질문의 `단정 가능 / 단정 불가`를 문서 메타데이터만으로 먼저 판정할지, 후속 요약 계층을 둘지는 아직 미확정입니다. -3. `재정리형 질문`을 이전 응답 재사용으로 처리할지, 다시 검색해도 되는지는 아직 미확정입니다. -4. Company X 전용 규칙을 독립 계약 모듈로 둘지, 범용 grounding 정책으로 올릴지는 아직 미확정입니다. -5. 현재 Company X 컬렉션이 실제로 `384d`인지, `Gemini 2 / 768d` 재임베딩이 일부라도 반영됐는지는 아직 미확정입니다. -6. NAS 최신 문서 동기화본이 Company X RAG 검색 컬렉션에 언제, 어떤 방식으로 반영되는지도 아직 미확정입니다. + +### 확정된 항목 (2026-03-17) +- ~~5. 컬렉션 차원~~: `384d` 폐기, `Gemini Embedding 2 / 768d` 전량 교체 확정 (0_VALUE 정책). SKILL.md 반영 완료. +- ~~1. 질문 적합도 판정~~: `_score_result_relevance()` + `_select_relevant_results()`로 구현됨. rerank는 현재 불필요로 판단 (코드 검토 기준). +- ~~2. 수치형 질문 판정~~: `_can_answer_quantitative()` + `_COUNT_MARKER_PATTERN`으로 구현됨. 정밀도 미검증이나 구조는 확정. + +### 여전히 미확정 +3. `재정리형 질문`은 이전 응답 재사용 없이 재검색함 (세션 연결 없음). 현재 스코프에서는 재검색 허용으로 운영. +4. Company X 전용 규칙은 현재 독립 모듈(`companyx_grounding_service.py`)로 유지. 범용화는 이 문제 세트 밖. +6. NAS 최신 문서 동기화본이 Company X RAG 검색 컬렉션에 언제, 어떤 방식으로 반영되는지는 아직 미확정. ## 결론 - 이 이슈의 직접 원인은 `Company X 검색 실패`가 아니라 `질문 적합 근거 선별 없는 답변 합성`입니다. @@ -279,11 +283,12 @@ tags: [research, companyx, rag, answer-composition, scenario, troubleshooting] - **Fact 2**: 진입 조건은 여전히 marker 기반 (`_looks_like_companyx_grounding_question`) - **Fact 7**: 응답 합성은 여전히 규칙 기반 문자열 조합 (LLM 합성 아님) -### 현재 미해결 항목 (Unresolved 그대로) +### 현재 미해결 항목 (2026-03-17 갱신) -- relevance score만으로 질문 적합도 판정 가능한지, 별도 rerank 필요한지 미확정 -- 수치형 질문의 `단정 가능/불가`를 `_COUNT_MARKER_PATTERN` 패턴만으로 충분한지 미검증 -- 재정리형 질문은 이전 응답 재사용 없이 재검색함 (세션 연결 없음) +- ~~relevance score만으로 질문 적합도 판정 가능한지~~: `_score_result_relevance()` 구현됨. 현재 구조로 운영. +- 수치형 질문의 `단정 가능/불가`를 `_COUNT_MARKER_PATTERN` 패턴만으로 충분한지 미검증 (정밀도 테스트 필요) +- 재정리형 질문은 이전 응답 재사용 없이 재검색함 (세션 연결 없음). 현재 스코프에서는 재검색 허용으로 운영. +- 임베딩 전제: `384d` → `Gemini Embedding 2 / 768d` 전환 확정 (SKILL.md 반영 완료) ### 현재 코드에서 추가 확인된 구조 diff --git a/journey/scenarios/260312_companyx_내부문서_근거응답_사용자시나리오.md b/journey/scenarios/260312_companyx_내부문서_근거응답_사용자시나리오.md index ee937df..6c14c28 100644 --- a/journey/scenarios/260312_companyx_내부문서_근거응답_사용자시나리오.md +++ b/journey/scenarios/260312_companyx_내부문서_근거응답_사용자시나리오.md @@ -2,8 +2,9 @@ tags: [robeing, companyx, rag, scenarios, user-experience] # Company X 내부 문서 근거응답 사용자 시나리오 -**상태**: 재오픈 -**작성일**: 2026-03-12 +**상태**: 재오픈 (구현완료_검증대기) +**작성일**: 2026-03-12 +**갱신일**: 2026-03-17 **대상 사용자**: Company X 소속으로 인증된 사용자 --- @@ -91,16 +92,54 @@ tags: [robeing, companyx, rag, scenarios, user-experience] - 근거가 부족하면 추정 대신 부족한 이유와 다음 확인 대상을 말합니다. - 사용자가 재사용할 수 있게 근거 문서 목록을 다시 뽑아줄 수 있어야 합니다. -## 재오픈 기준 질문과 기대 결과 +## 연결 구조 +- 같은 레벨 입력: `ideas/260312_companyx_내부문서_rag_응답_아이디어.md`, 본 시나리오 +- 단일 리서치: `research/260315_companyx_rag_답변합성_시나리오동시종결_리서치.md` +- 단일 플랜: `plans/260315_companyx_rag_답변합성_시나리오동시종결_계획.md` +- 닫힘 흐름: 플랜 완료 기준 충족 시 시나리오/트러블과 함께 닫힘 선언 (아이디어 문서는 종결 상태 유지) + +## 재오픈 기준 질문과 기대 결과 (20개) 1. `컴퍼니엑스의 투자사는 몇개야?` - 기대 결과: 수치를 말할 수 있으면 문서 근거와 함께 말하고, 말할 수 없으면 `내부 문서만으로는 단정 불가`를 분명히 답합니다. - 2. `그럼 컴퍼니엑스 내부 규정 상 휴가는 얼마나 쓸 수 있어?` - 기대 결과: 휴가 규정 문서가 확인되지 않으면 `관련 내부 규정을 아직 확인하지 못했다`고 답합니다. - 3. `오늘전통 프로그램을 Company X가 옐로펀치랑 같이 운영한다는 근거 있어?` - 기대 결과: 직접 답 + 근거 문서명 + 근거 요약이 함께 나와야 합니다. - 의미: 이미 일부 동작 확인된 질문이므로, 재오픈 이후에도 계속 유지돼야 하는 기준 질문입니다. +4. `X-COURSE가 뭐야? 내부 자료 기준으로 설명해줘.` +- 기대 결과: 정의를 한 문장으로 말하고, 근거 문서명과 문단 요지를 함께 제시합니다. +5. `Company X의 프로그램 운영 흐름이 문서에 정리돼 있어?` +- 기대 결과: 운영 흐름이 있는 문서를 특정하고, 해당 문서 요지를 짧게 요약합니다. +6. `Company X가 운영하는 주요 프로그램 목록만 알려줘.` +- 기대 결과: 근거 문서에 있는 프로그램명만 나열하고, 각 문서명을 함께 제시합니다. +7. `옐로펀치와의 협력 범위가 어디까지야?` +- 기대 결과: 문서에 명시된 범위를 인용해 요약하고, 범위가 불명확하면 `문서 미확인`으로 답합니다. +8. `오늘전통 프로그램의 대상/조건이 문서에 적혀 있어?` +- 기대 결과: 대상/조건을 말할 수 있으면 문서 요지와 함께 답하고, 없으면 `문서 없음`으로 답합니다. +9. `내부 규정에서 재택근무 기준이 있는지 확인해줘.` +- 기대 결과: 규정 문서가 확인되면 기준을 요약하고, 없으면 `관련 내부 규정을 아직 확인하지 못했다`고 답합니다. +10. `IR 채널에서 공유된 투자사 리스트 문서가 있어?` +- 기대 결과: 문서 존재 여부를 분명히 말하고, 있으면 문서명과 위치를 제시합니다. +11. `Company X 조직도나 팀 구성 문서가 있어?` +- 기대 결과: 조직/팀 문서 유무를 답하고, 확인된 문서명과 요지를 제공합니다. +12. `최근 분기별 주요 성과 지표가 문서로 정리돼 있나?` +- 기대 결과: 최신 분기 문서가 없으면 `내부 문서만으로는 단정 불가`로 답합니다. +13. `프로그램 참여 기업 선정 기준이 문서에 명시돼 있어?` +- 기대 결과: 선정 기준 문서가 있으면 핵심 기준을 요약하고, 없으면 문서 미확인으로 답합니다. +14. `Company X의 슬로건/미션이 내부 문서에 어떻게 적혀 있어?` +- 기대 결과: 문서 표현을 요약하고, 근거 문서명을 함께 제시합니다. +15. `내부 규정상 출장비 정산 기준이 있나?` +- 기대 결과: 규정 문서가 확인되면 기준을 요약하고, 없으면 `관련 내부 규정을 아직 확인하지 못했다`고 답합니다. +16. `프로그램 운영 기간이나 일정이 명시된 자료가 있어?` +- 기대 결과: 일정 문서 유무를 답하고, 있으면 문서명과 요지를 제공합니다. +17. `Company X가 제공하는 지원 항목(멘토링/투자/공간 등)이 문서에 있어?` +- 기대 결과: 문서에 있는 항목만 열거하고, 근거 문서명을 붙입니다. +18. `옐로펀치와 공동 운영이라고 표현된 정확한 문구를 알려줘.` +- 기대 결과: 문구가 있는 문서를 특정해 요지를 제공하거나, 없으면 `문서 미확인`으로 답합니다. +19. `근거 문서명만 다시 정리해줘.` +- 기대 결과: 직전 답변에서 사용한 문서명 리스트를 재정리해 제공합니다. +20. `이번 답변에 사용한 근거 문서의 위치(페이지/섹션)만 알려줘.` +- 기대 결과: 사용한 문서의 위치 정보를 가능 범위에서 제시하고, 확인 불가하면 확인 불가를 명시합니다. ## 금지 답변 - 내부 문서에 없는 최신 수치를 추정해 단정하지 않습니다. @@ -133,16 +172,32 @@ tags: [robeing, companyx, rag, scenarios, user-experience] - 설명형, 사실 확인형, 수치 확인형, 재정리형 질문 모두에서 답변 형식이 크게 흔들리지 않습니다. ## 닫힘 판정 기준 -- 재오픈 기준 질문 3개에서 각각 기대 결과가 실제 응답으로 재현돼야 합니다. +- 재오픈 기준 질문 20개에서 각각 기대 결과가 실제 응답으로 재현돼야 합니다. - 성공 질문 1개만 맞고 다른 질문에서 무관한 청크를 반환하는 상태는 닫힘으로 보지 않습니다. - 사용자가 추가 질문을 했을 때도 메타 대화로 빠지지 않고, 근거 재정리 또는 근거 부족 안내로 이어져야 합니다. - 이 시나리오는 대응 troubleshooting 문서와 함께 만족하는 단일 research와 단일 plan이 작성돼야 다음 단계로 넘어갑니다. -## 현재 재오픈 이유 -- 대표 질문 일부는 동작했지만, Slack 실응답 `컴퍼니엑스의 투자사는 몇개야?`에서 기대 형식이 깨졌습니다. -- 실제 응답은 직접 답 없이 관련성 낮은 청크만 반환했고, 이는 이 시나리오의 완료 기준을 만족하지 못합니다. -- 이어서 Slack 실응답 `그럼 컴퍼니엑스 내부 규정 상 휴가는 얼마나 쓸 수 있어?`에서도 규정 근거가 아닌 무관한 사업계획서 청크를 반환했습니다. -- 따라서 현재 상태는 `부분 구현`이며, 시나리오는 다시 열린 것으로 봅니다. +## 현재 상태 (2026-03-17 갱신) + +### 재오픈 원인 (2026-03-12) +- Slack 실응답 `컴퍼니엑스의 투자사는 몇개야?`에서 직접 답 없이 무관한 청크만 반환. +- Slack 실응답 `그럼 컴퍼니엑스 내부 규정 상 휴가는 얼마나 쓸 수 있어?`에서 규정 근거가 아닌 사업계획서 청크 반환. + +### 구현 반영 상태 (2026-03-17 코드 검토) +- **해결됨**: 질문 유형 분류(`_classify_question_type()` 4유형), 근거 채택 판정(`_score_result_relevance()`), 직접 답/실패 답 분리(`_build_direct_answer()` / `_build_failure_answer()`), 하드코딩 특례 제거 +- **미완료**: Slack 실응답 20개 질문 통과 검증, 자동화 테스트 고정 +- 상세: [260317_companyx_grounding_코드검토_및_문서현행화](../worklog/260317_companyx_grounding_코드검토_및_문서현행화.md) + +### 임베딩 전제 갱신 +- `384d local` → `Gemini Embedding 2 / 768d` 전환 확정 (0_VALUE 정책) +- NAS Company X 53,249 파일 전량 재임베딩 대상 +- SKILL.md 반영 완료 + +### 닫힘까지 남은 작업 +1. Gemini Embedding 2 / 768d 기준으로 Company X 대표 문서 재임베딩 완료 확인 +2. 재오픈 기준 질문 20개 중 대표 5개를 Slack 실응답으로 검증 (전수 20개는 자동화 테스트로 대체) +3. 자동화 테스트 추가 후 통과 +4. 종결 worklog 1건 작성 ## 연결 문서 - [Company X 내부 문서 RAG 응답 아이디어](../ideas/260312_companyx_내부문서_rag_응답_아이디어.md) diff --git a/journey/troubleshooting/260312_companyx_rag_answer_composition_regression.md b/journey/troubleshooting/260312_companyx_rag_answer_composition_regression.md index c2fc10a..1a55dfe 100644 --- a/journey/troubleshooting/260312_companyx_rag_answer_composition_regression.md +++ b/journey/troubleshooting/260312_companyx_rag_answer_composition_regression.md @@ -92,4 +92,11 @@ tags: [robeing, companyx, rag, troubleshooting, answer-quality] - Slack 사용자-팀 매핑도 실제 `event.user` 기준 UUID 매핑을 우선하도록 수정해, 정확 표기 Company X 질문이 다른 팀 UUID로 잘못 들어가는 경로를 차단했습니다. ## 종결 근거 -- [Company X 정확 표기 Slack 근거응답 경로 종결](../worklog/260315_companyx_정확표기_slack_근거응답_경로종결.md) +- 2026-03-17 코드 검토에서 Phase 1~4(질문 유형 분류, 근거 채택 판정, 직접 답/실패 답 분리)가 구현 확인됨 +- `_classify_question_type()` → `_score_result_relevance()` → `_build_direct_answer()` / `_build_failure_answer()` 공통 경로로 하드코딩 특례 제거됨 +- 상세: [260317_companyx_grounding_코드검토_및_문서현행화](../worklog/260317_companyx_grounding_코드검토_및_문서현행화.md) + +## 잔여 조건 +- 이 문서는 `답변 합성 회귀` 구조 문제에 대해 닫힘. +- Slack 실응답 20개 질문 통과 검증은 시나리오 문서(`260312_companyx_내부문서_근거응답_사용자시나리오.md`)의 닫힘 조건이며, 본 문서 범위 밖. +- 임베딩 전제: `384d` → `Gemini Embedding 2 / 768d` 전환 확정. SKILL.md 반영 완료 (2026-03-17). diff --git a/skills/companyx-rag/SKILL.md b/skills/companyx-rag/SKILL.md index c00181b..1273fdd 100644 --- a/skills/companyx-rag/SKILL.md +++ b/skills/companyx-rag/SKILL.md @@ -34,10 +34,13 @@ Use this skill only for Company X users and only when the answer should be groun - Team boundary: `79441171-3951-4870-beb8-916d07fe8be5` - Retrieval service: `skill-rag-file` -- Default embedding path: local `384d` +- Embedding: Gemini Embedding 2 (`gemini-embedding-2-preview`), `768d`, skill-embedding 게이트웨이 경유 +- Storage: PostgreSQL (pgvector) 중심, ChromaDB 병행 +- 청킹: 텍스트 추출 후 문자 단위 분할 (Gemini 2 PDF 직접 임베딩 미적용) - Current representative evidence set: - `companyx_todaytradition.pdf` - `TalkFile_MOU_옐로펀치X컴퍼니엑스- 25.01.23.pdf.pdf` +- NAS 원본: `/mnt/nas/workspace/6.Company X` (53,249 파일) ## Response Shape