# 260303 자기개선 루프 구현을 위한 DB/서비스 리서치

## 목적
- 로빙의 `자기개선 루프(예측-행동-평가-반성)`를 실제 서비스에 붙이기 위한 현재 자산(DB/서비스/코드)을 정리한다.
- 이미 운영 중인 컴포넌트를 재사용해 최소 변경으로 구현 가능한 경로를 제시한다.

## 요약 결론
1. `rb8001`은 이미 피드백/평가/리뷰 큐를 갖고 있어 루프의 `평가`와 `반성` 입력 데이터가 존재한다.
2. `robeing-monitor`는 상태/로그를 저장하지만 설정 테이블(`robeing_settings`)이 미구현(TODO)이라 정책 버전 관리 계층이 비어 있다.
3. `robeing-gateway`는 모니터 서비스 프록시 경로가 있어 루프 지표를 프론트에 노출하기 좋은 진입점을 이미 보유한다.

## 외부 서비스에서의 자기개선 루프 패턴

### OpenAI (Evals 중심)
- 핵심 패턴: `로그 수집 -> task-specific eval -> human calibration -> continuous eval`
- 포인트:
  - 정량 점수만 보지 않고 인간 평가와 결합
  - 변경마다 지속 평가(CE)로 데이터셋을 확장
