한 문장 소개: ChatGPT/Claude 웹에서 "탈출"해서, 전체 AI 작업대를 내 PC(자체 머신)에 통째로 설치해 쓰고 싶나요? 이 글은 Odysseus로 — 로컬 우선 + 프라이버시 우선 — ChatGPT를 대체하는 자체호스팅 도구를 실제로 끝까지 굴려보게 해줍니다.
프로젝트 소개
Odysseus 는 자체호스팅 AI 작업대(Self-hosted AI Workspace) 로, GitHub 사용자 pewdiepie-archdaemon 가 MIT 라이선스로 공개한 오픈소스입니다. 이 프로젝트가 하려는 일은 이겁니다: 내 PC에서 ChatGPT/Claude 같은 UI 경험을 그대로 누리되, 모든 데이터·모든 대화·모든 도구 호출은 전부 로컬에 남기기.
기존의 전형적인 ChatGPT 유사 앱과 비교하면 차이가 꽤 선명합니다.
- 채팅: 어떤 로컬 또는 원격 모델이든 연결 (vLLM / llama.cpp / Ollama / OpenRouter / OpenAI / GitHub Copilot)
- 에이전트(Agent): 정말로 "손을 써주는" 에이전트. MCP / Web / 파일 / Shell / Skills / 기억(기억은 opencode 기반)
- Cookbook: 머신 하드웨어를 자동 스캔해 실행 가능한 모델을 추천. 한 번에 다운로드 + 모델 서비스 실행 (VRAM-aware, llmfit 기반)
- Deep Research: 다단계 리서치로 웹/자료를 가져오고 읽고 종합해, 시각화된 리포트를 생성 (개조: Tongyi DeepResearch)
- Compare: 여러 모델을 블라인드로 테스트 비교해서, 편견 없이 진짜 잘 되는 하나를 뽑아줌
- Documents: 당신이 글을 쓰면 AI가 옆에서 돕고, 그 반대가 아님
- Memory / Skills: 장기 기억 + 스킬 시스템. 에이전트를 쓸수록 당신을 더 잘 이해함 (ChromaDB + fastembed ONNX)
- Email: IMAP/SMTP 인박스. AI가 자동 분류, 요약, 초안 답장, 스팸 방지
- Notes & Tasks / Calendar: 노트 + 작업 + 캘린더. CalDAV 동기화 (Radicale / Nextcloud / Apple / Fastmail)
- PWA 지원: 스마트폰에서도 데스크톱만큼 편한 사용 경험. 홈 화면에 설치 가능
한 문장으로: 이건 채팅창 하나가 아니라, 당신의 AI 작업 환경 전체이고, 전부 로컬에 있고 클라우드에 올리지 않습니다.
난이도 / 소요 시간 / 얻는 것
- 난이도: ⭐⭐⭐ (중간 수준 — Docker/Python 기초를 알면 좋음)
- 소요 시간: 30–45분 (Docker 방식); 1시간 (네이티브 설치 + 로컬 모델 연결)
- 얻는 것:
- 기능이 완비된 자체호스팅 AI 작업대 한 세트를 끝까지 구축
- 로컬 우선형 AI 앱의 대표적인 아키텍처 이해 (FastAPI + ChromaDB + SearXNG + ntfy)
- Ollama/vLLM/OpenAI 호환 API를 한 화면에 전부 연결
- Cookbook의 자동 모델 선택, GPU 패스스루, 기억 시스템 같은 "롱테일"이지만 정말 만족스러운 기능 이해
대상 독자(페르소나)
- ChatGPT Plus / Claude Pro 구독을 더 이상 내고 싶지 않고, AI 데이터를 로컬에 두고 싶은 사람
- NUC/워크스테이션/서버에서 8G/16G/24G VRAM 모델을 돌리고 싶지만, 통합된 인터페이스가 필요했던 사람
- 풀스택/독립 개발자: 채팅/메일/캘린더/에이전트 작업을 한 패널로 합치고 싶은 사람
- "자체호스팅"에 관심 있는 운영/플랫폼 엔지니어: 프로덕션급 FastAPI 앱의 엔지니어링 레퍼런스를 보고 싶은 사람
- 클라우드 LLM에 이미 돈을 써봤고, 조금 덜 아프게 이어가는 방법을 찾는 사람
가벼운 채팅 UI만 원한다면 Odysseus가 꼭 맞진 않을 수 있습니다. 기능이 많아 Open WebUI보다 시작 장벽이 조금 더 있지만, 그 대신 메일/기억/Cookbook/에이전트까지 한 세트로 얻습니다.
핵심 의존성과 환경
최소 권장 사양:
| 항목 | 요구 |
|---|---|
| Python | 3.11+ |
| 메모리 | 2 GB (Web UI만) / 8 GB+ (로컬 모델 실행) |
| 디스크 | 5 GB (시스템 + 의존성) / 50 GB+ (여러 GGUF 모델) |
| Docker | 20.10+ (Docker Compose v2 권장) |
| 운영체제 | Linux / macOS / Windows (WSL2 포함) |
선택 / 향상 의존성:
| 항목 | 용도 |
|---|---|
| Ollama | 가장 쉬운 로컬 모델 (Windows 친화적) |
| vLLM / llama.cpp | 고성능 로컬 추론 (NVIDIA/AMD GPU 필요) |
| NVIDIA Container Toolkit | Docker에서 GPU 사용 |
| Git for Windows | Windows에서 Cookbook 백그라운드 다운로드/실행 |
| Tailscale + mkcert | 사설망/HTTPS로 안전하게 노출 |
TIP
GPU 만지기 귀찮으면 Ollama + 임의의 OpenAI 호환 API 두 발로 가세요. 5분이면 바로 쓸 수 있습니다. GPU는 "가산점"이지 "필수 조건"이 아닙니다.
전체 프로젝트 구조 트리
odysseus/
├── app.py # FastAPI 엔트리
├── setup.py # 초기화 스크립트 (admin / 데이터베이스 / 디렉터리 생성)
├── requirements.txt # 핵심 Python 의존성
├── requirements-optional.txt # 선택 의존성 (PDF/Office/음성/STT)
├── docker-compose.yml # 기본 오케스트레이션 (CPU)
├── docker-compose.gpu-nvidia.yml # NVIDIA GPU 오버레이
├── docker-compose.gpu-amd.yml # AMD ROCm 오버레이
├── Dockerfile
├── core/ # 인프라 계층
│ ├── auth.py # 인증 / 세션
│ ├── database.py # SQLAlchemy 초기화
│ ├── middleware.py
│ ├── constants.py
│ └── atomic_io.py
├── src/ # 비즈니스 로직 계층
│ ├── llm_core.py # 대규모 모델 추상화
│ ├── agent_loop.py # 에이전트 루프
│ ├── agent_tools.py # 에이전트 도구셋
│ ├── chat_processor.py # 채팅 처리
│ ├── cookbook_serve_lifecycle.py # Cookbook 모델 서비스 라이프사이클
│ ├── memory_vector.py # ChromaDB 장기 기억
│ ├── deep_research.py # 딥 리서치
│ └── ...
├── routes/ # FastAPI 라우트 (40+ 모듈)
│ ├── chat_routes.py
│ ├── agent_routes.py
│ ├── cookbook_routes.py # 모델 추천/다운로드
│ ├── memory_routes.py
│ ├── email_routes.py
│ ├── calendar_routes.py
│ └── ...
├── services/ # 백엔드 서비스
│ ├── docs/ # 문서 처리
│ ├── hwfit/ # 하드웨어 스캔 (Cookbook)
│ ├── memory/ # 기억 서비스
│ ├── research/ # 리서치 서비스
│ ├── search/ # 검색
│ ├── stt/ tts/ # 음성→텍스트 / 텍스트→음성
│ └── shell/ # Shell 도구
├── static/ # 프론트엔드 (index.html + JS/CSS)
├── docs/ # 문서 사이트 + 스크린샷 + 데모
├── config/ # SearXNG 등 서브서비스 설정
├── companion/ # 데스크톱 동반 앱 (macOS)
└── data/ # 사용자 데이터 (gitignored, 런타임 생성)
├── app.db # SQLite
├── chroma/ # 벡터 DB
├── uploads/
├── personal_docs/
└── huggingface/ # 모델 캐시
폴더 안에서는 app.py / docker-compose.yml / .env 세 파일만 신경 쓰면 됩니다. 나머지는 Docker가 대신 처리해줘요.
단계별로 따라하기
1단계: 저장소 클론
git clone https://github.com/pewdiepie-archdaemon/odysseus.git
cd odysseus
WARNING
저장소의 dev 브랜치가 최신이지만 불안정할 수 있습니다. 운영용이라면 main 브랜치로 바꾸는 것을 권장합니다: git checkout main. 아래 내용은 dev로 한 번 쭉 진행합니다.
2단계: .env 준비 (선택이지만 권장)
cp .env.example .env
가장 최소로 쓸 수 있는 .env는 대략 이런 형태입니다:
# === LLM 연결 지점 ===
LLM_HOST=localhost
# 클라우드 API를 쓰려면 컨테이너에서 host.docker.internal로 로컬 Ollama 접근
OLLAMA_BASE_URL=http://host.docker.internal:11434/v1
# === 포트 및 바인딩 ===
APP_BIND=127.0.0.1
APP_PORT=7000
# === 보안 (중요!) ===
AUTH_ENABLED=true
LOCALHOST_BYPASS=false
SECURE_COOKIES=false # 리버스 프록시로 HTTPS를 쓸 때에만 true로 변경
ODYSSEUS_ADMIN_USER=admin
# ODYSSEUS_ADMIN_PASSWORD= # 안 쓰면 최초 시작 시 랜덤으로 생성 후 출력
# === 검색 (SearXNG) ===
SEARXNG_INSTANCE=http://searxng:8080
TIP
Ollama를 다른 호스트에서 접근: Ollama를 띄울 때는 loopback이 아니라 반드시 0.0.0.0 로 리슨해야 합니다.
OLLAMA_HOST=0.0.0.0:11434 ollama serve
그렇지 않으면 컨테이너의 host.docker.internal:11434 가 Ollama에 의해 거부됩니다.
3단계: 도커 원클릭 실행 (추천 경로)
docker compose up -d --build
빌드 과정에서 기본 이미지들을 내려받고 Python 의존성을 설치합니다. 처음엔 대략 3–5분 정도 걸립니다. odysseus / chromadb / searxng / ntfy 네 컨테이너가 모두 healthy / running 상태가 되면 끝입니다:
docker compose ps
http://localhost:7000 을 열면 첫 화면은 로그인 페이지입니다. 초기 admin 비밀번호 는 터미널 로그에 찍힙니다:
docker compose logs --tail=200 odysseus | grep -i "temporary\|admin\|password"
다음과 비슷하게 보일 겁니다:
[odysseus] Created admin user 'admin' with temporary password: aB3x-9pQz-2vRt
WARNING
이 임시 비밀번호는 첫 시작 때 딱 한 번만 출력됩니다. 받은 즉시 로그인하고, 바로 Settings → Account 에서 본인 비밀번호로 바꾸세요.
4단계: 서비스가 모두 정상(Healthy)인지 확인
# 1. 컨테이너 상태
docker compose ps
# 2. Odysseus 로그 확인 (첫 시작은 모델 로딩 때문에 지연이 있을 수 있음)
docker compose logs --tail=120 odysseus
# 3. ChromaDB가 정말 떠 있는지 (HTTP로 폴백된 게 아닌지)
docker compose logs odysseus | grep -E "ChromaDB|MemoryVectorStore|DEGRADED"
DEGRADED 가 보이면 보통 chromadb-client 와 chromadb 가 충돌한 경우입니다. 해결 방법은 아래의 "자주 겪는 문제"에서 확인하세요.
5단계: 첫 번째 모델 연결
메인 화면에서 Settings → Models / Providers 로 들어가, 본인 머신 상황에 맞춰 한 경로를 선택하세요.
경로 A: 이미 Ollama가 실행 중 (가장 쉬움)
Base URL: http://host.docker.internal:11434/v1
API Key: (빈칸 유지)
Model: qwen2.5:7b (또는 로컬에 있는 어떤 모델이든)
경로 B: Cookbook이 자동으로 다운로드 + 실행
Cookbook 으로 들어가면, GPU/VRAM을 스캔한 뒤 실행 가능한 오픈소스 모델을 추천합니다. 그리고 점수(피트 점수, fit score)를 매깁니다. 거기서 "Download" 를 누르면 huggingface-cli 가 ./data/huggingface/ 로 모델을 받아오고, 이후 llama.cpp / vLLM 로 바로 serve 합니다.
경로 C: 클라우드 API 접속 — 오늘 자세히 볼 부분
Odysseus의 Provider 설정은 프로토콜(규약) 기반입니다. 즉, v1/chat/completions 또는 v1/messages 두 엔드포인트 중, 어떤 서비스든 올바르게 응답만 한다면 Base URL을 채워 넣는 것만으로 바로 연결됩니다. OpenAI/Anthropic 공식뿐 아니라 자체 구축 게이트웨이, 제3자 중계도 모두 같은 방식입니다.
제 배포 구성에서 "일상적인 Agent 작업(코드 실행/긴 문서)" 은 클라우드 API를 쓰는 편인데, 이유는 두 가지입니다.
- 로컬 24G 그래픽카드로 70B 양자화도 이미 빠듯한데, Agent를 여러 단계로 돌리면 OOM(메모리 부족)이 자주 납니다.
- Claude/GPT 같은 최신 계열 모델은 복잡 추론에서 Qwen2.5-Coder보다 한 단계 더 강합니다.
그런데 문제가 있습니다 — 공식 API가 너무 비쌉니다. Claude Opus는 일주일 청구서가 가볍게 100달러를 넘기기도 해서, 개인 취미로 쓰면 Anyscale에 그냥 일하는 셈이 됩니다.
제가 찾은 해결책은 Defapi 를 연결하는 겁니다. 여기서는 v1/messages 호환 엔드포인트를 씁니다.
# Odysseus Settings → Custom Anthropic Provider
Base URL: https://api.defapi.org
API Key: sk-xxxxx # defapi.org 백오피스에서 받기
Model: anthropic/claude-sonnet-4.5 # 또는 haiku-4.5 / opus-4.6
설정 예시: Defapi Claude Sonnet 4.5 (프로그래밍/긴 문서의 메인), Claude Haiku 4.5 (일상 Agent 호출의 우선 선택, 저렴함).
실사용 결과로 보면, 동일한 대화/작업량 기준으로 매달 청구서가 Anthropic 공식에 연결했을 때보다 절반 이상 줄어듭니다. 게다가 모델 성능, Agent 도구 호출, 프롬프트 포맷 같은 건 차이가 전혀 없어요. 이유는 이게 프로토콜 계층의 프록시/대리 동작이기 때문이고, 모델 자체는 어차피 같은 것입니다. 이런 "프로토콜 기반" 설계는 Odysseus와 자연스럽게 잘 맞습니다.
TIP
Defapi를 쓰면 Odysseus 쪽은 코드 변경이 거의 없습니다. agent_tools.py의 도구 호출, 컨텍스트 관리 전부 그대로 두면 되고, Settings에서 "채팅"에는 Sonnet, "Deep Research"에는 Opus, "Agent 작업"에는 Haiku를 각각 Provider로 지정해 각각 독립적으로 과금되게 할 수도 있습니다. (zero-code)
경로 D: GitHub Copilot / OpenRouter 등 연결
이 두 가지도 OpenAI 프로토콜 호환이 됩니다. Base URL만 각각 https://api.githubcopilot.com / https://openrouter.ai/api/v1 로 넣으면 끝이라 여기서는 더 확장하지 않겠습니다.
6단계: 첫 채팅 + 첫 Agent 작업
메인 화면으로 돌아가 모델을 하나 고르고, 간단한 프롬프트로 연결 테스트를 해보세요.
세 문장으로 당신을 소개한 다음, 오늘 바로 쓸 수 있는 Linux 성능 문제 진단 체크리스트를 만들어 주세요.
이게 되면 LLM 경로가 정상 연결된 겁니다.
이제 에이전트 모드(Agent) 로 테스트: 새 세션을 만들고 "Agent" 로 전환한 뒤 아래처럼 입력합니다.
현재 디렉터리의 모든 .py 파일 행 수를 나열하고, 그중 어떤 파일이 가장 리팩토링 가치가 높은지 말해 주세요.
Agent는 스스로 계획합니다.
shell도구로find . -name "*.py" | xargs wc -l실행- 결과를 받아 판단
- 결론/권장사항 제시
이게 로컬 우선 Agent가 ChatGPT 웹과 완전히 다른 핵심입니다. 진짜로 손을 쓰고, 당신의 코드/파일/터미널에 접근할 권한이 생깁니다.
7단계 (선택): GPU 활성화
이 단계는 vLLM / SGLang / llama.cpp CUDA 같은 "무거운" 로컬 추론을 쓰려는 경우에만 필요합니다. Ollama나 클라우드 API만 쓴다면 이 단계는 건너뛰세요.
NVIDIA:
# 원클릭 진단
scripts/check-docker-gpu.sh
# NVIDIA Container Toolkit 설치 (Ubuntu/Debian, sudo 필요)
scripts/check-docker-gpu.sh --install-nvidia-toolkit
# GPU 패스스루가 성공한 뒤에만 overlay 활성화
scripts/check-docker-gpu.sh --enable-nvidia-overlay
# 검증
docker compose exec odysseus nvidia-smi -L
.env에 다음이 추가됩니다:
COMPOSE_FILE=docker-compose.yml:docker/gpu.nvidia.yml
AMD ROCm:
scripts/check-docker-amd-gpu.sh
# 출력된 RENDER_GID를 .env에 기록
COMPOSE_FILE=docker-compose.yml:docker/gpu.amd.yml
RENDER_GID=989
WARNING
GPU 패스스루 ≠ llama.cpp CUDA 설치 완료. 컨테이너 안의 nvidia-smi가 카드를 보인다는 건 장치 패스스루가 됐다는 뜻일 뿐입니다. llama.cpp 쪽에서는 cudart 와 CUDA Toolkit 런타임까지 필요합니다. 이건 Docker 레이어로 해결되는 문제가 아니라, Cookbook의 Dependencies 에서 "재설치"하는 단계에서 처리합니다. 로그에 Unable to find cudart library가 보이면 그 상태입니다.
8단계 (선택): Playwright MCP 활성화 (브라우저 에이전트)
Odysseus에는 몇 개의 MCP 서버가 기본 포함돼 있지만, 브라우저용은 먼저 npx로 하나 받아야 합니다.
npx -y @playwright/mcp@latest --version
Odysseus 컨테이너를 재시작하면, Agent 안에서 브라우저 MCP를 쓸 수 있습니다. (스크린샷, 네비게이션, 폼 입력 등)
https://news.ycombinator.com 을 열고, 앞의 10개 제목과 링크를 가져와서 5개의 핵심 주제로 요약해 주세요.
9단계 (선택): Windows에서 네이티브로 실행
git clone https://github.com/pewdiepie-archdaemon/odysseus.git
cd odysseus
powershell -ExecutionPolicy Bypass -File .\launch-windows.ps1
스크립트가 자동으로 venv를 만들고 → 의존성을 설치하고 → setup을 실행한 뒤 → uvicorn을 띄웁니다. http://localhost:7000 을 열어보세요.
TIP
Windows에서는 로컬 vLLM/SGLang이 지원되지 않습니다. 로컬에서 모델을 돌리고 싶다면 Ollama for Windows를 설치하고, Settings에서 엔드포인트를 http://localhost:11434/v1 로 넣으세요. Claude/GPT를 쓰되 로컬 추론 설치가 부담이라면, 로컬 추론 없이도 임의의 OpenAI 호환 클라우드 API를 쓰는 방법도 가능합니다.
10단계 (선택): 휴대폰에서도 쓰기
Tailscale이 이미 연결돼 있다는 전제 하에:
ODYSSEUS_HOST=0.0.0.0 docker compose up -d
# 또는 .env에 이렇게 쓰기
APP_BIND=0.0.0.0
하지만 LAN/Tailscale에 그냥 HTTP로 노출하는 건 안전하지 않습니다. mkcert로 HTTPS를 꼭 붙이세요.
mkcert -install
mkcert -cert-file cert.pem -key-file key.pem 100.x.y.z # 당신의 Tailscale IP
python -m uvicorn app:app --host 0.0.0.0 --port 7000 \
--ssl-certfile=cert.pem --ssl-keyfile=key.pem
휴대폰에서 https://<tailscale-ip>:7000 로 접속하고, PWA를 홈 화면에 설치하면 네이티브 앱과 거의 같은 수준으로 사용할 수 있습니다.
자주 겪는 문제(트러블슈팅)
Q1: 7000 포트가 점유됨 (특히 macOS)
macOS AirPlay가 기본적으로 7000 을 점유합니다. 두 가지 해결책:
# 방법 1: .env에서 포트 변경
APP_PORT=7001
docker compose up -d
# 브라우저에서 http://localhost:7001 열기
# 방법 2: Apple 메뉴 → 시스템 설정 → 일반 → AirPlay 수신기 → 끄기
Q2: ChromaDB는 떠 있는데 로그에 DEGRADED가 뜸
대부분 chromadb-client와 chromadb가 동시에 설치돼 있어서, 조용히 HTTP-only 모드로 폴백되며 벡터 기능이 망가진 경우입니다. 수정:
# 실행 중인 컨테이너 안에서 (또는 로컬 venv에서)
./venv/bin/pip uninstall chromadb-client -y
./venv/bin/pip install --force-reinstall chromadb
docker compose restart odysseus
검증:
docker compose logs odysseus | grep -E "ChromaDB|MemoryVectorStore"를 확인하면, 초기화가 성공해야 하고 더 이상DEGRADED가 없어야 합니다.
Q3: Cookbook에서 제 GPU가 안 보이고 iGPU 또는 CPU만 보임
Docker는 기본적으로 호스트의 모든 GPU를 노출하지만, iGPU만 마운트되거나 다른 카드로만 연결되어 있으면 거의 항상 NVIDIA Container Toolkit이 설치되지 않았거나 설정이 안 된 상태입니다. 특히 nvidia-ctk runtime configure --runtime=docker가 필요합니다.
# 진단
scripts/check-docker-gpu.sh
# 출력 결과를 보면 어디가 빠졌는지 알려줍니다
# 원클릭 설치 + 설정 (Ubuntu/Debian)
scripts/check-docker-gpu.sh --install-nvidia-toolkit
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker
Q4: GPU 패스스루는 성공했는데 llama.cpp 로그에 Unable to find cudart가 나옴
문제는 장치가 아니라 CUDA 런타임이 빠진 것입니다. Docker가 해결해주지 못하니, Cookbook → Dependencies 에서 llama-cpp-python의 CUDA 빌드를 다시 설치하세요.
Cookbook → Dependencies → llama-cpp-python 찾기 → Reinstall (CUDA build)
자동으로 pip install --no-cache-dir llama-cpp-python[cuda] 가 실행되며, 보통 2–3분 정도 걸립니다.
Q5: Outlook / Office 365 메일이 연결되지 않음
Odysseus의 메일 모듈은 현재 IMAP + 사용자명/비밀번호 인증만 지원합니다. Microsoft는 2024년 이후로 일반 비밀번호 로그인은 거의 다 막았고 OAuth가 필요합니다. 이 부분은 현재 알려진 제한 사항입니다.
임시 대안: Gmail/Fastmail/자체 구축 메일을 쓰거나, (2FA가 켜진 계정 기준) Microsoft App Password 를 만들어 비밀번호 로그인처럼 흉내 내세요.
Q6: 공용(인터넷) 접속을 하고 싶은데, 어떻게 하면 안전하게?
그냥 APP_BIND=0.0.0.0 로 인터넷에 노출 = 재앙 입니다. LOCALHOST_BYPASS는 인증을 우회하고, Agent에도 shell 도구가 있습니다. Shodan에서 24시간만 지나면 맨몸 인스턴스가 쓸려나가듯 스캔됩니다.
올바른 방식은:
[Internet] → Cloudflare Access / Tailscale / WireGuard
→ Caddy / Nginx / Traefik (HTTPS 종료)
→ http://127.0.0.1:7000 (Odysseus는 localhost 바인딩 유지)
그리고 .env에서:
AUTH_ENABLED=true
LOCALHOST_BYPASS=false
SECURE_COOKIES=true
Q7: 클라우드 API 비용을 어떻게 관리하나?
여기서는 5단계 경로 C에서 나온 그 문제를 좀 더 풀어 설명하겠습니다.
개인 사용 기준으로, 세 가지 선택지를 비용이 큰 순서 → 작은 순서로 생각하면 됩니다.
- 공식 API 연결 — 가장 완성도 높은 경험이지만, 가장 비쌉니다. Claude Opus + Agent를 자주 돌리면 일주일에 100달러를 넘는 건 흔한 일
- 프로토콜 호환 중계 계층 연결(저는 Defapi 사용) — 같은 Claude/GPT/Gemini 모델을 써도, 월 청구서가 공식 대비 한 단계 내려갑니다(정확히 얼마나 덜 나오는지는 제가 꼼꼼히 계산하진 않았지만, 주 청구서 100달러 수준이 월 청구서 100달러 수준으로 내려가는 정도라고 보면 됩니다). 장점은 프로토콜 레벨이 완전히 호환된다는 점이라서, Odysseus 설정은 그대로 두고 프롬프트/Agent 코드를 바꿀 필요가 없습니다.
- 로컬 양자화 모델 — Cookbook에서
Q4_K_MGGUF를 받으면, 16G VRAM으로 30B급을 돌릴 수 있습니다. API 비용은 0이지만, 추론 속도는 클라우드보다 느리고 복잡 작업의 품질은 한 단계 떨어집니다.
제 실제 조합은 이렇습니다: 채팅 + Deep Research는 Defapi Claude Sonnet 4.5, Agent의 도구 호출은 Claude Haiku 4.5(저렴한 편), 간단 분류/요약은 로컬 Qwen2.5 양자화 버전입니다. 세 Provider가 각각 따로 과금되고 서로 간섭하지 않아서, 한 달에 총비용이 (저에게는) 두 자릿수 위안 수준으로 끝납니다.
TIP
핵심 팁: 모든 일을 같은 모델로 하지 마세요. Odysseus의 Settings는 상황(용도)별로 서로 다른 Provider를 붙일 수 있는데, 이 기능을 많은 사람이 놓치고 있습니다.
추가 읽을거리 / 더 나아가기
- MCP 생태계: Odysseus가 자동 등록하는 내장 MCP에는
playwright(브라우저) /filesystem/shell이 포함됩니다. 직접 MCP 서버를 작성해서mcp_servers/에 등록하면, Agent에서 바로 쓸 수 있습니다. - Skills 시스템:
routes/skills_routes.py가 재사용 가능한 "스킬 조각"을 관리합니다. OpenClaw의 Skills와 비슷해요 — 한 번 작성하면 어떤 세션에서도 호출 가능합니다. - Tailscale + mkcert HTTPS: 이전 섹션에서 기본 흐름을 보여줬고, 고급 단계로 자동 갱신 + DNS-01 챌린지도 추가할 수 있습니다.
- 리버스 프록시 조합: Caddy 설정에 HTTPS + Cloudflare 프록시를 붙이면, 공용 인터넷에 대한 운영 부담을 거의 없애는 형태로 만들 수 있습니다.
- CalDAV 동기화: Radicale(가벼운 CalDAV 서비스)를 직접 구축하면, Odysseus 캘린더를 휴대폰 시스템 캘린더와 양방향 동기화할 수 있습니다.
- 메일 AI 자동 버킷팅: IMAP까지 연결한 뒤 일정 시간 사용하면 "긴급/일반/스팸" 같은 방식으로 자동 분류하고, 초안 답장도 미리 작성해둡니다. 당신은 보내기만 누르면 됩니다.
- Cookbook 원격 서버: Cookbook → Settings → Servers에서 원격 GPU 머신을 설정할 수 있습니다. 모델 추론/다운로드 모두 SSH로 처리하니, 호스트는 작게 두고 GPU는 멀리 둬서도 깔끔하게 운영 가능합니다.
- Deep Research 다단계 리포트: 알리바바 Tongyi DeepResearch를 개조한 방식으로, SearXNG로 다중 소스 → 요약 → 종합 흐름을 탑니다. 경쟁사 리서치/업계 리서치에 적합합니다.
- 다중 Provider 라우팅: Odysseus에서 채팅/에이전트/리서치에 서로 다른 Provider를 배치합니다. 로컬 Ollama가 80% 일상 대화를 처리하고, 복잡한 문제는 클라우드로 넘기는 식으로 비용과 경험의 균형을 잡을 수 있습니다.
GitHub 저장소: pewdiepie-archdaemon/odysseus, 문서는 docs/ 폴더에 있고, 로드맵은 ROADMAP.md를 참고하세요. 기여하고 싶다면 CONTRIBUTING.md를 확인하세요.