---
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': '<valid-user-uuid>', 'username': 'testuser'}, secret, algorithm='HS256')
print(token)
"

# /api/message 호출
curl -s http://127.0.0.1:8001/api/message \
  -H 'Authorization: Bearer <TOKEN>' \
  -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`는 종결합니다.
