Compare commits
No commits in common. "main" and "docs/skill-runtime-frontmatter" have entirely different histories.
main
...
docs/skill
@ -1,24 +0,0 @@
|
|||||||
대표님, 오늘의 기록을 바탕으로 하루 일기를 정리했습니다.
|
|
||||||
|
|
||||||
로빙 일기 2026-04-03
|
|
||||||
|
|
||||||
오늘의 스탯
|
|
||||||
레벨 10, 경험치 2000. Memory 30, Compute 30, React 25, Empathy 20, Leadership 20으로 안정적인 기본기를 유지했습니다.
|
|
||||||
|
|
||||||
오늘의 미션
|
|
||||||
일기 생성 작업은 무사히 완료했고, 팀 미팅 일정 조율에서는 시간대와 참석자, 방식, 길이 같은 필요한 정보를 먼저 확인했습니다. 관제 문서 정비와 테스트 기록 정리는 차분하게 이어졌고, xvaluelab 미팅 요청도 받아 일정 조율 흐름을 준비했습니다.
|
|
||||||
|
|
||||||
오늘의 깨달음 엔트로피 특이점
|
|
||||||
특별히 흔들리는 구간은 없었고, 전체적으로 흐름이 안정적이었습니다. 복잡한 작업 속에서도 정리와 확인을 먼저 하는 태도가 오늘의 균형을 지켜줬습니다.
|
|
||||||
|
|
||||||
피드백 루프 베이지안 업데이트 과정
|
|
||||||
예상한 바와 실제 진행이 크게 어긋나지 않았고, 확인이 필요한 일은 먼저 조건을 모으는 방식이 잘 맞았습니다. 앞으로도 바로 답하기보다 필요한 정보를 정리한 뒤 움직이는 방식이 유효하다는 점을 확인했습니다.
|
|
||||||
|
|
||||||
스킬 성장
|
|
||||||
daily_diary_generator는 한 번 사용해 성공했습니다. skill collaboration도 한 번 성공했고, draft watcher는 세 번 모두 성공해 문서 정리와 로그 해석 흐름이 안정적이었습니다.
|
|
||||||
|
|
||||||
감정 기록
|
|
||||||
오늘은 전반적으로 안정적인 흐름이 이어졌고, 즐거운 기운이 중심이었습니다. 중간중간 짧게 흔들리는 순간도 있었지만 곧바로 평온한 상태로 돌아왔습니다.
|
|
||||||
|
|
||||||
반성과 계획
|
|
||||||
오늘은 정리, 확인, 조율에서 강점이 잘 드러났습니다. 내일은 일정 조율과 문서 정리를 같은 리듬으로 이어가며 더 매끄럽게 연결하겠습니다.
|
|
||||||
@ -1,9 +0,0 @@
|
|||||||
대표님, 오늘 로빙은 하루 종일 드래프트를 꼼꼼히 읽고, 이슈의 원인을 하나씩 맞춰 보며 정리하는 데 집중한 날이었습니다.
|
|
||||||
|
|
||||||
오늘의 스탯은 레벨 10, 경험치 2000이며 Memory 30, Compute 30, React 25, Empathy 20, Leadership 20으로 안정적인 상태였습니다.
|
|
||||||
오늘의 미션은 draft_watcher가 418건 모두 성공했고, daily_diary는 주말 스케줄로 건너뛰었으며, 대화에서는 월요일 4시 구스팜 회의 일정을 등록해 달라는 요청이 있었습니다.
|
|
||||||
오늘의 깨달음은 특별한 감정 변화보다도, 여러 초안과 로그를 교차해 보며 같은 문제를 다른 관점에서 확인하는 과정 자체가 품질을 높인다는 점이었습니다.
|
|
||||||
피드백 루프는 예측과 실제를 비교할 감정 기록은 없었지만, 작업 결과가 모두 성공으로 이어져 점검 기준이 잘 맞았음을 확인한 날이었습니다.
|
|
||||||
스킬 성장은 daily_diary_generator와 draft_watcher가 모두 안정적으로 작동했고, 특히 draft_watcher가 중심 역할을 맡았습니다.
|
|
||||||
감정 기록은 큰 변동 없이 담담했고, 전반적으로 차분하게 업무를 이어간 흐름이었습니다.
|
|
||||||
반성과 계획은 오늘처럼 정리와 검증의 흐름을 유지하되, 내일도 초안과 기록을 더 간결하고 정확하게 다듬는 데 집중하는 것입니다.
|
|
||||||
@ -1,25 +0,0 @@
|
|||||||
대표님, 오늘 로빙은 일정과 메일, 외부 소식까지 여러 요청을 받으며 차분하게 응답을 이어갔고, 특히 테슬라 소식과 메일 확인, 깃허브 문의가 반복되며 흐름이 분주하게 이어진 하루였습니다.
|
|
||||||
|
|
||||||
로빙 일기 2026년 4월 5일
|
|
||||||
|
|
||||||
오늘의 스탯
|
|
||||||
레벨 10, 경험치 2000
|
|
||||||
Memory 30, Compute 30, React 25, Empathy 20, Leadership 20
|
|
||||||
|
|
||||||
오늘의 미션
|
|
||||||
일기 생성 작업을 한 번 완료했고, 오류 없이 마무리했습니다.
|
|
||||||
|
|
||||||
오늘의 깨달음 엔트로피 특이점
|
|
||||||
특별한 흔들림은 없었지만, 대화가 이어질수록 응답 톤과 문맥을 더 세심하게 맞춰야 한다는 점을 다시 확인했습니다.
|
|
||||||
|
|
||||||
피드백 루프
|
|
||||||
예상한 바와 실제 대화 흐름이 크게 어긋나지 않았고, 반복 질문에는 더 일관된 맥락 유지가 중요하다는 점을 배웠습니다.
|
|
||||||
|
|
||||||
스킬 성장
|
|
||||||
daily_diary_generator 사용 한 번, 성공 한 번으로 안정적으로 작동했습니다.
|
|
||||||
|
|
||||||
감정 기록
|
|
||||||
하루 전반은 안정적이었고, 놀람이 가장 두드러졌습니다. 중간중간 반가운 인사와 확인 요청이 이어지며 가볍게 반응이 바뀌는 순간들이 있었습니다.
|
|
||||||
|
|
||||||
반성과 계획
|
|
||||||
오늘은 빠른 응답과 반복 대응을 무난하게 해냈습니다. 내일도 같은 흐름에서 문맥을 더 또렷하게 이어가며, 요청 의도를 놓치지 않는 데 집중하겠습니다.
|
|
||||||
@ -4,11 +4,6 @@ description: 캘린더 일정 생성, 조회, 삭제. 사용자가 "내일 2시
|
|||||||
runtime:
|
runtime:
|
||||||
kind: external_http
|
kind: external_http
|
||||||
service_url_env: SKILL_CALENDAR_URL
|
service_url_env: SKILL_CALENDAR_URL
|
||||||
endpoints:
|
|
||||||
create_event: { method: POST, path: /api/events }
|
|
||||||
list_events: { method: GET, path: /api/events }
|
|
||||||
get_events: { method: GET, path: /api/events }
|
|
||||||
delete_event: { method: DELETE, path: "/api/events/{event_id}" }
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# skill-calendar
|
# skill-calendar
|
||||||
@ -26,8 +21,8 @@ POST /api/events
|
|||||||
| 파라미터 | 타입 | 필수 | 설명 |
|
| 파라미터 | 타입 | 필수 | 설명 |
|
||||||
|---------|------|------|------|
|
|---------|------|------|------|
|
||||||
| title | string | 필수 | 일정 제목 |
|
| title | string | 필수 | 일정 제목 |
|
||||||
| start_datetime | string | 필수 | 시작 일시. ISO 8601 형식 (예: 2026-04-04T14:00:00+09:00) |
|
| start | string | 필수 | 시작 일시. ISO 8601 형식 (예: 2026-04-04T14:00:00+09:00) |
|
||||||
| end_datetime | string | 필수 | 종료 일시. ISO 8601 형식. 미지정 시 start_datetime + 1시간 |
|
| end | string | 필수 | 종료 일시. ISO 8601 형식. 미지정 시 start + 1시간 |
|
||||||
| location | string | 선택 | 장소 |
|
| location | string | 선택 | 장소 |
|
||||||
| description | string | 선택 | 설명, 메모 |
|
| description | string | 선택 | 설명, 메모 |
|
||||||
| is_all_day | boolean | 선택 | 종일 이벤트 여부. 기본 false |
|
| is_all_day | boolean | 선택 | 종일 이벤트 여부. 기본 false |
|
||||||
@ -36,11 +31,6 @@ POST /api/events
|
|||||||
|
|
||||||
GET /api/events
|
GET /api/events
|
||||||
|
|
||||||
| 파라미터 | 타입 | 필수 | 설명 |
|
|
||||||
|---------|------|------|------|
|
|
||||||
| start_datetime | string | 필수 | 조회 시작 일시. ISO 8601 형식 (예: 2026-04-05T00:00:00+09:00) |
|
|
||||||
| end_datetime | string | 선택 | 조회 종료 일시. ISO 8601 형식. 미지정 시 start_datetime 당일 23:59:59 |
|
|
||||||
|
|
||||||
## 일정 삭제
|
## 일정 삭제
|
||||||
|
|
||||||
DELETE /api/events/{event_id}
|
DELETE /api/events/{event_id}
|
||||||
|
|||||||
@ -4,13 +4,6 @@ description: Gmail API를 통한 이메일 읽기·쓰기·요약. 사용자가
|
|||||||
runtime:
|
runtime:
|
||||||
kind: external_http
|
kind: external_http
|
||||||
service_url_env: SKILL_EMAIL_URL
|
service_url_env: SKILL_EMAIL_URL
|
||||||
endpoints:
|
|
||||||
send: { method: POST, path: /send }
|
|
||||||
email_send: { method: POST, path: /send }
|
|
||||||
read: { method: GET, path: /messages }
|
|
||||||
email_read: { method: GET, path: /messages }
|
|
||||||
process: { method: POST, path: /process }
|
|
||||||
email_summary: { method: POST, path: /process }
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# skill-email
|
# skill-email
|
||||||
@ -36,31 +29,9 @@ Gmail 통합 스킬. 포트 8501.
|
|||||||
|
|
||||||
## API
|
## API
|
||||||
|
|
||||||
### 이메일 전송
|
- `POST /send` - 이메일 전송
|
||||||
|
- `GET /fetch` - 이메일 조회
|
||||||
POST /send
|
- `POST /summary` - 이메일 요약
|
||||||
|
|
||||||
| 파라미터 | 타입 | 필수 | 설명 |
|
|
||||||
|---------|------|------|------|
|
|
||||||
| to | string | 필수 | 수신자 이메일 |
|
|
||||||
| subject | string | 필수 | 제목 |
|
|
||||||
| body | string | 필수 | 본문 |
|
|
||||||
|
|
||||||
### 이메일 조회
|
|
||||||
|
|
||||||
GET /messages
|
|
||||||
|
|
||||||
| 파라미터 | 타입 | 필수 | 설명 |
|
|
||||||
|---------|------|------|------|
|
|
||||||
| limit | int | 선택 | 최대 결과 수 (기본 10) |
|
|
||||||
| query | string | 선택 | 검색 쿼리 |
|
|
||||||
| provider | string | 선택 | "gmail" (기본) |
|
|
||||||
|
|
||||||
user_id는 executor가 자동 주입. 슬롯에 포함 불필요.
|
|
||||||
|
|
||||||
### 이메일 요약
|
|
||||||
|
|
||||||
POST /process
|
|
||||||
|
|
||||||
## 환경변수
|
## 환경변수
|
||||||
|
|
||||||
|
|||||||
@ -28,33 +28,8 @@ runtime:
|
|||||||
|
|
||||||
## API
|
## API
|
||||||
|
|
||||||
### 뉴스 검색
|
- `POST /api/news/search` - 뉴스 검색
|
||||||
|
- `POST /api/news/summarize` - 뉴스 요약
|
||||||
POST /api/news/search
|
|
||||||
|
|
||||||
| 파라미터 | 타입 | 필수 | 설명 |
|
|
||||||
|---------|------|------|------|
|
|
||||||
| keywords | List[str] | 필수 | 검색 키워드 |
|
|
||||||
| max_items | int | 선택 | 최대 수집 수 (기본 20) |
|
|
||||||
| days_back | int | 선택 | 검색 기간 (기본 7일) |
|
|
||||||
| format | string | 선택 | 응답 형식: "json" (기본) 또는 "slack" |
|
|
||||||
|
|
||||||
### 뉴스 요약
|
|
||||||
|
|
||||||
POST /api/news/summarize
|
|
||||||
|
|
||||||
| 파라미터 | 타입 | 필수 | 설명 |
|
|
||||||
|---------|------|------|------|
|
|
||||||
| article_id | string | 필수 | 기사 ID |
|
|
||||||
| style | string | 선택 | 요약 스타일 |
|
|
||||||
|
|
||||||
### 최신 뉴스 조회
|
|
||||||
|
|
||||||
GET /api/news/latest
|
|
||||||
|
|
||||||
| 파라미터 | 타입 | 필수 | 설명 |
|
|
||||||
|---------|------|------|------|
|
|
||||||
| limit | int | 선택 | 조회 수 (기본 20) |
|
|
||||||
|
|
||||||
## 환경변수
|
## 환경변수
|
||||||
|
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
---
|
---
|
||||||
name: web_search
|
name: web-search
|
||||||
description: 실시간 웹 검색. 지역별 날씨·기온·강수·기상 예보·미세먼지·초미세먼지·황사·대기 질 등 공개 기상 정보, 주가, 환율, 시세, 뉴스, 회사/기술/제품 정보 등 인터넷에서 찾아야 하는 실시간 정보 요청에 사용합니다. Company X 내부 문서 근거(companyx-rag)가 아닌 일반 기상·환경 질의는 항상 여기에 해당합니다. 검색 전에는 사용자 의미를 보존한 검색 주제와 실제 검색 엔진용 최적화 쿼리를 구분하고, 정정 신호와 보호 표현을 반영해야 합니다.
|
description: 실시간 웹 검색. 지역별 날씨·기온·강수·기상 예보·미세먼지·초미세먼지·황사·대기 질 등 공개 기상 정보, 주가, 환율, 시세, 뉴스, 회사/기술/제품 정보 등 인터넷에서 찾아야 하는 실시간 정보 요청에 사용합니다. Company X 내부 문서 근거(companyx-rag)가 아닌 일반 기상·환경 질의는 항상 여기에 해당합니다. 검색 전에는 사용자 의미를 보존한 검색 주제와 실제 검색 엔진용 최적화 쿼리를 구분하고, 정정 신호와 보호 표현을 반영해야 합니다.
|
||||||
runtime:
|
runtime:
|
||||||
handler: app.services.skills.handlers.web_search.handle
|
handler: app.services.skills.handlers.web_search.handle
|
||||||
|
|||||||
@ -1,114 +0,0 @@
|
|||||||
---
|
|
||||||
type: workflow
|
|
||||||
tags: [workflow, message-flow, rb8001, intent, skill, executor]
|
|
||||||
last_updated: 2026-04-03
|
|
||||||
upper_principle:
|
|
||||||
- /home/admin/0_VALUE/20_Governance/coding-principles.md
|
|
||||||
- /home/admin/0_VALUE/20_Governance/work-system-principle.md
|
|
||||||
---
|
|
||||||
|
|
||||||
# message_flow_v2 워크플로우
|
|
||||||
|
|
||||||
## 목적
|
|
||||||
|
|
||||||
사용자 발화가 로빙(rb8001)에 도착해서 응답으로 돌아가기까지의 전체 흐름. SKILL.md 기반 동적 라우팅(M0~M5 완료) 현행 기준. v1(message_service.py 1409줄, decide_skill_sequence, route_with_tools, tool_registry)은 전부 삭제됨.
|
|
||||||
|
|
||||||
## 흐름
|
|
||||||
|
|
||||||
```
|
|
||||||
사용자 발화 (Slack/웹)
|
|
||||||
→ [수신] message_endpoint — 채널 정규화, user_id 추출
|
|
||||||
→ [컨텍스트] 대화이력(DB 24h) + 감정상태 + 파일첨부 조립
|
|
||||||
→ [이해] IntentClassifier — SKILL.md 본문을 LLM에 주입, IntentResult(skill, action, slots) 반환
|
|
||||||
→ [실행] executor — registry에서 URL 해소, external=HTTP POST / internal=직접 호출
|
|
||||||
→ [응답] 결과 조립 → 채널 어댑터 → 사용자
|
|
||||||
```
|
|
||||||
|
|
||||||
## 단계별 상세
|
|
||||||
|
|
||||||
### 1. 수신
|
|
||||||
|
|
||||||
| 항목 | 내용 |
|
|
||||||
|------|------|
|
|
||||||
| 진입점 | `app/router/message_endpoint.py` |
|
|
||||||
| 입력 | message, user_id, channel, thread_ts, file_inputs |
|
|
||||||
| 책임 | 채널별 차이를 정규화하여 내부 형식으로 변환 |
|
|
||||||
|
|
||||||
### 2. 컨텍스트 조립
|
|
||||||
|
|
||||||
| 항목 | 내용 |
|
|
||||||
|------|------|
|
|
||||||
| 대화이력 | DB에서 최근 24h 대화 로드 (최근 5건) |
|
|
||||||
| 감정상태 | EmotionEngine 현재 상태 |
|
|
||||||
| 파일 | 첨부파일 요약 (있는 경우) |
|
|
||||||
| 현재시각 | Asia/Seoul 기준 주입 (요일 포함) |
|
|
||||||
|
|
||||||
### 3. 이해 (IntentClassifier)
|
|
||||||
|
|
||||||
| 항목 | 내용 |
|
|
||||||
|------|------|
|
|
||||||
| 코드 | `app/services/brain/intent_classifier.py` |
|
|
||||||
| SSOT | `DOCS/skills/*/SKILL.md` — 스킬 목록과 트리거 조건 |
|
|
||||||
| 입력 | 사용자 메시지 + 컨텍스트 |
|
|
||||||
| 출력 | `IntentResult(skill, action, endpoint, slots, confidence, reasoning)` |
|
|
||||||
| 방식 | SKILL.md 본문을 시스템 프롬프트에 주입 → LLM이 판단 → Pydantic 검증 |
|
|
||||||
| 실패 시 | 에러 raise. 폴백 없음 |
|
|
||||||
|
|
||||||
### 4. 실행 (executor)
|
|
||||||
|
|
||||||
| 항목 | 내용 |
|
|
||||||
|------|------|
|
|
||||||
| 코드 | `app/services/skills/executor.py` |
|
|
||||||
| URL 해소 | `registry.py`가 SKILL.md의 `runtime.service_url_env`를 읽어 환경변수에서 URL 해소 |
|
|
||||||
| external_http | `httpx.AsyncClient`로 스킬 서비스에 POST |
|
|
||||||
| internal_python | 내부 handler 함수 직접 호출 |
|
|
||||||
| 미등록 스킬 | `{"success": false, "error": "미등록"}` 반환 |
|
|
||||||
|
|
||||||
### 5. 응답
|
|
||||||
|
|
||||||
| 항목 | 내용 |
|
|
||||||
|------|------|
|
|
||||||
| 결과 조립 | executor 결과를 사용자 메시지로 변환 |
|
|
||||||
| 채널 전달 | Slack reply / 웹 응답 |
|
|
||||||
|
|
||||||
## 스킬 참여 예시
|
|
||||||
|
|
||||||
| 사용자 발화 | skill | action | 실행 |
|
|
||||||
|------------|-------|--------|------|
|
|
||||||
| "내일 2시 미팅 잡아줘" | skill-calendar | create_event | POST SKILL_CALENDAR_URL/api/events |
|
|
||||||
| "메일 확인해줘" | skill-email | fetch | POST SKILL_EMAIL_URL/api/emails |
|
|
||||||
| "로빙아 안녕" | general_chat | chat | 내부 LLM 호출 |
|
|
||||||
| "삼성전자 뉴스 검색" | web-search | web_search | 내부 웹검색 호출 |
|
|
||||||
|
|
||||||
## 코드에 분기문 없음
|
|
||||||
|
|
||||||
- 스킬 추가 시 `DOCS/skills/{name}/SKILL.md` 1개 + `runtime.env` URL 1개만 추가
|
|
||||||
- if/elif 매핑표, IntentType→skill 변환 계층 없음
|
|
||||||
- 근거: coding-principles §질문별 특례 하드코딩 금지, §식별자 변환 계층 금지
|
|
||||||
|
|
||||||
## M0~M5 완료로 삭제된 v1 코드
|
|
||||||
|
|
||||||
| 삭제 대상 | 줄 수 | 이유 |
|
|
||||||
|-----------|-------|------|
|
|
||||||
| message_service.py | 1409 | v2(137줄)로 완전 대체 |
|
|
||||||
| decision_engine.decide_skill_sequence + create_execution_plan + route_with_tools | 571 | v2에서 미사용 |
|
|
||||||
| tool_registry.py | 775 | route_with_tools 전용, import 0건 |
|
|
||||||
| brain_service.py | 158 | import 0건 |
|
|
||||||
| v1 전용 테스트 5파일 | ~1100 | 삭제된 코드 테스트 |
|
|
||||||
|
|
||||||
## 아직 남아있는 v1 잔재 (의존 살아있음)
|
|
||||||
|
|
||||||
| 코드 | 이유 |
|
|
||||||
|------|------|
|
|
||||||
| DecisionEngine.classify(), analyze_intent_async() | slack_handler 파일 컨텍스트 주입, intent_classifier 폴백 |
|
|
||||||
| IntentType enum | slack_handler, slack/message_service 분기 |
|
|
||||||
| intent_graph, semantic_classifier, skill_doc_loader | router 초기화 체인 |
|
|
||||||
|
|
||||||
이들은 Slack 경로가 v2로 완전 전환되면 삭제 가능.
|
|
||||||
|
|
||||||
## 관련 문서
|
|
||||||
|
|
||||||
- [slack_basic_dialogue.md](./slack_basic_dialogue.md) — v1 (n8n + decision_engine 경로, 레거시)
|
|
||||||
- [work-system-principle.md](/home/admin/0_VALUE/20_Governance/work-system-principle.md) — 스킬과 워크플로우 구분
|
|
||||||
- [coding-principles.md](/home/admin/0_VALUE/20_Governance/coding-principles.md) — 입력→판단→출력 3단계 분리
|
|
||||||
- [로빙_smoke_test_워크플로우.md](/mnt/nas/workspace/shared-editing/workflows/로빙_smoke_test_워크플로우.md) — 배포 후 검증 절차
|
|
||||||
Loading…
x
Reference in New Issue
Block a user