llama.cpp 서버에서 웹 RAG를 안전하게 실행하는 방법 (native tools 활용)
How I do use the recent llama.cpp native tools to do web rag a.k.a. web_fetch (or anything else for the matter) directly from inside the llama-server's webui
핵심 요약
llama.cpp의 네이티브 도구와 샌드박스 환경을 결합해 웹 데이터를 안전하게 가져오는 워크플로우를 소개함.
- 네이티브 도구 활용 — llama-server의 exec_shell_command를 사용하여 AI 에이전트가 직접 셸 명령어를 실행함.
- 다중 샌드박스 구축 — firejail과 OCI 컨테이너를 사용하여 호스트 시스템을 보호하고 보안을 강화함.
- 워크플로우 자동화 — 전용 리눅스 사용자와 스크립트를 통해 안전한 명령 실행 환경을 구성함.
- 웹 데이터 수집 — 웹 브라우저 대신 셸 도구를 활용해 효율적으로 웹 콘텐츠를 가져옴.
다른 LLM 사용자들과 마찬가지로, 저도 며칠 전 놀라운 llama.cpp 프로젝트에 서버용 네이티브 도구 기능이 추가되었다는 사실을 알게 되었습니다.
llama-server에서 관련 옵션을 활성화하고 가장 무해한 get_datetime으로 조금 놀아본 뒤, 저는 큰 결심을 하고 가장 강력한 도구인 exec_shell_command를 조심스럽게 활성화했습니다.
최근 pi 코딩 에이전트와 관련하여 진행했던 샌드박싱 작업을 바탕으로, 다중 샌드박싱을 통해 리눅스 환경에서 더 안전하게 사용할 수 있는 워크플로우를 구현했습니다:
step 0) llama-server의 네이티브 도구 옵션 활성화
step 1) 시스템 전체에 firejail 설치
step 2) 제 사용자 작업 공간 홈 디렉터리가 꼬이거나 권한 상승이 일어나는 것을 방지하기 위해 vmagents(가상 머신 에이전트 스미스)라는 새 리눅스 사용자 생성
step 3) vmagents 사용자로 로그인하여 사용하기 쉬운 OCI 가상 머신 컨테이너 하네스인 smolmachines 설치
step 4) minivm이라는 VM을 생성하고 시작하여, 기본 busybox 명령 기반의 Alpine 리눅스 OCI 이미지를 가져옴
step 5) vmagents 실행 디렉터리에 샌드박스 VM을 가동하고, 그 안에서 주어진 명령을 firejail 샌드박스로 실행한 뒤 종료하는 minivm-exec 스크립트 생성(실행 권한 부여)
step 6) 제 일반 사용자 작업 공간 실행 디렉터리에 vmagents 사용자 자격 증명을 사용하여 이전의 minivm-exec 스크립트를 호출하는 vm-exec라는 스크립트 생성(실행 권한 부여)
step 7) llama-server 웹 UI에서 다음과 같은 프롬프트 실행:
이탈리아의 최신 뉴스를 가져와서 가장 매력적인 뉴스를 알려줘. 실행할 모든 명령어 앞에는 샌드박싱 래퍼인 vm-exec를 붙여. 웹 콘텐츠를 가져올 때는 wget을 사용하고 옵션으로 "-U Mozilla"를 추가해서 브라우저 사용자 에이전트 문자열을 넣어줘.
완료!!!
위에서 언급한 상세 단계:
0 ) llama-server --model Qwen3.6-35B-A3B_MTP-UD-Q8_K_XL.gguf --flash-attn on --no-mmap --jinja --threads-http 4 --prio 2 --tools get_datetime,exec_shell_command --temp 0.6 --top-p 0.95 --top-k 20 --presence-penalty 1.5 --min-p 0.00 --chat-template-kwargs '{"preserve_thinking":true}' --spec-type draft-mtp --spec-draft-n-max 1
1 ) yay -Sy firejail (또는 Manjaro/Arch 리눅스에서 sudo pacman)
2 ) sudo useradd -m vmagents; sudo passwd vmagents
3.1 ) sudo su - vmagents
3.2 ) curl -sSL https://smolmachines.com/install.sh | bash
4.1 ) smolvm machine create minivm --image alpine --net
4.2 ) smolvm machine start --name minivm
5 ) /home/vmagents/.local/bin/minivm-exec
#!/bin/sh
smolvm machine start --name minivm >/dev/null
firejail smolvm machine exec --name minivm -- $* 2>/dev/null
smolvm machine stop --name minivm >/dev/null


