Files
variet_llm/docs/ai_assistant_architecture.md
2026-04-05 00:43:39 +09:00

200 lines
6.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# AI 비서 시스템 아키텍처 논의 기록
> 작성일: 2026-04-05
> 상태: 논의 중
---
## 1. 하드웨어 조건
- **GPU: RTX 3060 12GB × 2장 (총)**
- Machine A: 현재 머신 (Modern CPU, 96GB RAM) → API 서버 전용
- Machine B: i7-7700, 64GB RAM → 워크스테이션 (코딩, Discord 등)
- Machine B는 내장그래픽(HD 630)으로 디스플레이 사용
- Machine A에서 7700+64GB RAM+3060 조합으로 유사한 결과 확인 완료
## 2. GPU 배치 결정: 1+1 vs 2+0
### 2+0 (Machine A에 2장 집중) — 추천
| 장점 | 설명 |
|------|------|
| 코딩 속도 2.5배 향상 | 35B 모델: 30 t/s → 50-80 t/s |
| 모델 완전 VRAM 수용 | 35B (20.5GB) → 24GB에 수용, cpu-moe 불필요 |
| 비서도 오히려 빠름 | API 호출해도 50-80 t/s > 로컬 42 t/s |
| 아키텍처 단순 | LLM 엔드포인트 1곳만 관리 |
| 단점 | 설명 |
|------|------|
| Machine A 의존 | 장애 시 추론 전체 중단 |
| 동시 처리 제한 | 솔로유저라 실질적 문제 적음 |
| 122B 핫스왑 중 비서 중단 (~3-5분) | 빈도 낮으면 수용 가능 |
### 1+1 (각 1장씩)
| 장점 | 설명 |
|------|------|
| 병렬 처리 가능 | 양쪽 동시 추론 |
| 장애 시 독립 동작 | Machine B가 자체 LLM 보유 |
| 122B 핫스왑 중에도 비서 유지 | Machine B가 대체 |
| 단점 | 설명 |
|------|------|
| 코딩 속도 30 t/s (2+0 대비 절반) | 메인 작업 속도 희생 |
| 35B 모델 cpu-moe 의존 | RAM 대역폭 제한 |
| 관리 복잡 | LLM 2곳 관리 |
### 결론: 솔로 유저 + 메인 코딩 → 2+0 추천
---
## 3. Machine A 모델 후보 비교 (2x 3060, 24GB VRAM)
### 모델 스펙 비교
| 모델 | 크기 | 활성 파라미터 | 1x 3060 속도 | **2x 3060 예상** | VRAM 여유 |
|------|:----:|:----------:|:----------:|:-----------:|:---------:|
| **Gemma4 26B-A4B** | 15.6 GB | 4B | 42 t/s | **70-100+ t/s** | 8.4 GB |
| **Qwen3.5 35B-A3B** | 20.5 GB | 3B | 30 t/s | **50-80 t/s** | 3.5 GB |
| Qwen3.5 122B-A10B | 71.3 GB | 10B | 11 t/s | 11 t/s (cpu-moe) | N/A |
### Gemma4 26B-A4B 장점
- **속도**: 15.6 GB로 작아서 VRAM에 여유롭게 수용 → 2x GPU에서 70-100+ t/s 가능
- **도구 호출**: function calling / tool use에 안정적 (구글 설계)
- **VRAM 여유**: 8.4 GB 남음 → 더 큰 컨텍스트, 더 높은 양자화(Q5/Q6), 멀티슬롯 가능
- **로딩 시간**: 15.6 GB → ~20초 (핫스왑 빠름)
- **범용성**: 코딩 + 도구 호출 + 일반 대화 균형
### Qwen3.5 35B-A3B 장점
- **코딩 품질**: Qwen3.5 시리즈가 코딩 벤치마크에서 Gemma4보다 강세
- **추론 능력**: 35B 전체 파라미터 → 더 깊은 지식/추론
- **한국어**: Qwen 시리즈가 한국어 성능 우수
- **3B 활성**: 4B보다 적어 토큰당 읽기 데이터 적음 (그러나 모델 크기가 더 커서 상쇄)
### Qwen3.5 122B-A10B 장점
- **최고 품질**: 122B 파라미터 → 가장 정확하고 깊은 추론
- **복잡한 설계**: 아키텍처 리뷰, 수학, 어려운 디버깅에 탁월
- **단점**: 11 t/s → 일상 사용에는 느림
### 제안: 3단계 핫스왑 전략
```
Fast (기본): Gemma4 26B-A4B → 70-100+ t/s
└── 빠른 대화, 도구 호출, 간단한 코딩, 비서 업무
└── 로딩: ~20초
Balanced: Qwen3.5 35B-A3B → 50-80 t/s
└── 본격적 코딩, 리팩토링, 복잡한 작업
└── 로딩: ~30-40초
Deep: Qwen3.5 122B-A10B → ~11 t/s
└── 아키텍처 설계, 고난도 추론, 심층 분석
└── 로딩: ~3-5분
```
또는 **자주 쓰는 2개만 유지**:
| 전략 | 기본 모델 | 온디맨드 | 적합한 경우 |
|------|----------|---------|-----------|
| A) 코딩 중심 | Qwen 35B (50-80 t/s) | 122B (11 t/s) | 코딩이 압도적 다수일 때 |
| B) 균형형 | Gemma4 26B (70-100+ t/s) | Qwen 35B (50-80 t/s) | 비서+코딩 혼합일 때 |
| C) 속도형 | Gemma4 26B (70-100+ t/s) | 122B (11 t/s) | 빠른 일상 + 가끔 딥 |
---
## 4. 시스템 구조 (2+0 기준)
```
Machine A (API 서버, 2x 3060, 헤드리스)
┌─────────────────────────┐
│ llama-server │
│ (포트 8000, OpenAI API) │
│ │
│ 모델: Gemma4/Qwen35B/122B│
│ 핫스왑 API (포트 8001?) │
└────────────┬─────────────┘
│ REST API (LAN)
Machine B (워크스테이션, GPU 없음)
┌────────────┴─────────────┐
│ VS Code Extension │ → Machine A API 호출 (코딩)
│ Discord Bot │ → Machine A API 호출 (비서)
│ MCP/도구 서버: │
│ · 캘린더 (Google API) │
│ · 이메일 (Gmail API) │
│ · 웹 검색 (SearXNG) │
│ · 쉘/파일 (subprocess) │
│ · 서버 관리 (Machine A) │
└──────────────────────────┘
```
### 에이전트 루프 구조
```python
MACHINE_A = "http://192.168.x.x:8000/v1/chat/completions"
while not done:
response = call_llm(MACHINE_A, messages, tools=local_tools)
if response.has_tool_calls:
results = execute_tools_locally(response.tool_calls)
messages.append(results)
else:
show_to_user(response.content)
done = True
```
- LLM은 Machine A에서 "생각"
- 도구는 Machine B에서 "실행"
- 이 분리가 깔끔하고 확장 용이
---
## 5. 기술 스택
| 컴포넌트 | 기술 | 위치 |
|---------|------|:----:|
| LLM 서버 | llama-server (OpenAI API) | Machine A |
| VS Code Extension | TypeScript + VS Code API | Machine B |
| Discord Bot | discord.py | Machine B |
| 도구 프레임워크 | 직접 구현 (function calling 기반) | Machine B |
| 웹 검색 | SearXNG (Docker) | Machine B |
| 코드/쉘 실행 | subprocess (직접) | Machine B |
| 에이전트 루프 | 직접 구현 (LangChain 등 불필요) | Machine B |
---
## 6. 구현 로드맵
### Phase 1: 인프라 (1-2일)
- Machine A: 2x 3060 설치, llama-server 자동 시작
- LAN API 통신 확인
- 핫스왑 스크립트 (모델 전환 자동화)
### Phase 2: VS Code Extension (3-5일)
- Extension 기본 구조
- Machine A API 연동 (에이전트 루프)
- 로컬 도구: 파일 R/W, 터미널, 프로젝트 탐색
### Phase 3: Discord Bot (2-3일)
- 기본 봇 구조
- Machine A API 연동
- 슬래시 명령어
### Phase 4: 도구 통합 (3-5일)
- SearXNG 자체 호스팅
- Google Calendar/Gmail API
- 서버 관리 도구
---
## 7. 미결 사항
1. VS Code Extension 먼저 vs Discord Bot 먼저?
2. Machine A 기본 모델: Gemma4 26B vs Qwen 35B?
3. SearXNG 위치: Machine A vs Machine B?
4. Machine A 자동 시작: Windows 서비스 vs 작업 스케줄러?
5. 핫스왑 트리거 방식: 수동(명령어) vs 자동(복잡도 판단)?