docs: 로빙 일기 시스템 구현 상세 추가
- DB 테이블 스키마 (robeing_diary, activity_log) - 스킬 실행 로그 기록 위치/방법 - API 엔드포인트 요청/응답 형식 - 스케줄러 등록 방법 - LLM 프롬프트 템플릿 구조 - 구현 단계별 파일 위치 명시 - 기존 코드 참고 링크 추가
This commit is contained in:
parent
7d5382baea
commit
da0049ad41
@ -88,15 +88,107 @@
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## 구현 상세
|
||||||
|
|
||||||
|
### DB 테이블 스키마
|
||||||
|
|
||||||
|
**robeing_diary 테이블**:
|
||||||
|
```sql
|
||||||
|
CREATE TABLE robeing_diary (
|
||||||
|
id SERIAL PRIMARY KEY,
|
||||||
|
date DATE NOT NULL,
|
||||||
|
robeing_id VARCHAR(50) NOT NULL,
|
||||||
|
summary TEXT,
|
||||||
|
dominant_emotion VARCHAR(50),
|
||||||
|
stats JSONB DEFAULT '{}',
|
||||||
|
full_content TEXT NOT NULL,
|
||||||
|
created_at TIMESTAMPTZ DEFAULT NOW(),
|
||||||
|
UNIQUE(date, robeing_id)
|
||||||
|
);
|
||||||
|
CREATE INDEX idx_robeing_diary_date ON robeing_diary(date DESC);
|
||||||
|
CREATE INDEX idx_robeing_diary_robeing ON robeing_diary(robeing_id);
|
||||||
|
```
|
||||||
|
|
||||||
|
**activity_log 테이블**:
|
||||||
|
```sql
|
||||||
|
CREATE TABLE activity_log (
|
||||||
|
id SERIAL PRIMARY KEY,
|
||||||
|
robeing_id VARCHAR(50) NOT NULL,
|
||||||
|
activity_type VARCHAR(50) NOT NULL, -- 'skill', 'scheduler', 'internal'
|
||||||
|
skill_name VARCHAR(100),
|
||||||
|
status VARCHAR(20) NOT NULL, -- 'success', 'error', 'partial'
|
||||||
|
result_summary TEXT,
|
||||||
|
error_message TEXT,
|
||||||
|
metadata JSONB DEFAULT '{}',
|
||||||
|
created_at TIMESTAMPTZ DEFAULT NOW()
|
||||||
|
);
|
||||||
|
CREATE INDEX idx_activity_log_robeing_date ON activity_log(robeing_id, created_at DESC);
|
||||||
|
CREATE INDEX idx_activity_log_type ON activity_log(activity_type);
|
||||||
|
```
|
||||||
|
|
||||||
|
**참고**: `rb8001/app/state/database.py:44-57` (ConversationLog 모델), `rb8001/app/models/intent_review_model.py:11-32` (IntentReviewQueue 모델)
|
||||||
|
|
||||||
|
### 스킬 실행 로그 기록
|
||||||
|
|
||||||
|
**위치**: 스킬 실행 래퍼 함수 또는 미들웨어
|
||||||
|
- `rb8001/app/services/skills/` 내 각 스킬의 `handle()` 메서드 시작/종료 시 기록
|
||||||
|
- 또는 `rb8001/app/router/router.py`의 스킬 호출 부분에 데코레이터/미들웨어 추가
|
||||||
|
|
||||||
|
**기록 내용**: 스킬명, 실행 시간, 결과(success/error), 에러 메시지(있을 경우), 메타데이터
|
||||||
|
|
||||||
|
### API 엔드포인트
|
||||||
|
|
||||||
|
**rb8001**: `GET /api/diary/{date}?robeing_id=rb8001`
|
||||||
|
- 요청: `date` (YYYY-MM-DD), `robeing_id` (선택, 기본값: rb8001)
|
||||||
|
- 응답: `{"date": "2025-12-09", "robeing_id": "rb8001", "content": "# 로빙 일기...", "summary": "...", "dominant_emotion": "happiness"}`
|
||||||
|
- 구현 위치: `rb8001/app/router/diary.py` (새 파일) 또는 `rb8001/app/router/router.py`
|
||||||
|
|
||||||
|
**참고**: `rb8001/app/state/state_service.py:179-207` (conversation 로그 API 패턴)
|
||||||
|
|
||||||
|
### 스케줄러 등록
|
||||||
|
|
||||||
|
**위치**: `rb8001/main.py:146-195` (startup_event 함수)
|
||||||
|
- `rb8001/app/scheduler/jobs/diary_generator.py` 생성
|
||||||
|
- `scheduler.add_job(diary_generator.generate_diary, 'cron', hour=2, minute=0, id='daily_diary')` 등록
|
||||||
|
|
||||||
|
**참고**: `rb8001/app/scheduler/jobs/naverworks_briefing.py` (스케줄러 작업 예시)
|
||||||
|
|
||||||
|
### LLM 프롬프트 템플릿
|
||||||
|
|
||||||
|
**입력**: 집계된 데이터 (JSON)
|
||||||
|
**출력**: 마크다운 형식 일기
|
||||||
|
**템플릿 구조**:
|
||||||
|
```
|
||||||
|
다음 데이터를 바탕으로 로빙의 하루 일기를 작성하세요:
|
||||||
|
- 대화: {conversations_summary}
|
||||||
|
- 활동: {activities_summary}
|
||||||
|
- 감정: {emotions_summary}
|
||||||
|
- 문제: {issues_summary}
|
||||||
|
- 성장: {growth_summary}
|
||||||
|
|
||||||
|
형식:
|
||||||
|
# 로빙 일기 – {date}
|
||||||
|
## 오늘 한 일
|
||||||
|
...
|
||||||
|
## 감정 상태
|
||||||
|
...
|
||||||
|
## 문제와 배운 점
|
||||||
|
...
|
||||||
|
## 내일 계획
|
||||||
|
...
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## 구현 단계
|
## 구현 단계
|
||||||
|
|
||||||
1. **DB 테이블 생성**: `robeing_diary` 테이블, `activity_log` 테이블 생성
|
1. **DB 테이블 생성**: `robeing_diary`, `activity_log` 테이블 생성 스크립트 작성
|
||||||
2. **활동 로그 기록**: 스킬 실행 시 `activity_log`에 자동 기록 로직 추가
|
2. **활동 로그 기록**: 스킬 실행 시 `activity_log`에 자동 기록 로직 추가
|
||||||
3. **Diary Aggregator 구현**: 모든 데이터 소스 집계 로직 구현
|
3. **Diary Aggregator 구현**: `rb8001/app/services/diary/aggregator.py` 생성, 모든 데이터 소스 집계
|
||||||
4. **일기 생성 로직**: LLM으로 일기 텍스트 생성, `robeing_diary`에 저장
|
4. **일기 생성 로직**: `rb8001/app/services/diary/generator.py` 생성, LLM으로 일기 텍스트 생성
|
||||||
5. **API 엔드포인트**: rb8001에 `/api/diary/{date}` 추가 (마크다운 동적 생성)
|
5. **스케줄러 등록**: `rb8001/app/scheduler/jobs/diary_generator.py` 생성, `main.py`에 등록
|
||||||
6. **관리자 대시보드**: admin-dashboard에 일기 목록/상세 페이지 추가
|
6. **API 엔드포인트**: `rb8001/app/router/diary.py` 생성, `/api/diary/{date}` 구현
|
||||||
7. **스케줄러 등록**: 매일 오전 2시 또는 3시에 전날 일기 생성
|
7. **관리자 대시보드**: admin-dashboard에 일기 목록/상세 페이지 추가
|
||||||
8. **DOCS 동기화 스크립트**: 선택적으로 별도 스크립트로 DOCS 동기화
|
8. **DOCS 동기화 스크립트**: 선택적으로 별도 스크립트로 DOCS 동기화
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user