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`에 자동 기록 로직 추가
|
||||
3. **Diary Aggregator 구현**: 모든 데이터 소스 집계 로직 구현
|
||||
4. **일기 생성 로직**: LLM으로 일기 텍스트 생성, `robeing_diary`에 저장
|
||||
5. **API 엔드포인트**: rb8001에 `/api/diary/{date}` 추가 (마크다운 동적 생성)
|
||||
6. **관리자 대시보드**: admin-dashboard에 일기 목록/상세 페이지 추가
|
||||
7. **스케줄러 등록**: 매일 오전 2시 또는 3시에 전날 일기 생성
|
||||
3. **Diary Aggregator 구현**: `rb8001/app/services/diary/aggregator.py` 생성, 모든 데이터 소스 집계
|
||||
4. **일기 생성 로직**: `rb8001/app/services/diary/generator.py` 생성, LLM으로 일기 텍스트 생성
|
||||
5. **스케줄러 등록**: `rb8001/app/scheduler/jobs/diary_generator.py` 생성, `main.py`에 등록
|
||||
6. **API 엔드포인트**: `rb8001/app/router/diary.py` 생성, `/api/diary/{date}` 구현
|
||||
7. **관리자 대시보드**: admin-dashboard에 일기 목록/상세 페이지 추가
|
||||
8. **DOCS 동기화 스크립트**: 선택적으로 별도 스크립트로 DOCS 동기화
|
||||
|
||||
---
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user