From 0e1ea74de6507b4141a43c728739ea82cb2e7848 Mon Sep 17 00:00:00 2001 From: happybell80 Date: Thu, 19 Mar 2026 22:13:03 +0900 Subject: [PATCH] =?UTF-8?q?docs:=20rb8001=20=EC=9D=91=EB=8B=B5=20=ED=92=88?= =?UTF-8?q?=EC=A7=88=20=ED=8A=B8=EB=9F=AC=EB=B8=94=EC=8A=88=ED=8C=85=20?= =?UTF-8?q?=EC=A2=85=EA=B2=B0=20=E2=80=94=20=EC=9B=8C=ED=81=AC=EB=A1=9C?= =?UTF-8?q?=EA=B7=B8=20=EC=9E=91=EC=84=B1,=20E2E=20=EA=B2=80=EC=A6=9D=20?= =?UTF-8?q?=ED=86=B5=EA=B3=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 재현 질문셋 4건 전수 통과: 톤 과장 해소, 문맥 유지, 과잉 제안 제거 Co-Authored-By: Claude Opus 4.6 (1M context) --- ...t_context_response_quality_문제오픈.md | 6 +- ..._문맥유실_수정_및_검증완료.md | 80 +++++++++++++++++++ 2 files changed, 84 insertions(+), 2 deletions(-) create mode 100644 journey/worklog/260319_rb8001_응답품질_톤과장_문맥유실_수정_및_검증완료.md diff --git a/journey/troubleshooting/260317_rb8001_prompt_intent_context_response_quality_문제오픈.md b/journey/troubleshooting/260317_rb8001_prompt_intent_context_response_quality_문제오픈.md index 140d94c..4a0c2f3 100644 --- a/journey/troubleshooting/260317_rb8001_prompt_intent_context_response_quality_문제오픈.md +++ b/journey/troubleshooting/260317_rb8001_prompt_intent_context_response_quality_문제오픈.md @@ -4,13 +4,15 @@ tags: [robeing, rb8001, prompt, intent, context, rag, troubleshooting] # rb8001 프롬프트·의도분석·문맥응답 품질 문제 오픈 -**상태**: 오픈 -**관측일**: 2026-03-17 +**상태**: 종결 (2026-03-19) +**종결 근거**: 시스템 프롬프트 v3 교체(과잉 서비스 제거), OpenAI 대화 이력 전달(문맥 유실 해소), neutral 감정 constraints 생략. 재현 질문셋 4건 전수 통과. 상세는 [수정 워크로그](../worklog/260319_rb8001_응답품질_톤과장_문맥유실_수정_및_검증완료.md) 참조. +**관측일**: 2026-03-17 **범위**: Slack 실사용 경로의 일반 대화, Company X RAG 질문, 후속질문 응답 품질 ## 관련 문서 - [rb8001 응답 품질 톤 과장·문맥 유실 전수 조사 리서치](../research/260319_rb8001_응답품질_톤과장_문맥유실_전수조사_리서치.md) - [rb8001 응답 품질 수정 계획](../plans/260319_rb8001_응답품질_톤과장_문맥유실_수정계획.md) +- [rb8001 응답 품질 수정 워크로그](../worklog/260319_rb8001_응답품질_톤과장_문맥유실_수정_및_검증완료.md) - [Company X RAG 답변 합성 회귀](./260312_companyx_rag_answer_composition_regression.md) - [rb8001 Slack Signing Secret 오값 복구 및 실유입 검증](../worklog/260317_rb8001_slack_signing_secret_오값복구_및_실유입검증.md) - [의도 파싱 greeting/context followup fix](./251122_intent_parsing_greeting_context_followup_fix.md) diff --git a/journey/worklog/260319_rb8001_응답품질_톤과장_문맥유실_수정_및_검증완료.md b/journey/worklog/260319_rb8001_응답품질_톤과장_문맥유실_수정_및_검증완료.md new file mode 100644 index 0000000..0c16a39 --- /dev/null +++ b/journey/worklog/260319_rb8001_응답품질_톤과장_문맥유실_수정_및_검증완료.md @@ -0,0 +1,80 @@ +--- +tags: [rb8001, prompt, tone, context, quality, worklog] +--- + +# rb8001 응답 품질 — 톤 과장·문맥 유실 수정 및 검증 완료 + +## 관련 문서 +- [트러블슈팅: rb8001 프롬프트·의도분석·문맥응답 품질 문제](../troubleshooting/260317_rb8001_prompt_intent_context_response_quality_문제오픈.md) +- [리서치: 톤 과장·문맥 유실 전수 조사](../research/260319_rb8001_응답품질_톤과장_문맥유실_전수조사_리서치.md) +- [계획: 응답 품질 수정 계획](../plans/260319_rb8001_응답품질_톤과장_문맥유실_수정계획.md) + +## 완료 요약 + +3단계 수정을 실행하여 톤 과장·문맥 유실·과잉 제안 문제를 해소했습니다. + +1. **시스템 프롬프트 v3 교체** (DB만, 배포 불필요): 과잉 서비스 유도 문구 제거, 간결 응답 원칙 추가 +2. **대화 이력 전달** (llm_service.py): `recent_conversations` → `previous_messages` 변환 추가. OpenClaw `assemble()` 패턴 참고. +3. **neutral 감정 constraints 생략** (llm_service.py): neutral/빈 감정에서 감정 constraints 자체를 생략 + +## 코드 반영 내용 + +- `app/services/llm/llm_service.py`: + - `recent_conversations` → `previous_messages` 변환 (최근 5건) + - `depression_risk` 사전 조회로 중복 호출 제거 + - neutral 감정 판정 시 `system_instruction` 빈 문자열로 설정 +- DB: `system_chat_openai` v3 활성화 (id=11) +- rb8001 commit: `6123063` + +## E2E 검증 결과 + +### Before (수정 전) + +| 질문 | 응답 | 문제 | +|------|------|------| +| `로빙?` | `사용자님, 로빙입니다. 어떻게 도와드릴까요?` | 양호 | +| `오늘 날씨는 어때?` | 5줄 — 준비물, 겉옷 등 과잉 안내 | 과잉 | +| `난 지금 서울이야` | 7줄 — 투자자 추천, PDF 분석 나열 | 과잉 제안 | +| `내가 지금 어디라고?` | 6줄 — 위치 접근 불가, 안전 문제 | 문맥 유실 | + +### After (수정 후) + +| 질문 | 응답 | 판정 | +|------|------|------| +| `로빙?` | `대표님, 네 말씀 들었어요 — 로빙입니다.` | ✅ 1문장 | +| `오늘 날씨는 어때?` | `대표님, 현재 위치를 알려주시면 오늘 날씨를 알려드리겠습니다.` | ✅ 1문장 | +| `난 지금 서울이야` | `대표님, 알겠습니다 — 서울에 계시는군요.` | ✅ 1문장, 과잉 제안 없음 | +| `내가 지금 어디라고?` | `대표님, 지금 서울에 계시다고 하셨어요.` | ✅ 직전 맥락 유지 | + +## JWT E2E 테스트 방법 + +```bash +# 컨테이너 내부에서 테스트용 JWT 발급 +docker exec rb8001 python3 -c " +import jwt, os +secret = os.getenv('JWT_SECRET_KEY') +token = jwt.encode({'sub': '', 'username': 'testuser'}, secret, algorithm='HS256') +print(token) +" + +# /api/message 호출 +curl -s http://127.0.0.1:8001/api/message \ + -H 'Authorization: Bearer ' \ + -H 'Content-Type: application/json' \ + -d '{"text":"질문"}' +``` + +**주의:** 테스트 시 DB에 실제 존재하는 user UUID를 사용해야 `recent_conversations`가 로드됩니다. + +## 닫힘 기준 충족 확인 + +- [x] `로빙?` — 1문장 인사 +- [x] `오늘 날씨는 어때?` — 과잉 안내 없이 짧은 안내 +- [x] `난 지금 서울이야` — 과잉 제안 없이 확인 응답 +- [x] `내가 지금 어디라고?` — 직전 맥락(서울) 유지 +- [x] DB 프롬프트 v3 반영 확인 (로그: `prompt_db_injected version=v3`) +- [x] RAG 경로 영향 없음 (skip_default_prompt 경로 미변경) + +## 결론 + +트러블슈팅 `260317_rb8001_prompt_intent_context_response_quality_문제오픈.md`는 종결합니다.