- 참고:
  - [Evaluation best practices](https://platform.openai.com/docs/guides/evaluation-best-practices)
  - [Model optimization](https://platform.openai.com/docs/guides/model-optimization)

### LangSmith (운영 리뷰 큐 중심)
- 핵심 패턴: `실행 트레이스 -> annotation queue -> human/LLM/heuristic 평가 -> 개선 반영`
- 포인트:
  - 런(run) 단위 리뷰 할당
  - 품질 피드백을 워크플로 단계별로 붙여 운영
- 참고:
  - [LangSmith Evaluation](https://www.langchain.com/langsmith/evaluation)

### Arize Phoenix (관측/평가 일체형)
- 핵심 패턴: `OTEL 추적 -> LLM-as-judge eval -> human feedback 결합 -> dataset 실험`
- 포인트:
  - 오픈소스/벤더 중립형 관측
  - 평가 템플릿 + 커스텀 평가자 + 설명 가능한 평가 로그
- 참고:
  - [Phoenix Home](https://phoenix.arize.com/)
  - [Phoenix Evals Overview](https://arize.com/docs/phoenix/evaluation/llm-evals)
  - [Custom Eval Guide](https://arize.com/docs/phoenix/cookbook/evaluation/creating-a-custom-llm-evaluator-with-a-benchmark-dataset)

## robeing-monitor 존재 여부
- 로컬 워크스페이스에서 `ivada/robeing-monitor` 폴더 존재 확인 완료
- 상태: 이미 존재함(추가 clone 불필요)
- 원격 참고: [robeing-monitor](https://git.ro-being.com/ivada_Ro-being/robeing-monitor.git)

## 현재 DB/서비스 자산

### 1) rb8001 (루프 데이터의 핵심 소스)
- 피드백 수집 엔드포인트:
  - [`app/router/feedback_endpoint.py`](https://git.ro-being.com/ivada_Ro-being/rb8001/src/branch/main/app/router/feedback_endpoint.py)
  - `POST /api/feedback/chat`
- 리뷰 큐 테이블(의도 예측/정답/상태):
  - [`app/models/intent_review_model.py`](https://git.ro-being.com/ivada_Ro-being/rb8001/src/branch/main/app/models/intent_review_model.py)
  - 핵심 컬럼: `predicted_intent`, `predicted_confidence`, `user_feedback`, `status`, `true_intent`
- 리뷰 큐 처리/통계:
  - [`app/state/intent_review_repository.py`](https://git.ro-being.com/ivada_Ro-being/rb8001/src/branch/main/app/state/intent_review_repository.py)
  - 상태 전이: `pending -> confirmed/corrected`
- IR 평가 + 피드백(학습용 데이터셋):
  - [`app/state/ir_valuation_repository.py`](https://git.ro-being.com/ivada_Ro-being/rb8001/src/branch/main/app/state/ir_valuation_repository.py)
  - 테이블: `ir_deck_evaluations`, `ir_deck_page_evaluations`, `ir_deck_feedback`
- 감정 예측 평가 함수:
  - [`app/core/emotion/bayesian.py`](https://git.ro-being.com/ivada_Ro-being/rb8001/src/branch/main/app/core/emotion/bayesian.py)
  - 함수: `evaluate_prediction()`, `should_update()`
- 일기 집계에서 피드백 루프 추출:
  - [`app/services/diary/aggregator.py`](https://git.ro-being.com/ivada_Ro-being/rb8001/src/branch/main/app/services/diary/aggregator.py)

### 2) robeing-monitor (상태 저장/조회 허브)
- 개요 및 API:
  - [`README.md`](https://git.ro-being.com/ivada_Ro-being/robeing-monitor/src/branch/main/README.md)
  - 상태 조회/업데이트, 로그 저장, 모니터링 API
- DB 모델:
  - [`app/state/database.py`](https://git.ro-being.com/ivada_Ro-being/robeing-monitor/src/branch/main/app/state/database.py)
  - 테이블: `robeing`, `conversation_log`
  - 주석/TODO: `robeing_settings` 테이블 미구현
- 상태 서비스:
  - [`app/state/state_service.py`](https://git.ro-being.com/ivada_Ro-being/robeing-monitor/src/branch/main/app/state/state_service.py)

### 3) robeing-gateway (노출 계층)
- 모니터 프록시/설정:
  - [`app/main.py`](https://git.ro-being.com/ivada_Ro-being/robeing-gateway/src/branch/main/app/main.py)
  - [`app/settings.py`](https://git.ro-being.com/ivada_Ro-being/robeing-gateway/src/branch/main/app/settings.py)
- 의미:
  - 루프 지표 API를 monitor에 추가하면 gateway를 통해 프론트로 안전하게 전달 가능

## 자기개선 루프 관점 매핑

### 예측 (Predict)
- 출처: 의도 분류 결과, 감정 예측 분포
- 저장 지점: `intent_review_queue.predicted_*`, 감정 예측 결과

### 행동 (Act)
- 출처: rb8001의 응답/워크플로 실행, 스킬 호출
- 저장 지점: `conversation_log`, `activity_log`(rb8001 내부 집계에서 사용)

### 평가 (Evaluate)
- 출처: `user_feedback`, `true_intent`, IR 등급 피드백, 감정 예측 오차
- 저장 지점: `intent_review_queue`, `ir_deck_feedback`, 감정 평가 함수 출력

### 반성 (Reflect)
- 현재: 부분 구현(리뷰큐 상태 전이, 일부 재학습 흐름)
- 부족: 정책 버전/실험 버전/롤백 이력을 구조적으로 남기는 저장소 부재

## 구현 시 필요한 최소 추가 설계

### A. 정책 버전 저장소(필수)
- 위치 권장: `robeing-monitor` DB
- 신규 테이블 제안:
  - `robeing_policy_versions`
  - 컬럼 예: `id`, `robeing_id`, `policy_type`, `version`, `config_json`, `created_at`, `is_active`

### B. 루프 실행 로그(필수)
- 신규 테이블 제안:
  - `robeing_self_improvement_runs`
  - 컬럼 예: `run_id`, `robeing_id`, `predict_snapshot`, `action_summary`, `evaluation_metrics`, `reflection_notes`, `created_at`

### C. 평가 지표 표준화(필수)
- 공통 지표 키를 고정:
  - intent: `accuracy`, `f1`, `correction_rate`
  - feedback: `up_ratio`, `down_ratio`
  - emotion: `kl_divergence`, `brier_score`, `entropy_diff`

## 우선 실행 순서 (현실적)
1. `rb8001`에서 루프 관련 결과를 JSON 스냅샷으로 일단 저장(테이블 추가 전 임시 단계).
2. `robeing-monitor`에 정책 버전/루프 실행 테이블 추가.
3. `robeing-gateway`로 루프 대시보드 API 프록시 연결.
4. 주간 단위로 `정책 업데이트 -> 롤백 가능성 검증` 운영 절차 고정.

## 관련 철학 문서 연결
- [자기개선 루프 정의(용어집)](../../book/600_appendix/650_용어집.md)
- [존재형 에이전트 정의](../../book/100_philosophy/130_존재형_에이전트란_무엇인가.md)
- [자기개선 루프 설계 전개](../../book/100_philosophy/195_철학에서_설계로.md)
