Plan or Retrieve First? 대규모 도구 탐색 아키텍처 비교 연구
Plan or Retrieve First? A Scale Study of Tool Discovery Architectures
TL;DR Highlight
도구 1개짜리 질문은 바로 검색, 여러 개 필요한 질문은 계획 먼저가 유리했다
Who Should Read
수천 개 API 중 에이전트가 쓸 도구를 골라 주는 검색 단계 때문에 고민인 에이전트 백엔드 개발자
Core Mechanics
- 질문 복잡도에 따라 승자가 갈린다
- 도구 1개 질문(G1)은 질문을 바로 임베딩해 검색하는 RtP가 이겼다.
- 도구 여러 개 질문(G2, G3)은 LLM이 먼저 가짜 도구 명세를 만드는 PtR이 이겼다.
- 이 방향은 k=1~20, 레지스트리 1k~47k개, 두 모델(Gemini 2.5 Flash, gpt-oss-120b)에서 같았다.
- PtR은 가짜 도구 명세로 검색한다
- LLM이 도구 정의 없이 질문만 보고 필요한 함수 이름과 이유를 JSON으로 만든다(Abstract Tool Stub).
- 이 스텁을 임베딩해 실제 도구 레지스트리에서 검색한 뒤 플래너에 넘긴다.
- 학습 없이 프롬프트 한 번이면 된다.
- 환각이 단순 질문에선 독, 복잡한 질문에선 약이다
- 질문에 API 이름이나 브랜드가 그대로 있으면 스텁이 이름을 일반화해 버려 놓친다.
- 기능을 설명하는 복잡한 질문은 스텁이 하위 요구로 쪼개 줘서 각각 검색된다.
- PtR은 비용이 약 2배, 지연도 한 번 늘어난다
- 탐색용 LLM 호출 때문에 토큰이 75~104% 늘어난다.
- 이 호출이 검색 전에 순차로 실행돼 왕복 지연이 한 번 추가된다.
- 단순 질문은 비용만 늘고 recall이 떨어진다.
Evidence
- G1에서는 RtP가 앞섰다
- ToolBench G1(n=200) recall은 RtP 0.372, PtR 0.289±0.010이다(p=0.002).
- pass rate는 RtP 0.884±0.015, PtR 0.840±0.024다(p=0.022).
- G2에서는 PtR이 앞섰다
- G2(n=200) recall은 PtR 0.188±0.007, RtP 0.143이다(p<0.001).
- pass rate는 PtR 0.855±0.020, RtP 0.747±0.015다(p<0.001).
- 질문별 승수는 PtR 69, RtP 30이다.
- G3는 recall 차이가 유의하지 않았다
- G3(n=100) recall은 PtR 0.172±0.008, RtP 0.160이며 유의하지 않다.
- pass rate는 PtR 0.820±0.014, RtP 0.732±0.010이다(p<0.001).
- gpt-oss-120b에서는 G3 recall이 RtP 쪽으로 뒤집혔다(0.160 vs 0.146, p=0.035).
- 라우팅하면 탐색 호출 비용을 줄인다
- G1은 RtP, G2와 G3는 PtR로 보내면 PtR 탐색 호출 오버헤드가 약 36% 줄고 총 추론 토큰은 약 16% 줄었다.
- G2에서 PtR은 토큰 +80%로 recall +0.042이고, G1에서는 토큰 +75%에 recall -0.072다.
How to Apply
- 도구 검색 질의를 G1형과 G2형으로 나눠 보기
- 오늘 로그에서 질의 50개를 뽑아 도구 하나로 끝나는 것과 여러 도구가 필요한 것으로 직접 분류하라.
- 각 질의에 현재 top-5 검색 결과가 정답 도구를 포함하는지 표시하라.
- 다중 도구 질의의 miss 비율을 확인하라.
- 다중 도구 질의에만 스텁 생성 단계 추가하기
- 논문의 discovery 프롬프트로 질의마다 JSON 스텁을 만들고 각 스텁을 따로 임베딩 검색하라.
- 결과는 중복을 제거하고 재랭킹해 top-k로 플래너에 넘겨라.
- 기존 RtP와 recall을 비교하라.
- RtP top-1 유사도 임계값으로 라우팅하기
- 기존 검색의 top-1 코사인 점수를 로깅하고 G1형과 G2형 질의의 분포를 비교하라.
- 임계값 위면 RtP, 아래면 PtR로 보내라.
- 논문은 이 방식을 검증하지 않았으므로 자체 데이터로 임계값을 정하라.
- 스텁에서 고유명사 보존하기
- 스텁 프롬프트에 질의의 브랜드·API 이름을 그대로 유지하라는 지시를 넣어라.
- 논문은 이 보정이 G1 오라우팅을 줄일 수 있다고만 언급했으므로 직접 측정하라.
Try It
# Claude나 ChatGPT에 붙여넣기: 논문의 PtR 탐색 프롬프트 간이 버전
You are a tool discovery assistant. Given a user query, identify what tools or APIs would be needed to answer it. You do NOT have access to any tool registry — instead, describe the tools you think are needed based on the query alone.
Respond ONLY with a JSON array:
[
{"tool_name": "hypothetical_tool_name", "reasoning": "why this tool is needed"}
]
Be specific about tool functionality. Use snake_case for tool names.
사용자 질문: {{질문}}
이어서 해 볼 것: 나온 tool_name을 각각 임베딩 검색 쿼리로 써서 기존 질문 직접 검색 결과와 비교해 보세요.Terminology
관련 논문
같은 시뮬레이션, 다른 근거: 도구 출력을 파일로 넘기면 LLM 에이전트 정확도가 어디서 깎이나
긴 툴 출력을 파일로 넘기자 GPT-5.1은 정확도 11.3%p 하락, 정식 출력 지정하니 회복
가짜 뉴스가 진짜 폭락을: LLM 트레이딩 에이전트 대상 정보 주입 공격
가짜 헤드라인 한 줄로 LLM 트레이딩 에이전트 62%를 조종했다(프롬프트 주입은 14%)
Harness Engineering 101: LLM은 뇌, harness는 몸
에이전트는 JSON 배열을 관리하는 루프이고, 16개 챕터로 직접 만들어 본다
Harness²: 에이전트 harness를 스스로 고쳐 쓰는 재귀 최적화 프레임워크
모델은 고정하고 harness를 재귀로 고쳤더니 벤치마크 점수가 최대 11.8%p 올랐다
해고된 Savannah 경찰관, ICE 요원 남편에게 Flock 계정 공유
경찰관이 Flock 계정을 남편(ICE 요원)에게 공유했고, 감사에서 983건 검색이 드러나 해고됐다
tmux와 Claude Code: 세션, send-keys, 그리고 한계선
tmux로 Claude Code 여러 개를 돌리면 편하지만 에이전트 4개쯤에서 한계가 온다
Hybrid Reasoning Agents: 잠재 공간에서 생각하고 텍스트로 행동하는 LLM 에이전트
잠재 공간 추론과 텍스트 도구 호출을 섞었더니 성능 10.4%↑, 토큰 최대 54.7%↓
Original Abstract (Expand)
Tool-augmented LLM agents discover relevant APIs from large registries before planning execution, yet finite context windows prohibit injecting all tool definitions into a single prompt. The dominant approach, which we term Retrieve-then-Plan (RtP), embeds the user query and retrieves similar tools via approximate nearest-neighbor search. We study an alternative Plan-then-Retrieve (PtR) paradigm in which the LLM first generates Abstract Tool Stubs (hypothesized function signatures describing needed capabilities) which then serve as retrieval queries against the registry. Evaluating on ToolBench (46,984 unique API endpoints, 50 categories) across single-tool (G1), intra-category multi-tool (G2), and cross-category multi-tool (G3) query subsets, we find a clear complexity-dependent crossover: RtP outperforms PtR on single-tool queries while PtR outperforms RtP on multi-tool queries. This crossover holds at every retrieval budget (k=1 to 20), is robust across registry sizes from 1k to 47k APIs, and is consistent across model families (Gemini 2.5 Flash and gpt-oss-120b). We characterize a stub-hallucination failure mode (the LLM invents plausible but non-existent API names) that acts as a double-edged sword: on simple queries PtR's stubs abstract away proper-noun signals that RtP matches directly, yet on complex queries the same mechanism decomposes multi-faceted intent into functional sub-needs. We further analyze token overhead and show that PtR's extra discovery call roughly doubles inference cost, which pays off on multi-tool queries but hurts on single-tool ones, motivating complexity-adaptive routing as a practical direction, one that can be driven by a zero-cost signal already present in the pipeline (RtP's top-1 retrieval score).