예규·세부기준 통합 검색
search_references공공계약 코퍼스 통합 검색 — 법령+계약예규+조달청·행안부 세부기준+실무가이드. LLM 미사용.
search_law가 법령 조문 전용인 것과 달리 예규·적격심사 세부기준·실무가이드까지
검색한다. 낙찰하한율·적격심사 배점·실무 절차 등 법령 본문 밖 질문에 사용하라.
AI 생성 없이 검색 근거 원문만 반환한다(백엔드 LLM 예산 미차감).
국가·지방 자료를 함께 찾는다. 질의에 지방·지자체 표시가 없을 때 지방 자료(지방계약법령·지자체 예규)를
빼도록 설정된 배포에서는 뺀 수를 `local_excluded`·`local_excluded_note`로 싣는다 — 그때 사용자가
지자체 계약을 묻는 것이면 질의에 '지자체'를 넣어 다시 불러라. 국가·지방 조문이 함께 나오면 사용자의
기관(국가기관·공기업 vs 지자체)에 맞는 쪽을 골라 인용하라.
상위 6칸의 감사원 실무가이드 조각은 1건까지, 3위 아래에 온다 — 넘는 것은 7위 뒤로 밀리고 그 수를
`guide_demoted`로 싣는다. 가이드의 해설이 필요하면 질의에 '감사원'·'가이드'를 넣거나 top_k를 늘려라.
배포에 따라 **부처 질의회신 회답**(조달청·행정안전부 1차 해석, 2020 지방계약 질의회신 사례집)이 히트로
섞인다(`source_type: "interpretation"`). 실무자 질문과 같은 질문에 부처가 답한 글이라 쟁점을 짚는 데
쓰되, 회답 스스로 법적 효력이 없다고 밝히는 해석이고 회답일(`interpretation.answered_on`) 뒤 법령이
바뀌었을 수 있다 — 결론은 `interpretation.cited_refs`의 조문을 get_law_article로 현행 원문 확인한 뒤
말하고, 회답을 인용할 땐 '조달청 회신(연월)'처럼 출처와 시점을 밝혀라. 응답 최상위 `interpretation_hits`가
그 수다.
**세법은 이 도구가 못 본다(2026-08-29 정직 공시).** 세법 조문은 별도 코퍼스
(`tax_articles` 64개 법령)에 있고 여기 붙어 있는 채널(BM25·doc2query·rerank)은
공공계약 코퍼스 것이다. 소득세법·법인세법·부가가치세법류 질문은 **search_law**
(자동으로 세법 축으로 간다) 또는 get_law_article로 가라 — 여기서 0건이 나온 것을
"세법에 그런 규정이 없다"로 옮기지 마라.
히트의 `matched_section`이 있으면 그 자리를 만든 것은 **그 항**이고 실려온 본문은
조 전체다 — 근거를 인용할 때 그 항을 밝혀라. 최상위 히트의 `query_expanded`가 있으면
사용자가 타이핑한 말에 용어집 별칭을 덧붙인 질의로 검색·재정렬한 것이다(실무 어휘를
법령 어휘로 잇는 다리 — 원문은 보존).
최상위 히트에 `matched_reference`가 있으면 질의가 호명한 조문(법령명+조번호)을 문자열
동일성으로 1위에 고정한 것이다 — 의미 유사도 순위가 아니다(시행령/시행규칙 혼동 방지).
히트의 `matched_document`는 질의가 예규·세부기준 이름(예: 공사계약일반조건)을 통째로 불러 그
문서의 최상위 히트를 앞으로 올렸다는 뜻이고(`matched_title`은 같은 일을 별지·별표 **제목**을 통째로
불렀을 때 한 것이다), `contract_kind_axis`는 질의가 계약유형 하나(공사·
용역·물품)만 말해 일반조건 히트끼리 그 유형의 일반조건을 앞에 두었다는 뜻이다(둘 다 순서만 바꿈).
히트에 `table_window: true`가 있으면 별표 문서를 고정 길이로 자른 조각이라 별표 표제가 없다 —
`table_boundaries`·`table_window_note`가 발췌 안의 표 경계와 앞 조각의 소속(직전 별표)을 말하니,
경계 앞 산식·배점을 뒤 별표의 것으로 인용하지 마라.
**히트마다 `as_of`(그 문서가 언제 기준인가)가 붙는다.** 법령·예규는 우리가 들고 있는
스냅샷의 시행일자, 실무가이드는 발간 시점이다. 모르는 문서는 `as_of_unknown: true`로
오고 그것은 "현행"이라는 뜻이 아니다. 정적 발간물이 자기보다 **나중에 개정된 법령**을
인용하고 있으면 `superseded_risk`(어느 법령이 언제 개정됐는지)와 `vintage_warning`이
함께 오고, 응답 최상위 `vintage`가 그 요약이다 — 그때는 발췌의 금액·기준 수치를
현행으로 옮기지 말고 get_law_article로 현행 조문을 대조하라(계약방법 판정은
decide_contract_method가 현행 룰로 낸다).
**응답에 `retrieval_degraded: "dense_unavailable"`이 있으면** 의미(임베딩) 검색이
장애로 못 돌아 키워드(BM25) 채널 후보만으로 답한 것이다(`note_retrieval_degraded`) —
평소보다 좁으니 결과에 없는 규정을 "없다"로 옮기지 마라. 그때 키워드 채널도 0건이면
빈 결과가 아니라 `error:"search_unavailable"`(사유 `reason`)로 온다.
**응답에 `off_topic: true`가 있으면 이 질의는 우리 코퍼스 주제 밖으로 측정됐다**
(2026-09-03). 히트가 남아 있어도 그것은 낱말이 겹쳐 회수된 것일 뿐 근거가 아닐 수
있다 — `off_topic_distance`가 최근접 주제 거리이고 `note_off_topic`이 대역을 말한다.
**이때 "관련 규정이 없다"고 옮기지 마라**(우리가 안 담고 있을 뿐이다). excerpt를
직접 읽어 실제로 질문에 답하는지 확인하고, 범위 밖이면 사용자에게 그 사실을 밝혀라.
**지연은 처음 묻는 질의에 5~20초다**(2026-10-20 실측 7.8~12.1초) — 재정렬 때문이다.
`ranking`(예: `rerank:local+rrf`)이 순서를 만든 리랭커를 말한다. 어느 리랭커가 주 경로인지는
배포 설정이 정하며, `local`이 주 경로인 배포에서는 `rerank:local+rrf`가 곧 정상 경로다.
**주 경로가 후보 전량을 재정렬했으면 `rerank`는 싣지 않는다** — 없으면 정상 경로라는 뜻이다.
주 경로가 아닌 리랭커로 답했거나 후보 일부만 재정렬했으면 응답 최상위에 `rerank`(provider·
fallbacks 사유·보낸 후보 범위 `scope`)가 실리고, 폴백 사유가 있으면 `rerank_degraded: true`도
함께 실린다 — 순서가 주 경로 리랭커의 것이 아니라는 공시다. 같은 질의를 곧바로 반복하지 마라.
히트에 `navigation_excluded`가 있으면 목차·차례 청크(와 본문 없이 장·절 제목만 있는 청크 —
`heading_only_excluded`)를 근거가 아니라서 뺀 수다. 히트의 `section_is_heading_label: true`는
section이 '제 4 절' 같은 장·절 번호뿐이라는 뜻이다 — 쪽 경계에서 잘린 본문 조각이니
절 전체를 대표하는 근거로 인용하지 말고 발췌 문장만 인용하라(`section_note`).
Args:
query: 자연어 검색어 (예: "적격심사 낙찰하한율 50억 미만")
top_k: 반환 건수 (기본 6, **허용 1~12**). 범위 밖 값은 오류가 아니라 가장
가까운 허용값으로 **보정**되며(0·음수→1, 12 초과→12) 보정 사실은 응답의
`top_k_applied`에 요청값·적용값·이유로 공시된다
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| top_k | No |