New in llama.cpp: Decision Models
llama.cpp에 추가된 의사결정 모델
llama.cpp가 텍스트를 생성하는 대신 주어진 선택지의 확률을 한 번의 추론으로 계산하는 의사결정 모델을 지원합니다. 새 `/v1/systemone` API는 분류, 점수 산정, 예·아니요 판단과 이미지 입력을 처리하며, 모델별 속도와 신뢰도를 활용해 라우팅이나 검토 작업을 구성할 수 있습니다.
- 주제
AI 요약
llama.cpp에 의사결정 모델(Decision Models)을 실행하는 /v1/systemone 엔드포인트가 추가됐습니다. 요청에 상태(state)와 질문을 보내면 모델은 답변 문장을 생성하는 대신 지정된 답 중 하나를 고르고 선택지별 확률을 반환합니다. 질문 여러 개를 한 번에 처리할 수 있으며, 같은 상태를 질문마다 다시 읽지 않는 모델도 있습니다.
생성 대신 선택지를 평가합니다
일반적인 채팅 모델은 출력 토큰을 하나씩 생성한 뒤 결과를 파싱해야 합니다. 의사결정 모델은 입력을 한 번 읽고 선택지에 점수를 매깁니다. 답이 미리 정한 선택지 안에 머물고 확률도 함께 나오므로 요청 라우팅, 콘텐츠 검토, 에이전트 작업 결과 확인, 다음 행동 선택 등에 쓸 수 있습니다.
API는 TypeSafe의 Jev 모델이 소개한 System One 형식을 따릅니다. 기존 클라이언트는 기본 URL을 바꾸면 사용할 수 있습니다. 구현은 llama.cpp의 PR #29818에 들어갔습니다.
세 가지 질문 형식
choice는 선택지와 선택지별 설명을 받아 가장 높은 점수의 답과 각 선택지의 확률을 반환합니다. score는 낮은 값부터 나열한 2~10개 단계를 평가합니다. 결과는 두 단계 사이의 실수로 나올 수 있으며 단계별 확률도 확인할 수 있습니다. noul은 예·아니요 질문에 대한 긍정 확률을 반환합니다.
예시 요청은 고객이 지난주 주문에서 두 번 결제됐다고 항의한 상황을 입력으로 받습니다. 담당 부서를 묻는 choice에서는 billing이 0.9049로 가장 높은 확률을 얻습니다. 고객이 화났는지 묻는 noul의 값은 0.8208입니다. 긴급도를 네 단계로 평가한 score는 2.2821을 반환하며, 가장 높은 단계인 ‘지금 당장’의 확률은 0.5478입니다. 응답에는 모델 이름과 토큰 사용량도 포함되며, 예시에서는 출력 토큰이 0입니다.
모델 선택과 성능
소개된 모델은 Julia-1, Laya, Kev-4B, lev, OpenJev입니다. 크기는 144M부터 27B까지 다양합니다. Julia-1은 50개 이상 언어를 지원하지만 이미지는 처리하지 않습니다. OpenJev는 영어, 독일어, 프랑스어, 힌디어, 중국어, 일본어를 지원하고 이미지를 읽습니다. 라이선스는 모델마다 다르며 OpenJev는 CC BY-NC 4.0입니다.
글에 실린 속도는 NVIDIA RTX PRO 6000 한 대에서 질문 하나에 답할 때의 중앙값입니다. Julia-1은 3ms, Laya는 5ms, Kev-4B는 12ms, lev는 36ms, OpenJev는 43ms입니다. 모델이 크다고 항상 더 적합한 것은 아닙니다. 글은 작은 모델과 큰 모델을 직접 시험하고 Decision Index에서 비교하라고 안내합니다. 자신이 처리할 데이터로 테스트한 뒤 모델별 신뢰도 기준을 정하고, 확신이 높은 답만 자동 처리하며 나머지는 사람에게 넘기는 방식도 제안합니다.
이미지 입력과 실행
OpenJev 같은 일부 모델은 문서나 스크린샷도 읽습니다. 이미지 URL을 요청에 넣으면 비전 프로젝터가 자동으로 내려받습니다. 상태에는 일반 텍스트뿐 아니라 JSON, 이미지, 채팅 메시지 목록을 넣을 수 있습니다. 채팅 메시지 안의 image_url도 이미지로 처리합니다.
최신 llama.cpp를 설치한 뒤 llama serve -hf ggml-org/Kev-4B-GGUF 명령으로 모델을 실행할 수 있습니다. 라우터 모드에서는 모델을 요청 시점에 불러오고, 요청마다 model 필드로 사용할 모델을 고릅니다. /v1/models에서 모델 ID를 확인할 수 있습니다. 양자화 버전도 GGUF 모델처럼 선택할 수 있으며, 글은 Q8_0을 예로 듭니다.
선택지에 설명을 붙이는 일도 성능에 영향을 줍니다. 글의 예시에서 Julia-1은 설명 없이 ‘billing’, ‘shipping’ 같은 이름만 줬을 때 “두 번 결제됐다”는 문의를 shipping으로 분류했습니다. 각 선택지에 결제, 환불, 배송 같은 기준을 설명하자 billing을 0.99 확률로 골랐습니다. 확률을 곧바로 정답률로 간주하지 말고, 실제 데이터로 기준값을 검증하라는 안내도 덧붙입니다.
Reddit 반응
- @u/-p-e-w- — Jev는 인기 있는 아이디어에 독점적 우위가 없으면 어떤 일이 생기는지 보여주는 흥미로운 사례입니다. 만든 쪽은 AI의 다음 큰 흐름이라고 내세웠고 동의하는 사람도 많았지만, 곧 다른 사람들이 자기 버전을 만들었습니다. 이제 Jev 같은 모델은 어디에나 있고 Jev는 보이지 않습니다. 이 모든 일이 한 달도 안 돼 벌어졌습니다.
- @u/No_Afternoon_4260 — 몇 주가 아니라 몇 주 전이라고요.
- @u/Conexion — Jev 같은 모델을 24시간 안에 보기 시작했습니다. 솔직히 꽤 멋진 일이기도 합니다.
- @u/scrdest — Jev가 받았던 관심과 달리 오픈 가중치 경쟁 모델이 며칠 만에 나왔고 벤치마크도 더 좋았습니다. Jev와 경쟁 모델은 자유 형식 문장 대신 구조화된 출력을 예측합니다. 예를 들어 답 네 개를 주면 그중 하나를 고릅니다. 일반 LLM으로도 할 수 있지만, 작고 빠르다는 점이 장점입니다. 큰 모델에 맡기기 전에 간단한 결정을 처리하는 데 쓸 수 있습니다.
- @u/profcuck — Jev는 흥미롭고 잘하는 일도 있으며 비용도 저렴합니다. 동시에 독점적 우위는 없고 오픈소스 버전이 계속 나오고 있습니다. 모델에 정보를 주고 선택지를 제시하면 하나를 고르고 확신 정도를 알려주는 방식입니다. 전통적인 LLM도 같은 일을 하지만 답을 문장으로 생성하느라 더 느립니다. 다만 모델의 일반 지식이 중요할 수 있어 작은 오픈소스 모델이 큰 모델과 경쟁하기는 어려울 수 있습니다.
- @u/Narrow_Whereas_7193 — 요즘 로컬 모델로 역할극을 해보고 있는데, 의사결정 모델이 장면 도중 캐릭터가 설정에서 벗어나는 일을 막는 데 도움이 될 것 같습니다. 써본 사람이 있나요?
- @u/ChikenDumbstick — Jev는 써보지 않았지만 Laya로 사용자 입력에 따라 프롬프트를 분기해 봤습니다. 솔직히 이 용도에서는 머신러닝 원샷 분류기보다 특별히 나은 점을 찾지 못했습니다. 더 복잡한 의사결정 트리라면 유용할 수도 있습니다.
- @u/JLeonsarmiento — Jeff 같은 모델을 어디에 써야 할지 아직 찾고 있습니다.
- @u/Objective-Pair8231 — 모델 라우팅이나 도구 호출이 위험한지 평가하는 데 쓸 수 있다는 좋은 예를 봤습니다.
- @u/james2432 — “이 도구를 실행해야 하나요?”라는 예·아니요 판단에 괜찮다고 합니다. 특정 폴더 밖을 읽지 말 것,
.env변수를 노출하지 말 것, 작업과 무관한 명령인지 같은 기준을 명확히 주면 됩니다.
- @u/notsosleepy — 정말 정확한가요? 회사에서 LLM 심판 모델로 Jev를 쓰자는 논의가 있었는데 정확도가 75%로 형편없었습니다.
- @u/IngwiePhoenix — 의사결정 모델에 27B 전체 모델을 쓰는 건 꽤 큽니다. 앞으로 어떻게 발전하고 어떤 구현이 나올지 궁금합니다. 분류와 의도 파악 말고는 아직 다른 활용 사례를 보지 못했습니다.
- @u/BlackBeardAI — 이게 대체 누구에게 필요한가요? 아무도 필요로 하지 않습니다. 왜 있는 거죠?
- @u/Lugnut1206 — 특히 홈 자동화처럼 특정 작업에서는 성능과 신뢰도가 더 좋습니다. 쓸모없는 기능은 아닙니다.
- @u/zephyr_33 — 빠르긴 하지만, 작업에 맞는 도구인지 판단하는 작은 에이전트에 적용해 시험했을 때는 일관되게 신뢰도가 낮았습니다. Jev와 여러 복제 모델 모두 그랬습니다. 용도에 맞게 미세 조정하는 편이 더 가치 있을 것 같습니다.
원문: Hugging Face Blog / 번역·요약: Trawling