P1 구현 워크로그 작성, 트러블슈팅 종결 상태 반영 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
64 lines
5.0 KiB
Markdown
64 lines
5.0 KiB
Markdown
---
|
|
tags: [rb8001, prompt-db, self-improvement, tracking, troubleshooting]
|
|
---
|
|
|
|
# 프롬프트 DB 응답생성 폐루프 미연결
|
|
|
|
**날짜**: 2026-03-10
|
|
**작성자**: Codex
|
|
**관련 파일**: `rb8001/app/services/message_tracking_service.py`, `rb8001/app/router/message_endpoint.py`, `rb8001/app/state/prompt_management_repository.py`
|
|
**상위 원칙**: [문서 작성 원칙](../../book/300_architecture/312_writing-principles.md), [Backend Coding Principles](../../book/300_architecture/311_backend_coding_principles.md)
|
|
|
|
**상태**: 종결 (2026-03-19)
|
|
**종결 근거**: P1 폐루프 연결 구현 완료. DB 활성 프롬프트가 응답 생성 전에 주입됨. v2 활성화 시 실제 응답 변화 확인. 테스트 7건 통과, 24 서버 배포 검증 완료. 상세는 [P1 구현 워크로그](../worklog/260319_프롬프트DB_폐루프_P1_구현_및_검증완료.md) 참조.
|
|
|
|
## 관련 문서
|
|
- [프롬프트 DB 폐루프 P1 구현 및 검증 완료](../worklog/260319_프롬프트DB_폐루프_P1_구현_및_검증완료.md)
|
|
- [프롬프트 DB 폐루프 및 하드코딩 잔존 전수 조사 리서치](../research/260319_프롬프트DB_폐루프_및_하드코딩_잔존_전수조사_리서치.md)
|
|
- [프롬프트 동적 관리 시스템 계획](../plans/251225_프롬프트_동적관리_계획.md)
|
|
- [자기개선 루프 DB/서비스 구현 실행계획](../plans/260303_자기개선루프_DB_구현_실행계획.md)
|
|
- [자기개선루프 프롬프트DB 23로컬24 통합실행기록](../plans/260304_자기개선루프_프롬프트DB_23로컬24_통합실행기록.md)
|
|
- [프롬프트 DB 부분 도입 상태와 하드코딩 프롬프트 잔존](./260311_prompt_db_partial_adoption_and_hardcoded_prompts.md)
|
|
|
|
## 이 문서의 범위
|
|
- 이 문서는 `DB에 저장된 활성 프롬프트가 실제 응답 생성 전에 반영되지 않는 문제`만 다룹니다.
|
|
- 즉 핵심은 `실행 경로 연결`, `폐루프`, `주입 시점` 문제입니다.
|
|
- 아직 DB로 옮기지 않은 하드코딩 프롬프트 범위는 별도 문서 [프롬프트 DB 부분 도입 상태와 하드코딩 프롬프트 잔존](./260311_prompt_db_partial_adoption_and_hardcoded_prompts.md) 으로 분리합니다.
|
|
|
|
## 문제 정의
|
|
- 프롬프트 DB와 자기개선 DB의 저장/조회 API, 적재 테이블, `run_id` 추적 골격은 이미 구현돼 있다.
|
|
- 하지만 현재 `/api/message` 응답 생성 경로는 활성 프롬프트 버전을 읽어 실제 답변 생성 규칙에 반영하지 않는다.
|
|
- 그 결과 프롬프트 DB에서 버전을 바꿔도, 사용자는 응답 품질 변화나 규칙 반영을 직접 체감할 수 없다.
|
|
|
|
## 재현 조건
|
|
- 유효한 JWT로 `POST /api/message` 호출
|
|
- `X-Run-Id` 지정
|
|
- 같은 사용자로 `message_chat` 프롬프트를 DB에서 새 버전으로 생성/활성화 후 다시 호출
|
|
|
|
## 확인된 사실
|
|
- `message_chat` 템플릿에 `v2`를 생성하고 active로 전환하는 API 호출은 정상 동작했다.
|
|
- DB 조회 결과 `message_chat`의 기존 `v1`은 `retired`, 새 `v2`는 `active` 상태로 바뀌었다.
|
|
- 같은 시점 `/api/message` 호출은 정상 응답했고, 해당 `run_id`에 대한 `prompt_events.version_id`는 `v2`를 가리켰다.
|
|
- 그러나 실제 `bot_response`에는 `v2` 내용(`always answer with prefix TEST-V2`)이 반영되지 않았다.
|
|
- 코드상 `message_tracking_service.py`는 응답 생성 후 `get_active_prompt_version()`을 호출해 이벤트를 기록하지만, 응답 생성 이전에 프롬프트 버전을 주입하는 경로는 없다.
|
|
|
|
## 영향 범위
|
|
- 프롬프트 DB는 현재 기준으로 `운영 버전 저장소 + 추적 로그` 역할에 머문다.
|
|
- 사용자 입장에서는 프롬프트 버전을 바꿔도 실제 답변 개선이 즉시 일어나지 않는다.
|
|
- 자기개선 루프도 현재는 `run_id` 기준 추적은 되지만, 추적 결과가 다음 응답 품질을 바꾸는 폐루프까지는 연결되지 않았다.
|
|
|
|
## 닫힘 기준
|
|
- `message_chat` 등 최소 1개 운영 경로에서 활성 프롬프트 버전이 응답 생성 전에 실제로 주입된다.
|
|
- DB에서 활성 버전을 바꾸면 사용자가 실제 응답 변화로 이를 체감할 수 있다.
|
|
- `prompt_events.version_id`와 실제 응답 내용이 같은 버전을 가리킨다는 운영 검증 증거가 남는다.
|
|
|
|
## 확정 항목 (2026-03-19 리서치 결과)
|
|
- 주입 계층: `llm_service.py`의 `process_request()` 진입 시 DB 활성 프롬프트를 읽어 `context['system_instruction']` + `context['skip_default_prompt']`로 전달. 이미 `companyx_grounding_service.py`에서 검증된 패턴.
|
|
- P1 대상: `system_chat_openai`, `system_chat_gemini`, `constraints_emotion_stats` 3건.
|
|
- fallback: DB 조회 실패 시 기존 하드코딩 유지 (`safe_prod` 모드).
|
|
- 상세는 [전수 조사 리서치](../research/260319_프롬프트DB_폐루프_및_하드코딩_잔존_전수조사_리서치.md) §6 참조.
|
|
|
|
## 미확정 항목
|
|
- `message_chat` 외 task별 템플릿 확장 우선순위는 P1 종결 후 결정한다.
|
|
- 캐싱 전략(TTL, 무효화 방식)은 구현 시 확정한다.
|