> 핵심 메시지: "챗봇이 아니라, 살아있는 AI 파트너를 만들었다."
> 💡 미리 알아둘 말
> - 텔레그램 = 카카오톡처럼 쓰는 메신저 앱. 봇(자동응답 계정)을 만들기 쉬워서 개발자들이 많이 씀
> - 헤르메스(Hermes) = 볼트 봇이 어떻게 생각하고 행동할지 정 해주는 AI 시스템 (두뇌 역할)
> - 볼트(VOLT) = 헤르메스를 입고 텔레그램에서 움직이는 에너지 토끼 AI 🐰⚡
> - 라우팅 = 어떤 봇에게 일을 넘길지 자동으로 결정하는 것
> - 프롬프트 = AI에게 역할과 행동 방식을 설명해주는 설명서
---
## 0. 한 줄 요약
> 텔레그램에 "볼트" 라는 AI 비서 봇을 만들었다.
> 그냥 말만 걸면 → 볼트가 알아서 어떤 일인지 판단하고 → 맞는 담당봇에게 넘긴다.
> 뒤에서 조용히 일하는 두뇌가 바로 헤르메스(Hermes) 시스템이다.
---
## 1. 왜 만들었나? (문제 인식)
You쌤은 드론 방과후 수업을 5개 학교에서 운영하고 있다.
매일매일 이런 일들이 생긴다:
| 상황 | 예전 방식 |
|------|----------|
| 수업 알림장 써야 할 때 | 직접 손으로 작성 |
| 블로그·콘텐츠 만들 때 | 따로 AI에게 요청 |
| 코드·자동화 물어볼 때 | 또 따로 챗GPT에 접속 |
| 새 아이디어 떠올랐을 때 | 어디에 물어봐야 할지 모름 |
문제: 하는 일마다 다른 도구, 다른 창을 열어야 한다. 번거롭다.
해결 아이디어: 텔레그램 하나로 "말만 하면 알아서 분류하고 처리해주는 AI 비서"를 만들자!
---
## 2. 볼트 AI 시스템 구조 (전체 그림)
```
📱 텔레그램에서 말을 건다
↓
⚡ 볼트 마스터 (총괄 입구)
@YD_W_Hermes_Main_Bot
↓ 자동 판단
┌────────────────────────────┐
│ 어떤 종류의 일인가? │
└────────────────────────────┘
↓ ↓ ↓
⚡ 볼트 클래스 🎨 볼트 스튜디오 🔧 볼트 랩
(수업·알림장) (콘텐츠·이미지) (코드·자동화)
```
> 비유로 이해하기:
> 회사 대표(볼트 마스터)한테 말하면 → 적절한 팀장(클래스/스튜디오/랩)에게 자동으로 연결해주는 구조!
### 각 봇의 역할
| 봇 이름 | 담당 업무 | 텔레그램 계정 |
|---------|----------|--------------|
| ⚡ 볼트 마스터 | 입구·총괄·라우팅 | @YD_W_Hermes_Main_Bot |
| ⚡ 볼트 클래스 | 수업·알림장·일정·퀴즈 | @W_Hermers_Volt_Class_Bot |
| 🎨 볼트 스튜디오 | 창작·블로그·이미지·콘텐츠 | @W_Hermers_Volt_Studio_Bot |
| 🔧 볼트 랩 | 코드·자동화·API·캘린더 | @W_Hermes_Lab_Bot |
---
## 3. 헤르메스(Hermes)란 무엇인가? 🧠
> 한 줄 설명: 볼트가 어떻게 생각하고, 말하고, 행동할지 정해주는 "두뇌 설명서"
### 초보자를 위한 비유
| 비유 | 실제 |
|------|------|
| 배우의 대본 | 볼트가 어떻게 말할지 |
| 직원 교육 매뉴얼 | 어떤 상황에서 어떻게 반응할지 |
| 회사 조직도 | 어느 봇에게 일을 넘길지 |
### 헤르메스 파일이 담고 있는 것 (HERMES.md)
```
📄 HERMES.md 안에는...
1. 볼트의 정체성
→ "나는 에너지 토끼 볼트다. 상상력을 전기로 바꾼다."
2. 말투와 태도
→ "존 댓말 + 이모지 + 친근한 Gen Z 감각으로 말한다"
3. 라우팅 규칙
→ "알림장·수업 → 클래스봇 / 블로그·이미지 → 스튜디오봇 / 코드 → 랩봇"
4. 금지사항
→ "요청 없이 길게 설명하지 않는다. 캐릭터 설정 무시하지 않는다."
5. 학교 데이터
→ "호암초(화), 가야초(목), 장복초(금)"
```
---
## 4. 텔레그램 봇이 만들어지는 과정 (단계별)
### 🐣 STEP 1: 텔레그램에서 봇 계정 만들기
```
1. 텔레그램 앱 열기
2. 검색창에 @BotFather 입력
3. /newbot 입력
4. 봇 이름 정하기 (예: 볼트 마스터)
5. 토큰(비밀번호) 발급 받기
→ 예시: 7123456789:AAHxxxxxxxxxxxxxxxx
```
> 💡 토큰이란? 봇의 "열쇠" 같은 것. 이 번호가 있어야 봇을 제어할 수 있음.
---
### 🧠 STEP 2: 헤르메스(두뇌)와 연결하기
핵심 코드 (bot.py) — 초보자용 설명 포함
```python
# ① 환경 설정: 봇의 토큰과 AI 키를 불러온다
TELEGRAM_TOKEN = os.getenv("VOLT_MASTER_TOKEN") # 텔레그램 봇 열쇠
# ② 헤르메스 파일을 두뇌로 장착!
BASEPROMPT = Path("HERMES.md").read_text() # HERMES.md = 볼트의 두뇌 설명서
SYSTEM_PROMPT = BASEPROMPT + ROUTINGPROTOCOL # + 라우팅 규칙까지 추가
# ③ AI 엔진 연결 (Google Gemini 사용)
client = genai.Client(api_key=os.getenv("GEMINI_API_KEY"))
MODEL = "gemini-2.5-flash"
```
> 쉬운 설명: HERMES.md 파일을 통째로 Gemini AI에게 주면서
> "이게 너의 역할이야, 이렇게 행동해"라고 알려주는 것!
---
### 🔀 STEP 3: 자동 라우팅 (핵심 기능!)
> 💡 라우팅이란? 메시지를 받아서 어느 봇에게 넘길지 자동으로 결정하는 것
실제 동작 예시:
```
You쌤: "오늘 알림장 써줘"
↓
볼트 마스터: (수업 관련이네!) → 볼트 클래스로 처리
볼트 마스터: "⚡ 볼트 클래스 ON! 알림장 작성할게요!"
You쌤: "볼트 캐릭터 이미지 만들어줘"
↓
볼트 마스터: (이미지 요청이네!) → 볼트 스튜디오로 안내
볼트 마스터: "🎨 이건 볼트 스튜디오에서 하면 이미지 바로 뽑아줘요!
@W_Hermers_Volt_Studio_Bot 으로 이동해봐요 ⚡"
You쌤: "자동화 코드 짜줘"
↓
볼트 마스터: (코드 요청이네!) → 볼트 랩으로 안내
볼트 마스터: "🔧 이건 볼트 랩에서 캘린더 직접 등록까지 돼요!
@W_Hermes_Lab_Bot 으로 이동해봐요 ⚡"
```
이 판단이 어떻게 가능할까? (라우팅 코드)
```python
# AI가 응답할 때 [ROUTE_TO] 태그를 포함시킨다
# 예: [ROUTE_TO]{"bot": "class"}[/ROUTE_TO]
ROUTE_PATTERN = re.compile(r"\[ROUTE_TO\]\s*(.*?)\s*\[/ROUTE_TO\]", re.DOTALL)
match = ROUTE_PATTERN.search(raw) # 태그가 있으면
if match:
bot_key = route_data.get("bot", "") # 어느 봇인지 확인
await forward_to_subbot(cfg["token"], chat_id, user_msg, cfg["name"])
# → 해당 봇에 메시지를 자동으로 전달!
```
> 쉬운 설명: AI가 대답 안에 "이건 클래스봇 일이야 [ROUTE_TO]{"bot":"class"}[/ROUTE_TO]"라는
> 비밀 태그를 넣으면, 봇이 그걸 읽고 자동으로 전달하는 구조!
---
### 🔧 STEP 4: 프로필 설정으로 봇 3개 관리
각 봇마다 별도의 설정 파일로 관리:
```
📁 C:\Users\NAOS-02\AppData\Local\hermes\profiles\
├── lab\
│ ├── .env ← 봇 토큰, API 키 (비밀 정보)
│ └── config.yaml ← 봇 동작 설정
├── volt-studio\
│ ├── .env
│ └── config.yaml
└── volt-class\
├── .env
└── config.yaml
```
봇 시작 명령어:
```bash
lab gateway start # 볼트 랩 봇 시작
volt-studio gateway start # 볼트 스튜디오 봇 시작
volt-class gateway start # 볼트 클래스 봇 시작
```
> 💡 보안 설정: redact_secrets: true — 실수로 토큰이 채팅에 노출되지 않도록 자동 가림
---
## 5. 실제로 어떻게 동작하나? (데모)
### 수업 관련 요청
```
You쌤: "