로컬 모델
Ollama, llama.cpp(llama-server), MLX(mlx_lm.server)를 정식 제공자로 연결하기. 계정·키·인터넷 없이, 계량 없이.
LEVEL11은 내 컴퓨터에서 도는 모델 서버를 정식 제공자로 지원합니다. 계정도, API 키도, 인터넷도 필요 없습니다. 요청은 설정한 서버 주소로만 가고 LEVEL11 게이트웨이에는 가지 않으며, 사용량 계량·과금 대상이 아닙니다. 세 백엔드 모두 OpenAI 호환 POST /v1/chat/completions를 제공하므로 앱 안의 local 제공자 하나가 셋을 모두 담당합니다.
한눈에 보기
| 백엔드 | 설치·실행 | 기본 주소 | 네이티브 도구 호출 |
|---|---|---|---|
| Ollama | brew install ollama → ollama serve → ollama pull qwen3.5:4b |
http://127.0.0.1:11434 |
tools 태그가 있는 모델 |
llama.cpp (llama-server, GGUF) |
brew install llama.cpp → llama-server -m model.gguf --jinja -c 8192 --port 8080 |
http://127.0.0.1:8080 |
--jinja 옵션이 있으면 지원 |
MLX (mlx_lm.server, Apple Silicon) |
pip install mlx-lm → mlx_lm.server --model mlx-community/Qwen3-8B-4bit --port 8080 |
http://127.0.0.1:8080 |
mlx-lm 버전에 따라 다름 |
몇 가지 참고:
- Ollama의 컨텍스트 길이는 기본 4096 토큰입니다. 에이전트 작업에는
OLLAMA_CONTEXT_LENGTH=16384 ollama serve처럼 띄우고 LEVEL11 설정의 컨텍스트 길이도 같은 값으로 맞추세요. - llama.cpp는
--jinja가 있어야 OpenAI 방식 도구 호출이 됩니다. 없으면 서버가 400을 돌려주고 LEVEL11이 텍스트 방식으로 자동 전환합니다.-c는 설정의 컨텍스트 길이와 맞춥니다. - MLX는 첫 요청 때 Hugging Face에서 모델을 내려받고 그 뒤로는 오프라인입니다. MLX와 llama.cpp의 기본 포트가 같으니(8080) 둘을 같이 띄우려면 한쪽
--port를 바꾸세요.
LEVEL11에 연결
- 설정(
⌘,) → 로컬 모델 절로 갑니다. - 백엔드를 고릅니다. 서버 주소는 비워 두면 기본 주소를 씁니다.
- 연결 테스트를 누릅니다. 서버의 모델 목록을 가져와 모델 이름 드롭다운에 채우고(직접 입력도 가능), Ollama는 모델별 도구 호출 지원 여부도 보여 줍니다. llama.cpp는 빌드 번호와
n_ctx도 읽어 옵니다. 서버가 꺼져 있으면 그 백엔드를 띄우는 명령을 안내합니다. - 모델 이름을 고르고 이 모델 사용을 누르거나, 모델 선택 상자에서 로컬 모델을 고릅니다. 작성기와 상태 표시줄에 "Ollama · qwen3.5:4b"처럼 나타납니다.
- 도구 호출 방식은 보통 자동이면 됩니다. 컨텍스트 길이는 서버에 띄운 모델과 맞춥니다.
에이전트 프리셋의 모델 덮어쓰기에서 local을 고르면 그 프리셋만 로컬 모델을 씁니다. 사용자 지정 모델 ID에 local:<모델 이름>을 넣으면 설정과 다른 모델을 같은 서버에서 쓸 수 있습니다.
동작 방식
- 스트리밍: 텍스트를 바로 채팅에 흘립니다.
reasoning_content델타와 본문 속<think>…</think>태그는 사고 패널로 보내고 채팅 본문에는 넣지 않습니다. - 도구 호출(자동): 먼저 OpenAI 방식
tools를 보냅니다. 서버가 400/422로 거부하면 그 서버·모델 조합을 "텍스트 전용"으로 기억하고 바로 다시 시도합니다. 텍스트 방식에서는 시스템 프롬프트에 도구 목록과 호출 형식을 넣고 응답의```tool_call블록(또는<tool_call>태그)을 파싱해 도구를 실행합니다. 네이티브와 텍스트로 고정할 수도 있습니다. - 승인·체크포인트: 빌더 모드의 승인, 체크포인트, 되돌리기는 클라우드 모델과 똑같이 동작합니다.
- 컨텍스트 맞추기: 로컬 모델의 창은 작으므로 도구 결과를 잘라 내고 오래된 대화부터(도구 호출과 결과는 함께) 버려 컨텍스트 길이 안에 맞춥니다.
- 격리: 로컬 제공자는 설정한 주소에만 접속합니다. 계정 상태, 게이트웨이, API 키와 무관하고 사용량·과금 정보가 생기지 않습니다.
권장 모델과 문제 해결
8–16GB 메모리라면 qwen3.5:4b나 Qwen3-4B·Qwen2.5-Coder-7B 4bit, 24–32GB라면 Qwen3-14B/32B 4bit, Gemma 4 27B, DeepSeek-Coder-V2-Lite, 그 이상이면 Qwen3-Coder, Qwen3.8-27B, Llama 3.3 70B 4bit부터 시작해 보세요. 도구 호출이 되는지는 모델과 서버 모두에 달렸습니다. 4B 이하 모델은 텍스트 방식에서 가끔 형식을 틀리지만 파서가 흔한 변형은 받아 줍니다.
| 증상 | 확인할 것 |
|---|---|
| 서버에 연결할 수 없습니다 | 서버 실행 여부, 포트, 설정의 서버 주소 |
| 모델이 없습니다 | Ollama: ollama pull <이름>. llama.cpp·MLX: 연결 테스트로 정확한 이름을 가져오기 |
| 400 "tools param requires --jinja" | 자동 모드면 텍스트 방식으로 넘어갑니다. 네이티브를 원하면 --jinja |
| 답이 중간에 끊김 | 컨텍스트 길이를 서버와 같게 맞추고 더 큰 값으로 다시 띄우기 |
| 도구를 안 쓰고 말로만 답함 | 작은 모델의 한계. 도구 호출 방식을 텍스트로 고정하거나 더 큰 모델 |