LLM의 Tool Calling은 내부적으로 선형 구조로 읽고 조종할 수 있다
Tool Calling is Linearly Readable and Steerable in Language Models
TL;DR Highlight
LLM이 어떤 툴을 호출할지는 내부 activation에 선형적으로 인코딩되어 있어서, 벡터 하나만 더하면 툴 선택을 바꿀 수 있다.
Who Should Read
LLM 에이전트가 잘못된 툴을 호출하는 문제를 디버깅하거나 모니터링하려는 AI 엔지니어. 특히 함수 호출(function calling) 기반 에이전트를 프로덕션에서 운영하는 개발자.
Core Mechanics
- LLM이 어떤 툴을 선택할지에 대한 정보가 모델 내부의 residual stream(레이어 간 정보가 흐르는 통로)에 선형적으로 저장되어 있음. Gemma 3, Qwen 3, Qwen 2.5, Llama 3.1 등 12개 모델(270M~27B)에서 모두 확인됨.
- 툴 A에서 툴 B로 바꾸는 방법이 단순함: 두 툴의 평균 activation 차이 벡터를 구해서 추론 중에 더해주기만 하면 됨. 학습이나 gradient 계산 없이 쿼리 2~3개만 있으면 구현 가능.
- 4B 이상 instruction-tuned 모델에서 툴 전환 정확도 93~100%를 달성. 더 놀라운 건 툴 이름만 바꿔도 그 뒤에 나오는 JSON 인자(arguments)가 새 툴의 스키마에 맞게 자동으로 바뀜.
- Gemma 3 12B/27B에서 내부적으로 1위~2위 툴 간 점수 차이가 가장 작은 쿼리는, 차이가 가장 큰 쿼리보다 잘못된 툴 호출이 14~21배 더 많이 발생. 이를 이용해 실행 전에 오류를 사전 감지 가능.
- Base 모델(instruction tuning 없이 사전학습만 된 모델)도 내부적으로는 올바른 툴을 이미 알고 있음. Gemma 3 4B base는 실제로 툴을 3%밖에 못 맞히지만, residual stream에서 cosine 유사도로 읽어내면 75%까지 올라감.
- 모델이 툴을 선택하는 과정은 3단계 회로(circuit)로 구성됨: 초기 레이어에서 툴별 특징 감지 → 중간 레이어 attention head가 컨텍스트 수집 → 후반 레이어에서 최종 결정. Gemma 3 4B에서는 L17의 H0, H1 두 attention head가 결정의 대부분을 담당.
- 이 선형 구조는 1B 파라미터부터 나타나기 시작하고 270M에서는 작동 안 함. 멀티턴 대화에서는 단일턴만큼 효과가 일관되지 않아 프로덕션 적용 시 주의 필요.
Evidence
- 5개 툴 전환 실험에서 60/60(100%) 성공. 15개 툴로 늘려도 4B+ 모델에서 93~100% 정확도. 같은 크기의 랜덤 벡터를 사용하면 0% 전환으로 방향성이 핵심임을 확인.
- BFCL v3 벤치마크에서 base 모델의 생성 정확도는 2~10%인데, 동일 모델의 residual stream에서 cosine readout으로 읽으면 69~82%로 56~72 퍼센트포인트 차이 발생.
- Gemma 3 12B에서 내부 activation 기반 confidence gap이 하위 25% 쿼리의 오류율은 14%, 상위 25%는 0%로, 하위 median 이하를 flagging하면 92%의 오류를 사전 포착 가능.
- τ-bench airline 벤치마크(같은 항공 도메인의 14개 툴)에서 logistic regression probe가 top-1 정확도 61~89%를 달성(chance 11~20%). 같은 도메인 안에서도 툴별로 선형 구분이 가능함을 증명.
How to Apply
- 프로덕션 에이전트에 오류 감지를 추가하려면: 각 툴마다 쿼리 2~3개로 평균 activation을 미리 계산해두고, 새 쿼리가 들어올 때 top-1과 top-2 툴의 cosine 유사도 차이를 체크. 차이가 작으면 실행 전에 사람에게 확인 요청하는 안전장치로 활용 가능.
- 잘못된 툴이 선택된 걸 탐지했을 때 재실행 없이 수정하려면: 원하는 툴의 평균 activation에서 현재 선택된 툴의 평균 activation을 빼서 steering 벡터를 만들고, penultimate layer의 residual stream에 더해주면 됨. 코드 변경 없이 모델 가중치도 수정 없이 적용 가능.
- 다국어 환경에서 툴 호출을 통일하려면: English 쿼리로만 steering 벡터를 계산해도 한국어/일본어/중국어 쿼리에 그대로 적용 가능. Qwen 3 4B 기준 English 벡터로 8개 언어에서 93%+ 정확도를 달성.
Code Example
Terminology
관련 논문
Needle: Gemini의 Tool Calling 능력을 26M 파라미터 모델로 증류
Gemini의 함수 호출(tool calling) 능력만 뽑아서 26M(2600만) 파라미터짜리 초경량 모델로 만든 프로젝트로, 폰/워치/스마트글라스 같은 엣지 디바이스에서 직접 실행 가능하다.
메인프레임과 COBOL을 위한 Agentic 개발 환경 'Hopper'
수십 년 된 메인프레임(z/OS) 환경을 AI 에이전트로 조작할 수 있게 해주는 개발 도구로, COBOL 코드 작성부터 JCL 실행, 디버깅까지 자연어로 처리할 수 있어 레거시 시스템 유지보수 비용을 크게 줄일 수 있다.
Statewright – AI 에이전트를 안정적으로 만드는 Visual State Machine
AI 에이전트에게 40개 이상의 도구를 주면 오히려 성능이 떨어지는 문제를 State Machine으로 각 단계별 사용 가능한 도구를 제한해 해결하는 오픈소스 프로젝트다. 더 큰 모델 대신 더 작은 문제 공간을 만들어 신뢰성을 높이는 접근이 핵심이다.
adamsreview: Claude Code용 멀티 에이전트 PR 코드 리뷰 파이프라인
Claude Code에서 최대 7개의 병렬 서브 에이전트가 각각 다른 관점으로 PR을 리뷰하고, 자동 수정까지 해주는 오픈소스 플러그인이다. 기존 /review나 CodeRabbit보다 실제 버그를 더 많이 잡는다고 주장하지만 커뮤니티에서는 복잡도와 실효성에 대한 회의론도 나왔다.
Claude를 User Space IP Stack으로 써서 Ping에 응답시키면 얼마나 빠를까?
Claude Code에게 IP 패킷을 직접 파싱하고 ICMP echo reply를 구성하도록 시켜서 실제로 ping에 응답하게 만든 실험으로, 'Markdown이 곧 코드이고 LLM이 프로세서'라는 아이디어를 네트워크 스택 수준까지 밀어붙인 재미있는 사례다.
AI Agent를 위한 Git: re_gent
AI 코딩 에이전트(Claude Code 등)가 수행한 모든 툴 호출을 자동으로 추적하고, 어떤 프롬프트가 어느 코드 줄을 작성했는지 blame까지 가능한 버전 관리 도구다.
Related Resources
Original Abstract (Expand)
When a tool-calling agent picks the wrong tool, the failure is invisible until execution: the email gets sent, the meeting gets missed. Probing 12 instruction-tuned models across Gemma 3, Qwen 3, Qwen 2.5, and Llama 3.1 (270M to 27B), we find the identity of the chosen tool is linearly readable and steerable inside the model. Adding the mean-difference between two tools' average internal activations switches which tool the model selects at 77-100% accuracy on name-only single-turn prompts (93-100% at 4B+), and the JSON arguments that follow autoregressively match the new tool's schema, so flipping the name is enough. The same per-tool means also flag likely errors before they happen: on Gemma 3 12B and 27B, queries where the gap between the top-1 and top-2 tool is smallest produce 14-21x more wrong calls than queries with the largest gap. The causal effect concentrates along one direction, the row of the output layer that produces the target tool's first token: a unit vector along it at matched magnitude already reaches 93-100%, while what is left over leaves the choice almost untouched. Activation patching localises this to a small set of mid- and late-layer attention heads, and a within-topic probe across 14 same-domain $τ$-bench airline tools reaches top-1 61-89% across five 4B-14B models, ruling out the reading that we are just moving the model along a topic axis. Even base models encode the right tool before they can emit it: cosine readout from the internal state recovers 69-82% on BFCL while base generation reaches only 2-10%, suggesting pretraining forms the representation and instruction tuning later wires it to the output. We measure tool identity selection and JSON schema correctness in single-turn fixed-menu settings; multi-turn agentic transfer is more fragile and is discussed in Limitations.