Search, Inspect, Fetch: 구조 인식 Boolean 검색으로 Deep-Search 에이전트 개선하기 (Sieve)
Search, Inspect, Fetch: Exploiting Structure-Aware Boolean Retrieval for Deep-Search Agents
TL;DR Highlight
웹페이지 구조로 Boolean 필터·섹션 fetch를 했더니 토큰 20.7–50.6% 절감, 정확도↑
Who Should Read
딥서치 에이전트가 통째로 가져온 웹페이지 때문에 컨텍스트 비용이 폭증해 고민인 에이전트·RAG 개발자
Core Mechanics
- 페이지 통째 방문이 낭비의 원인
- 기존 Search–Visit은 섹션 하나만 필요해도 웹페이지 전체를 컨텍스트에 넣는다.
- Sieve는 검색→카드 확인→섹션만 fetch 순서로 구조를 끝까지 유지한다.
- Boolean 필터로 후보를 먼저 거른다
- BQL(Boolean Query Language)로 title, body, date 같은 필드에 AND/OR/NOT 조건을 걸어 후보 집합을 만든다.
- 그 안에서 BM25나 dense 같은 랭커가 순서만 매긴다.
- 결과 카드에 25토큰 스니펫이 핵심이다
- 카드에는 제목, 섹션 헤딩, 질의 중심 25토큰 스니펫이 들어간다.
- 스니펫을 빼면 정확도가 2.9–6.8점 떨어진다.
- 0건이면 조건을 풀어주는 폴백이 필요하다
- 결과가 0건일 때만 부분 일치, 그다음 BM25 전체 순위로 완화한다.
- 폴백을 끄면 BCP-S 정확도가 6.4점 떨어진다.
- 에이전트 모델을 바꿔도 효과가 유지된다
- 3개 백본×3개 컬렉션 9쌍 중 8쌍에서 토큰이 줄고 7쌍에서 정확도가 올랐다.
- 병목은 컬렉션마다 다르다: BCP-S는 검색 실패, Wikipedia 계열은 답 합성 실패가 크다.
Evidence
- 가장 정확한 Search–Visit 대비 정확도↑, 토큰↓
- 기본 Sieve(BM25+Dense)는 HotpotQA +1.6, MuSiQue +3.1, BCP-S +0.7점 높다.
- 토큰은 각각 30.4%, 50.6%, 20.7% 적다.
- BM25 Search–Visit 대비 BCP-S 비교
- 판정 정확도가 34.7에서 37.2로 올랐다(+2.5점).
- 토큰은 68k에서 46k로 줄었다.
- BQL 없는 Search–Fetch 대비 9쌍 모두 개선
- 같은 랭커와 섹션 fetch를 쓰는 대조군보다 랭커×컬렉션 9쌍 모두 정확도가 높았다.
- 스니펫·폴백 제거 실험(BCP-S)
- 스니펫을 빼면 37.2에서 30.4로 떨어진다.
- 폴백 없는 strict Boolean은 30.8이다.
How to Apply
- fetch 도구에 섹션 단위 반환 추가하기
- 오늘 에이전트의 visit 툴 결과를 헤딩 기준으로 쪼개 섹션 이름 목록만 먼저 돌려주게 바꿔라.
- 에이전트가 섹션 이름을 지정해야만 본문을 주도록 하라.
- 검색 결과 카드에 헤딩과 짧은 스니펫 넣기
- 결과 목록에 제목, 섹션 헤딩, 질의 단어 중심 25토큰 스니펫을 붙여라.
- 본문 전체는 넣지 마라.
- 검색 툴에 필드·Boolean 필터 열기
- title, body, date 필드와 AND/OR/NOT 조건을 받는 파라미터를 추가하라.
- 필터로 거른 집합 안에서만 기존 랭커를 돌려라.
- 0건 쿼리용 폴백 구현하기
- 필터 결과가 0건일 때만 조건 일부 일치 결과, 그다음 전체 BM25 순위로 완화하라.
- 결과가 있는 쿼리는 조건을 그대로 유지하라.
Try It
# Claude나 ChatGPT에 붙여넣기 — 논문 방법(Search–Inspect–Fetch)의 간이 버전
너는 리서치 에이전트다. 아래 규칙을 따라 {{질문}}에 답하라.
규칙:
1. 검색: 아래 문서 목록에서 조건에 맞는 후보만 고른다. 필드 조건(제목/본문/날짜)과 AND/OR/NOT을 명시적으로 써서 쿼리를 먼저 작성한다.
2. 확인: 후보마다 제목과 섹션 헤딩 목록만 보고, 어떤 섹션을 열지 정한다. 본문 전체를 요구하지 마라.
3. 가져오기: 선택한 섹션 이름을 정확히 지정해 그 섹션만 읽는다. 없는 섹션 이름을 추측하지 마라.
4. 결과가 0건이면 조건을 하나씩 풀어 다시 쓴다.
5. 근거 문장에서 그대로 복사한 가장 짧은 답만 낸다.
문서 목록(제목 / 섹션 헤딩):
{{문서}}
이어서 해 볼 것: 같은 질문을 문서 전체를 붙여 물어본 경우와 토큰 수·답을 비교해 보라.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%↓
Related Resources
Original Abstract (Expand)
Existing deep-search agents use a Search-Visit workflow that retrieves whole webpages without considering the structure they expose through titles, headings, sections, and metadata. This prevents agents from directly constraining retrieval to parts of a webpage and often carries irrelevant content into their context. We introduce Sieve, a search-inspect-fetch strategy driven by a Boolean Query Language (BQL): it searches webpage fields to filter candidates, uses an interchangeable ranker to order them, presents structure-rich result cards for inspection, and fetches only selected sections. Across three QA collections, Sieve is more accurate than the strongest conventional Search-Visit configuration on each collection while using 20.7-50.6% fewer tokens. Boolean filtering improves every tested ranker, and the accuracy-context advantage persists across retriever choices and agent backbones. Our implementation is included in the SkimSearchAgent library https://github.com/ielab/skim-search-agent.