From f62d48283d9b69595a8f7afc12493bf5dcc24be3 Mon Sep 17 00:00:00 2001 From: happybell80 Date: Thu, 19 Mar 2026 21:23:11 +0900 Subject: [PATCH] =?UTF-8?q?docs:=20=ED=94=84=EB=A1=AC=ED=94=84=ED=8A=B8=20?= =?UTF-8?q?DB=20=ED=8F=90=EB=A3=A8=ED=94=84=20=EB=AF=B8=EC=97=B0=EA=B2=B0?= =?UTF-8?q?=20=ED=8A=B8=EB=9F=AC=EB=B8=94=EC=8A=88=ED=8C=85=20=EC=A2=85?= =?UTF-8?q?=EA=B2=B0=20=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit P1 구현 워크로그 작성, 트러블슈팅 종결 상태 반영 Co-Authored-By: Claude Opus 4.6 (1M context) --- ...트DB_응답생성_폐루프_미연결.md | 4 ++ ...DB_폐루프_P1_구현_및_검증완료.md | 40 +++++++++++++++++++ 2 files changed, 44 insertions(+) create mode 100644 journey/worklog/260319_프롬프트DB_폐루프_P1_구현_및_검증완료.md diff --git a/journey/troubleshooting/260310_프롬프트DB_응답생성_폐루프_미연결.md b/journey/troubleshooting/260310_프롬프트DB_응답생성_폐루프_미연결.md index d3b72c6..609808c 100644 --- a/journey/troubleshooting/260310_프롬프트DB_응답생성_폐루프_미연결.md +++ b/journey/troubleshooting/260310_프롬프트DB_응답생성_폐루프_미연결.md @@ -9,7 +9,11 @@ tags: [rb8001, prompt-db, self-improvement, tracking, troubleshooting] **관련 파일**: `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) diff --git a/journey/worklog/260319_프롬프트DB_폐루프_P1_구현_및_검증완료.md b/journey/worklog/260319_프롬프트DB_폐루프_P1_구현_및_검증완료.md new file mode 100644 index 0000000..02a0296 --- /dev/null +++ b/journey/worklog/260319_프롬프트DB_폐루프_P1_구현_및_검증완료.md @@ -0,0 +1,40 @@ +--- +tags: [rb8001, prompt-db, closed-loop, worklog] +--- + +# 프롬프트 DB 폐루프 P1 구현 및 검증 완료 + +## 관련 문서 +- [프롬프트 DB 응답생성 폐루프 미연결](../troubleshooting/260310_프롬프트DB_응답생성_폐루프_미연결.md) +- [프롬프트 DB 폐루프 및 하드코딩 잔존 전수 조사 리서치](../research/260319_프롬프트DB_폐루프_및_하드코딩_잔존_전수조사_리서치.md) +- [프롬프트 동적 관리 시스템 계획](../plans/251225_프롬프트_동적관리_계획.md) + +## 완료 요약 +- `llm_service.py`의 `process_request()` 진입 시 DB 활성 프롬프트를 조회하여 `context['db_system_prompt']`로 주입하는 폐루프를 연결했습니다. +- `openai_handler.py`, `gemini_handler.py` 모두 `db_system_prompt`가 있으면 하드코딩 대신 사용합니다. +- P1 프롬프트 2건(`system_chat_openai`, `system_chat_gemini`)을 DB에 v1으로 적재했습니다. +- TTL 60초 메모리 캐시로 DB 부하를 방지합니다. +- `skip_default_prompt` 경로(RAG 등)는 영향 없음을 테스트로 확인했습니다. + +## 코드 반영 내용 +- `app/services/llm/llm_service.py`: `_get_active_prompt_from_db()` 캐시 함수 추가, `process_request()` 내 DB 프롬프트 주입 로직 +- `app/services/llm/openai_handler.py`: `db_system_prompt` 우선 사용 (chat, stream_chat 두 경로) +- `app/services/llm/gemini_handler.py`: `db_system_prompt` 우선 사용 (chat 두 경로) +- `scripts/seed_p1_prompts.py`: P1 프롬프트 DB 적재 스크립트 +- `tests/test_prompt_db_closed_loop.py`: 7건 테스트 + +## 검증 결과 +- 단위 테스트: 7 passed (캐시 히트, 캐시 만료, DB 실패, DB 없음, DB 주입, fallback, RAG 비영향) +- DB 적재: `system_chat_openai` v1 active (id=7), `system_chat_gemini` v1 active (id=8) +- 폐루프 검증: v2 생성 → 활성화 → 캐시 비움 → DB에서 v2 프롬프트 읽힘 → v1 복원 정상 +- 배포: 24 서버 rb8001 재빌드 후 health 정상 +- rb8001 commit: `2bda17f` + +## 닫힘 기준 충족 확인 +- [x] 최소 1개 운영 경로에서 활성 프롬프트 버전이 응답 생성 전에 실제로 주입된다 +- [x] DB에서 활성 버전을 바꾸면 실제 응답이 바뀐다 (v2 TEST-V2 검증) +- [x] DB 조회 실패 시 하드코딩 fallback 정상 동작 +- [x] RAG 경로 영향 없음 + +## 결론 +- 트러블슈팅 `260310_프롬프트DB_응답생성_폐루프_미연결.md`는 종결합니다.