이것은 GitHub Finish-Up-A-Thon Challenge
의 제출물입니다. 제가 만든 것
디지털 비서는 Windows PC에서 실행되는 프라이버시 우선 개인형 AI 비서로, Telegram을 통해 대화합니다. 클라우드 구독은 없습니다. Docker도 없습니다. 당신의 컴퓨터에서 데이터가 빠져나가지 않습니다. 당신이 선택하지 않는 한.
메시지를 보내시면 → 컴퓨터가 처리하면 → 지능적이고 메모리를 인지하는 답장을 받으십니다. 음성 입력, 음성 출력. 파일, 웹 검색, 알림, OCR - 모두 Telegram에서.
GitHub: github.com/sree1959git/Digital-Secretary
데모
설정 마법사
상호작용 마법사는 3분 미만으로 완료됩니다:
____ _ _ _ _ ____ _
| _ \(_) __ _(_) |_ __ _| | / ___| ___ ___ _ __ ___| |_ __ _ _ __ _ _
| | | | |/ _` | | __/ _` | | \___ \ / _ \/ __| '__/ _ \ __/ _` | '__| | | |
| |_| | | (_| | | || (_| | | ___) | __/ (__| | | __/ || (_| | | | |_| |
|____/|_|\__, |_|\__\__,_|_| |____/ \___|\___| _| \___| \__\__,_|_| \__, |
|___/ |___/
Your personal AI secretary. On Telegram. On Windows.
Step 1: Telegram Bot Token
Step 2: OpenRouter API Key
Step 3: Default AI Model
Step 4: Name Your AI Secretary
Step 5: Personality
봇이 작동 중
You: Remind me to call the dentist tomorrow at 10am
Digital Secretary: Done! I've set a reminder for tomorrow at 10:00 AM: "Call the dentist".
I'll message you here on Telegram when it's time.
You: [sends photo of whiteboard]
Digital Secretary: I can see a whiteboard with what appears to be a sprint plan.
The items listed are: [extracted text from OCR + vision analysis]
You: [voice message] "What did we discuss last week about the project?"
Digital Secretary: [voice reply] Based on our previous conversations, we talked about...
아키텍처 한눈에
Telegram (Your Phone)
│
▼
Digital Secretary (Windows PC)
│
├── 🧠 AI: OpenRouter / Ollama / llama.cpp
├── 💾 Memory: SQLite FTS5 (persistent, searchable)
├── 🛠️ Tools: files, shell, web, OCR, MCP servers
├── 📅 Scheduler: APScheduler-backed reminders
├── 🎙️ STT: faster-whisper (local Whisper)
└── 🔊 TTS: edge-tts (Microsoft neural voices)
복귀 이야기
시작 장소 (이전)
6개월 전에, 저는 이 프로젝트의 첫 버전을 만들었습니다 — 당시에는 Antidote라고 불렸습니다 — 주말 실험으로서. 아이디어는 간단했습니다: 저는 개인 AI 보조원을 원했는데:
- 월간 구독이 필요 없는
- 내 Windows PC에서 실행되는
- Telegram(폰에 이미 있던 앱)을 사용하는
3일 안에 작동하는 프로토타입을 만들었어요. 하지만 그때 삶이 일어났어요. 프로젝트는 그저 그렇게 있었어요 — 기능은 있지만 거칠었어요:
- 설정 파일에 깔끔하게 코딩된 경로 (
C:/Users/Sreedhar/...) - 봇은 질문에 답했지만 재시작 사이에는 모든 것을 잊어버렸어요
- 음성 지원이 전혀 없었어요
- 단 하나의 파이썬 파일이 1,000줄까지 자라났어요
- 문서화 없음 — 나 자신이 설정을 어떻게 해야 하는지조차 기억할 수 없었어
나는 CODE_REVIEW_REPORT.md에서 무자비하게 솔직하게 모든 것을 문서화했다__:
"설정 파일에는 개인 경로가 하드코딩되어 있어... 메모리는 세션마다만 유지된다... OcrImageTool은 Telegram 채널에 등록되어 있지만 주요 도구 등록에 없다... 자동 시작 작업 이름은 wizard.py와 autostart.py 사이에서 일관성이 없다..."
내가 바꾼 것 (이후)
이 챌린지를 다시 시작할 때, 이를 고객의 코드베이스를 처음 접하는 것처럼 다루었습니다. 변화된 점은 다음과 같습니다:
아키텍처 개선:
- 모노리틱을 올바른 패키지 구조로 분리:
agent/,channels/,memory/,providers/,security/tools/ - SQLite FTS5로
MemoryStore를 추가했습니다 — 이제 봇이 세션 간에도 당신을 기억할 수 있습니다 -
ContextBuilder를 도입했습니다. 이는 정체성 파일(SOUL.md,AGENTS.md,USER.md)에서 시스템 프롬프트를 조합합니다 - OpenAI 호환 함수 정의를 사용하여 올바른
ToolRegistry를 만들었습니다
새로운 기능이 추가되었습니다:
- 🎙️음성 입력/출력 — Whisper (지역 STT) + Edge-TTS 신경 목소리 (3단계 목소리 시스템)
- 📅 스케줄러 — "매일 3시에 일어나서 스트레칭하기를 알려줘요"
- 🖼️ 시각 + OCR — 사진을 보내면 텍스트가 추출되고 이미지가 설명됩니다
- 🔌 MCP 브릿지 — 모든 모델 컨텍스트 프로토콜 서버에 연결하세요
- 🔐 하드웨어 결합 암호화 — 비밀 정보는 Windows UUID에 대한 Fernet 키로 저장됩니다
질의 삶:
- 인터랙티브 설정 마법사 (더 이상 수동 JSON 편집이 필요 없음)
- Windows Task Scheduler를 통해 자동 시작
- Ctrl+C / SIGTERM에 대한 올바른 부드러운 종료
- 단락 경계에서 응답을 분할하세요 (단어 중간 Telegram 잘림 없음)
-
/model명령어를 사용하여 대화 중 AI 모델 전환
브랜드 변경:
-
Antidote에서Digital Secretary으로 변경됨 — 새로운 이름은 실제로 하는 일을 더 잘 반영합니다: 이것은 당신의 개인 비서이지 "AI"만은 아닙니다 - 새로운 CLI:
digital_secretary및digital_secretary setup
GitHub Copilot과의 경험
GitHub Copilot (via Antigravity IDE)는 이번 부활 기간 동안 진정으로 귀중했습니다. 가장 큰 차이를 만든 구체적인 순간들이 있습니다:
1. 음성 파이프라인 설계
3계층 음성 응답 시스템이 가장 어려운 설계 과제였습니다:
- 레벨 1: "그것을 읽어보세요" → 마지막 응답의 TTS 재생, LLM 호출 없음
- 티어 2: "이것을 설명해" → LLM이 자연스러운 말투로 다시 설명합니다
- 티어 3: 기본 음성 질의 → LLM이 음성용으로 응답을 요약합니다
영어로 문제를 설명했고, Copilot이 상태 기계를 그리고 초기 _is_readout_request() /_is_explain_request() 패턴 매칭. 엣지 케이스를 고려해보는 데 한 시간이 걸렸을 일이 몇 분 안에 구상되었습니다.
2. 하드웨어 결합 암호화
# Copilot suggested this elegant approach for Windows-specific key derivation
def _derive_key(uuid_bytes: bytes) -> bytes:
return hashlib.pbkdf2_hmac(
"sha256",
uuid_bytes,
salt=b"digital_secretary_v1",
iterations=480_000,
)
PBKDF2를 원시 HMAC보다 높은 반복 횟수로 사용해야 한다는 것을 인지했고, OWASP가 2024년에 제안한 특정 반복 횟수(480K)를 제안했습니다.
3. SQLite FTS5 메모리 검색
FTS5를 이전에 사용해보지 못했습니다. Copilot이 스키마 마이그레이션을 작성하고, MATCH 쿼리를 작성했으며, 왜 rank가 적절한 관련성 순서를 위해 부정되어야 하는지 설명해주었습니다. 이 과정에서 새로운 것을 배웠습니다.
4. Windows 신호 처리 버그
# This pattern only works on Unix:
loop.add_signal_handler(signal.SIGTERM, callback)
# Copilot caught this and suggested the Windows-compatible approach:
signal.signal(signal.SIGTERM, _signal_handler)
코드 리뷰 패스에서 플랫폼 호환성 문제를 발견했습니다 — 사용자가 보고해주지 않았다면 발견하지 못했을 수 있는 일입니다.
사용 사례
디지털 비서는 개인 AI를 원하는 사람들을 위해 설계되었습니다:
| 시나리오 | 당신이 하는 일 | 그것이 하는 일 |
|---|---|---|
| 개인 비서 | "우리 쇼핑 목록에 우유를 추가하세요" | 메모리에 저장되어, 요청할 때 검색됩니다 |
| 일일 요약 | 8시에 예약된 메시지 | 잊을 것들을 요약해 보내줍니다 |
| 문서 리더 | PDF 사진을 보내기 | OCR + AI 요약 |
| 코드 도우미 | 오류를 붙여넣고 수정을 요청합니다 | 웹 검색, 파일 읽기, 해결책 제안 |
| 회의 메모 | 음성으로 핵심 내용 기록 | 감지 및 메모리에 저장 |
| 가족 비서 | 공유 알림 | 가족 구성원 모두를 위한 작업 일정 설정 |
| 연구 보조원 | "X에 대한 최근 논문 찾기" | 웹 검색 및 요약 |
| 오프라인 AI | 로컬 llama.cpp 설정 | 클라우드 없이, 인터넷 없이 필요 없음 |
기술 아키텍처 강조 사항
지속 가능한 메모리
# Search semantic memory with FTS5
results = await memory.search("dentist appointment", limit=5)
# Returns: [Memory(content="User mentioned dentist on Tuesday...", category="fact")]
모든 대화는 요약되어 저장됩니다. 다음에 관련 질문을 하면 관련 기억이 시스템 프롬프트에 자동으로 주입됩니다.
도구 사용 예시
"내일 날씨는 어떠할까요?"라고 질문하면 LLM:
- 호출을 결정합니다.
web_search("weather tomorrow [your city]") - 결과를 받습니다.
- 상세 예보를 위해
fetch_webpage(url)를 호출합니다 - 자연어 응답을 생성합니다
모든 것이 하나의 Telegram 교환에서
다중 공급자 AI
# Switch between providers transparently
provider = get_provider() # reads config, returns right provider
# All providers implement the same interface
response = await provider.chat(messages=messages, tools=tool_defs)
OpenRouter (100개 이상의 모델), Ollama (로컬), llama.cpp (극도로 로컬, GPU 또는 CPU)와 함께 작동합니다.
시작하기
git clone https://github.com/sree1959git/Digital-Secretary.git
cd Digital-Secretary
.\start.ps1
발로더는 모든 것을 처리합니다 — 파이썬 버전 확인, venv 생성, 의존성 설치 및 마법사 시작
전체 설치 가이드: TELEGRAM_BOT_SETUP.md
다음 단계
프로젝트 로드맵은 아직 해야 할 일을 솔직하게 밝힙니다:
-
다중 에이전트 라우팅 — 분리
/finance,/health,/work범위 제한 메모리를 가진 하위 에이전트 - 승인 워크플로우 — 파일 쓰기와 셸 명령어를 승인하는 Telegram 인라인 버튼
- 지속 가능한 대화 이력 — 모든 턴을 영구 저장, 요약만은 아님
- 웹 UI — 메모리 검토, 알림 관리, 모델 전환을 위한 대시보드
이 도전은 바로 이 책상 위에 두고 있던 것을 멈추기 위해 필요했던 힘입니다.
이것을 시도해 보시면, 댓글에 어떻게 생각하는지 알려주세요. 👇
태그: #devchallenge #githubchallenge #python #telegram #ai #windows #opensource












