로컬 LLM(Ollama)로 에이전트 돌리기
TL;DR
- Ollama는 로컬에서 오픈 웨이트 모델을 띄우는 가장 짧은 경로다. API는 OpenAI 호환(
/v1)이라 Hermes·기타 에이전트에 바로 붙는다. - Hermes에서는
hermes model→ Custom endpoint →http://localhost:11434/v1로 연결한다. API 키는 비워 둔다. - 컨텍스트 길이는 Ollama 서버 쪽에서 따로 올려야 한다. 기본값이 짧아서 에이전트 루프가 자주 끊기는 함정이 있다.
- 로컬은 프라이버시·호출당 비용 면에서 유리하고, 품질·속도는 VRAM·모델 크기에 달린다. 클라우드와 fallback을 섞는 구성이 현실적이다.
들어가며
이전 글에서 LLM API를 고를 때 비용·지연·프라이버시 축을 나눴다. 그중 “데이터가 밖으로 나가면 안 되는” 구간이 생기면 로컬이 후보가 된다. 에이전트(cron, 봇, IDE 연동)까지 붙이면 “로컬에 모델만 깔면 끝”이 아니라 엔드포인트·컨텍스트·툴콜 지원까지 맞춰야 한다.
이 글은 Ollama를 기준으로, Hermes Agent에 로컬 provider를 연결하는 최소 절차와 자주 밟는 함정을 정리한다.
Ollama 설치와 모델 pull
# 설치 후 데몬 기동 (기본 포트 11434)
ollama serve
# 에이전트용으로 많이 쓰는 계열 예시
ollama pull qwen2.5-coder:32b
# 또는 작은 GPU / 빠른 실험용
ollama pull gemma3:4b
ollama list
모델 태그는 이름:태그 형식을 유지한다. Hermes·OpenAI 호환 클라이언트에 넘길 때도 대시로 바꾸지 않는 편이 안전하다.
Hermes에 붙이기
Hermes는 Ollama를 별도 1급 provider로 두지 않고, Custom endpoint로 붙인다.
hermes model
# → Custom endpoint (self-hosted / VLLM / etc.)
# → URL: http://localhost:11434/v1
# → API key: (비움)
# → model: qwen2.5-coder:32b 등
config.yaml에 직접 적어도 동일하다.
model:
default: qwen2.5-coder:32b
provider: custom
base_url: http://localhost:11434/v1
context_length: 64000
연결 확인:
curl http://localhost:11434/v1/models
hermes chat # 짧은 프롬프트로 응답·툴콜 여부 확인
툴 호출이 필요하면 ollama show <model>로 해당 모델이 tool calling을 지원하는지 본다. 지원하지 않는 소형 모델은 채팅은 되지만 에이전트 루프에서 도구를 거의 못 쓴다.
컨텍스트 길이 — 가장 흔한 함정
Ollama는 모델 스펙상 긴 컨텍스트를 광고해도, 서버 기본 num_ctx는 VRAM에 맞춰 짧게 잡히는 경우가 많다. Hermes 쪽 context_length만 키워 두면, 서버는 짧게 자르고 클라이언트만 길게 기대해서 중간에 맥락이 날아간다.
| 조치 | 방법 |
|---|---|
| 서버 전역 | OLLAMA_CONTEXT_LENGTH=64000 ollama serve |
| 모델 고정 | Modelfile에 PARAMETER num_ctx 64000 후 ollama create ... |
| 검증 | ollama ps의 CONTEXT 열 확인 |
OpenAI 호환 /v1/chat/completions 요청만으로는 컨텍스트를 올리지 못한다. 반드시 서버 또는 Modelfile에서 맞춘다.
언제 로컬을 쓰고, 언제 클라우드를 쓰는가
| 상황 | 추천 |
|---|---|
| 개인 메모·민감 문서 요약 | 로컬 |
| cron·리포트처럼 호출이 잦고 단가가 아픈 작업 | 로컬 또는 소형 클라우드 |
| 긴 스펙·복잡한 코딩 에이전트 | 클라우드 상위 모델, 로컬은 보조 |
| 오프라인·키 없이 실험 | 로컬 |
실사용에서는 메인 채팅은 클라우드, 배치·민감 경로는 로컬처럼 provider를 작업 단위로 나누는 구성이 많다. Hermes는 cron job마다 model/provider를 고정할 수 있어, “에이전트 cron은 가벼운 모델, IDE는 ACP” 같은 분리가 가능하다.
Windows + WSL 참고
Hermes를 WSL2에서 돌리고 Ollama만 Windows 호스트에 띄운 경우, 기본 NAT에서는 WSL의 localhost가 호스트 Ollama에 닿지 않는다. Windows 11 mirrored 네트워킹을 켜거나, 호스트 IP로 base_url을 잡는다. NAT로 붙일 때는 Windows 쪽 Ollama에 OLLAMA_HOST=0.0.0.0이 필요할 수 있다.
모델 고를 때 짧게
| 목적 | 대략적인 선택 |
|---|---|
| 빠른 실험·짧은 요약 | 3B~8B급 (예: gemma3:4b 계열) |
| 코드·툴콜 에이전트 | coder 계열 14B~32B, VRAM 여유 필수 |
| 추론·긴 문서 | 큰 모델 또는 클라우드. 로컬만으로 우기면 지연이 먼저 온다 |
같은 이름이라도 양자화·태그(q4_K_M 등)에 따라 체감이 크게 달라진다. ollama pull 전에 라이브러리 페이지에서 용량과 권장 RAM을 확인하는 습관이 필요하다.
마무리
- 연결은
http://localhost:11434/v1+provider: custom이면 충분하다. - 컨텍스트는 서버에서 올리고
ollama ps로 확인한다. 여기가 로컬 에이전트 실패 1순위다. - 툴콜·코딩 품질이 필요하면 모델 크기와 VRAM을 먼저 보고, 안 되면 클라우드 fallback을 둔다.
- 로컬은 “공짜·완전 대체”가 아니라 프라이버시·비용 축의 한 provider로 두는 게 유지보수에 유리하다.
이전 글의 LLM API 선택 가이드·Hermes 스킬 글과 이어서 읽으면, “어디에 어떤 모델/절차를 붙일지” 한 줄로 정리하기 쉽다.
Comments