71일차 신뢰도 기준 충족 추가 (2단계 6절, Lab 02 과제 마무리, RAG-EVAL 3-1절)
This commit is contained in:
1 parent
3ff10aadcf
commit
4ef0464525
5 files changed
+58
-1
No files matched your search
@@ -60,3 +60,16 @@ cases/lab02-challenge.json, cases/lab02.json 둘 다 통과.
|
||||
- 지시문에 정확한 문장("규정에서 답을 찾지 못했습니다.")을 주어도 LLM은 "포함되어 있지 않습니다"처럼 **다르게** 말했다 → 문장 하나만 찾는 검사는 새고, 모양 여러 개를 찾아야 했다.
|
||||
- 틀린 전제("30일마다 바꾸면 되죠?")는 발췌로만 답하게 하자 예제 상태에서도 90일로 바로잡았다. 검사는 그 답을 막지 않는다 (숫자 90이 발췌에 있음).
|
||||
- 검색 점수(앞)와 답 검사(뒤)는 **다른 실패**를 잡는다: 점수는 "엉뚱한 질문", 답 검사는 "비슷하지만 답이 없는 질문".
|
||||
|
||||
### 마무리 · 신뢰도 기준 충족 (`RAG-EVAL.md` 3-1절 답)
|
||||
|
||||
수업 준비 때 보고서(`answers/08-lab02-challenge.json` `--repeat 3`, `answers/09-lab02-after-challenge.json`, 2026-10-22)에서 센 값입니다. `lab02-challenge`는 세 번 모두 같은 갈래로 갔습니다 (24건 = 8 × 3: 자동 답변 9 · 관련도 기준 3 · 답 검사 12).
|
||||
|
||||
| 테스트 파일 | 질문 수 | 기준 충족 (자동 답변) | 미달 · 관련도 기준 | 미달 · 답 검사 | 충족률 |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| `cases/lab02.json` (빈 질문 400 빼고) | 5 | 4 | 1 (점심 메뉴 0.202) | 0 | 4/5 |
|
||||
| `cases/lab02-challenge.json` (한 번) | 8 | 3 | 1 (연차 0.259) | 4 (VPN 속도 · 노트북 사양 · 비밀번호 찾기 · 보안 교육 횟수) | 3/8 |
|
||||
| 합계 | 13 | 7 | 2 | 4 | 7/13 |
|
||||
|
||||
- 풀이 포인트: `lab02-challenge`의 충족률 3/8은 **낮아서 좋은 결과**입니다. 이 파일은 일부러 "점수는 높은데 답이 없는" 질문을 모은 것이라, 넘어간 4건이 모두 맞게 넘어간 것입니다. 충족률은 질문 묶음의 성격과 함께 읽습니다.
|
||||
- 답 검사에서 넘어간 4건이 곧 "규정을 보완할 곳"입니다 (강의 6절 표의 담당자 연결 (검사)).
|
||||
@@ -242,6 +242,24 @@ uv run tools/flow.py test cases/lab02-challenge.json -v --repeat 3
|
||||
uv run tools/flow.py test cases/lab02.json -v
|
||||
```
|
||||
|
||||
### 마무리 · 신뢰도 기준 충족을 세기 (5분)
|
||||
|
||||
과제까지 끝나면 Q&A에 **신뢰도 기준**이 두 겹으로 완성됩니다 ([2단계 강의](../../Lecture/71/02-STAGE2-RAG-ANSWER.md) 6절): 답을 만들기 **전**의 관련도 기준(`top_score` ≥ 0.33, 예제 2)과 답을 만든 **뒤**의 답 검사 넷(과제). 둘 다 통과한 답만 `자동 답변`으로 나갑니다.
|
||||
|
||||
방금 돌린 두 보고서(`runs/lab02-challenge-…json`의 첫 번째 실행 · `runs/lab02-…json`)에서 질문마다 어느 갈래로 갔는지 세어 `RAG-EVAL.md` 3-1절 표를 채웁니다.
|
||||
|
||||
| 갈래 | 보고서에서 알아보는 법 |
|
||||
| --- | --- |
|
||||
| 기준 충족 → 자동 답변 | `route` = `자동 답변` |
|
||||
| 기준 미달 · 관련도 기준 | `route` = `담당자 연결`, `failed` 없음 (`top_score` < 0.33, LLM을 부르지 않음) |
|
||||
| 기준 미달 · 답 검사 | `route` = `담당자 연결`, `failed`에 검사 이름 (`draft`에 원래 답) |
|
||||
| (세지 않음) | HTTP 400 (빈 질문 — 질문이 아님) |
|
||||
|
||||
<details><summary>▶ 충족률이 높을수록 좋은가</summary>
|
||||
|
||||
아닙니다. 기준을 느슨하게 하면 충족률은 올라가지만, 규정에 답이 없는 질문까지 `자동 답변`으로 나갑니다. 충족률은 **"규정이 답할 수 있는 질문 중 얼마나"**와 함께 봐야 합니다. 그래서 갈래를 나눠 셉니다: 관련도 기준에서 넘어간 것은 "규정 밖 질문", 답 검사에서 넘어간 것은 "규정이 모자란 곳"(규정을 보완할 후보)입니다.
|
||||
</details>
|
||||
|
||||
## 막혔을 때
|
||||
|
||||
| 증상 | 할 일 |
|
||||
@@ -256,3 +274,4 @@ uv run tools/flow.py test cases/lab02.json -v
|
||||
- [ ] 예제 1·2: `cases/lab02.json` 통과, 출처가 제목으로 나온다.
|
||||
- [ ] 과제: `cases/lab02-challenge.json` 3번 반복 통과, `lab02`도 통과.
|
||||
- [ ] `RAG-EVAL.md` 3절에 "기준값에 걸러지지 않았는데 답이 없는 질문"을 적었다.
|
||||
- [ ] `RAG-EVAL.md` 3-1절에 신뢰도 기준 충족 수와 기준 미달(관련도 기준 · 답 검사)을 나눠 적었다.
|
||||
@@ -175,7 +175,7 @@ export OPENAI_API_KEY=$(grep '^OPENAI_API_KEY=' ~/aio-01d4-stu/Last3Mon/.env | c
|
||||
|
||||
- [ ] 전날 71일차 데이터 API, `doctor` → `ready`
|
||||
- [ ] Lab 01: 정답표, `lab01`, `lab01-challenge`
|
||||
- [ ] Lab 02: `lab02`, `lab02-challenge`, `RAG-EVAL.md` 3절
|
||||
- [ ] Lab 02: `lab02`, `lab02-challenge`, `RAG-EVAL.md` 3절 · 3-1절(신뢰도 기준 충족)
|
||||
- [ ] Lab 03: doc@1 · answer@1 · answer@3, 200자 · 400자, 기준값, 개선 전·후, 보고서
|
||||
- [ ] `tdoc`: `SPEC.md` 먼저, R1~R5, `pytest`, 단계마다 commit
|
||||
- [ ] 72일차 준비
|
||||
@@ -24,6 +24,18 @@
|
||||
|
||||
- 관련도 기준 0.33에 걸러지지 않았는데 규정에 답이 없는 질문:
|
||||
|
||||
## 3-1. 신뢰도 기준 충족 (Lab 02 과제 뒤)
|
||||
|
||||
신뢰도 기준 = 관련도 기준(`top_score` ≥ 0.33, 답 만들기 전) + 답 검사 넷 모두 통과(답 만든 뒤). 빈 질문(400)은 세지 않습니다.
|
||||
|
||||
| 테스트 파일 | 질문 수 | 기준 충족 (자동 답변) | 미달 · 관련도 기준 | 미달 · 답 검사 | 충족률 |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| `cases/lab02.json` | | | | | |
|
||||
| `cases/lab02-challenge.json` (첫 실행) | | | | | |
|
||||
| 합계 | | | | | |
|
||||
|
||||
- 답 검사에서 넘어간 질문 (규정을 보완할 후보):
|
||||
|
||||
## 4. 한 가지씩 바꾸고 재기 (Lab 03)
|
||||
|
||||
| 설정 | 청크 수 | doc@1 | answer@1 | answer@3 |
|
||||
|
||||
@@ -280,6 +280,19 @@ flowchart LR
|
||||
- 두 담당자 연결의 **말이 다릅니다.** 담당자는 "규정에 아예 없는 질문"과 "규정이 모자란 질문"을 다르게 처리합니다. 뒤쪽이 쌓이면 **규정을 보완할 곳**입니다 (VPN 속도, 노트북 사양, 비밀번호 찾기, 보안 교육 횟수).
|
||||
- 69일차 검토자의 fail-closed와 같은 생각입니다: **확실하지 않으면 자동으로 내보내지 않습니다.**
|
||||
|
||||
**이 두 겹이 곧 "신뢰도 기준"입니다.** 평가 기준이나 요구서에 "RAG 검색 후 답변을 생성하고 검증해 **신뢰도 기준을 충족**하면 자동 답변, 아니면 이관"이라는 말이 나오면, 오늘 만든 것이 그 장치입니다. 신뢰도를 숫자 하나(예: LLM이 스스로 매긴 확신 점수)로 두지 않고, **확인할 수 있는 조건 두 겹**으로 나눴습니다.
|
||||
|
||||
| 신뢰도 기준 | 오늘의 장치 | 언제 보나 | 기준 |
|
||||
| --- | --- | --- | --- |
|
||||
| 근거가 있나 (검색 신뢰도) | 관련도 기준 | 답을 만들기 전 | `top_score` ≥ 0.33 (3절, 규정 질문 0.46~0.62 · 규정 밖 0.20~0.26 사이에서 재서 정함) |
|
||||
| 답이 근거를 따랐나 (답변 신뢰도) | 답 검사 넷 | 답을 만든 뒤 | `found_in_policies` · `cites_excerpt` · `grounded`(두 글자 묶음 30%) · `numbers_from_policies` **모두** 통과 (5절) |
|
||||
| 기준 충족 | 자동 답변 + 출처 | | 두 겹 모두 통과 |
|
||||
| 기준 미달 | 담당자 연결 | | 어느 하나라도 실패 → `top_score` 또는 `draft` · `failed`를 담당자에게 |
|
||||
|
||||
- LLM에게 "얼마나 확신하나"를 물어 점수로 쓰는 방법도 있지만, 그 점수도 LLM이 만든 글이라 흔들리고 근거를 보여 주지 못합니다. 오늘 기준은 **코드가 계산해 늘 같은 결과**이고, 미달이면 **어느 조건에서 떨어졌는지**(`top_score`, `failed`) 결과에 남습니다.
|
||||
- 기준값은 정해진 정답이 아니라 **재서 정하고 테스트로 고정**한 것입니다 (`cases/lab03-threshold.json`, `lab02-challenge`). 모델 · 청크 · 문서가 바뀌면 다시 잽니다.
|
||||
- 그래서 결과서에 "신뢰도 기준 충족률"을 쓸 때는 `자동 답변`으로 나간 비율, 그리고 기준 미달로 넘어간 건을 **관련도 기준 · 답 검사로 나눈 수**를 함께 적습니다.
|
||||
|
||||
### 6.1 앞 일차와의 연결
|
||||
|
||||
오늘 2단계는 새로 배우는 것이 아니라 **앞에서 한 세 가지를 RAG에 다시 쓰는 것**입니다.
|
||||
|
||||
Reference in new issue
Block a user