체계적 문헌 고찰 스킬은(는) 무엇을 하나요?
개요
이 스킬은 연구 주제에 대한 여러 학술 논문을 대상으로 구조화된 체계적 문헌 고찰(SLR) 을 생성합니다. 주제 질의가 주어지면 arXiv를 검색하고, 각 논문에서 구조화된 메타데이터(연구 질문, 방법론, 주요 발견, 한계점)를 병렬로 추출하며, 전체 논문 집합에 걸친 주제를 종합하고, 일관된 인용 형식을 갖춘 최종 보고서를 출력합니다.
academic-paper-review와의 차이점: 해당 스킬은 단일 논문에 대한 심층 피어 리뷰를 수행합니다. 이 스킬은 여러 논문에 대한 폭 우선(breadth-first) 종합을 수행합니다. 사용자가 하나의 논문 URL을 건네며 "이 논문을 검토해 주세요"라고 요청하면 academic-paper-review로 안내하세요.
이 스킬을 사용해야 하는 경우
사용자가 다음 중 하나를 원할 때 이 스킬을 사용하세요.
- 특정 주제에 대한 문헌 조사("트랜스포머 어텐션 변형에 대해 조사해 줘", "확산 모델에 관한 문헌을 검토해 줘")
- 여러 논문에 걸친 종합("최근 논문들은 X에 대해 뭐라고 말하나?", "Y에 관한 논문들의 방법론을 비교해 줘")
- 일관된 인용 형식을 갖춘 체계적 문헌 고찰("APA 형식으로 Z에 대한 SLR을 수행해 줘")
- 특정 주제에 대한 주석이 있는 참고문헌 목록
- 특정 기간 동안 해당 분야의 연구 동향 개요
다음의 경우에는 이 스킬을 사용하지 마세요.
- 사용자가 정확히 하나의 논문을 제공하고 검토를 요청하는 경우(
academic-paper-review사용) - 사용자가 여러 출처를 종합할 필요가 없는 사실적 질문을 하는 경우(직접 답변)
- 사용자가 학술적 엄격함 없이 일반 웹 검색을 원하는 경우(표준 웹 검색 사용)
워크플로우
워크플로우는 5단계로 구성됩니다. 순서대로 따르세요.
1단계: 계획 수립
검색을 시작하기 전에 다음 사항을 사용자와 확인하세요. 이 중 명확하지 않은 것이 있으면 누락된 부분을 포함하는 하나의 명확화 질문을 하세요. 질문을 한 번에 하나씩 하지 마세요.
- 주제: 평이한 영어로 된 연구 분야 (예: "transformer attention variants")
- 범위: 논문 수(기본값 20개, 최대 50개), 선택적 시간 범위(예: "최근 2년"), 선택적 arXiv 카테고리(예:
cs.CL,cs.CV) - 인용 형식: APA, IEEE 또는 BibTeX(사용자가 특정 학회를 위해 작성하는 것이 아닌 경우 기본값 APA)
- 출력 위치: 최종 보고서를 저장할 위치(기본값
/mnt/user-data/outputs/)
사용자가 "50개 이상"을 요청하면 정중하게 최대 50개로 제한하고, 그 이상이면 종합 품질이 급격히 저하된다는 점을 설명하세요. 더 큰 규모의 조사는 하위 주제별로 분할해야 합니다.
2단계: arXiv 검색
번들 검색 스크립트를 호출하세요. 다른 수단으로 arXiv를 긁어오려고 하지 마세요. 또한 HTTP 클라이언트를 직접 작성하지 마세요. 이 스크립트는 URL 인코딩, Atom XML 파싱 및 ID 정규화를 올바르게 처리합니다.
python /mnt/skills/public/systematic-literature-review/scripts/arxiv_search.py \
"<topic>" \
--max-results <N> \
[--category <cat>] \
[--sort-by relevance] \
[--start-date YYYY-MM-DD] \
[--end-date YYYY-MM-DD]
중요 — 검색 전에 2-3개의 핵심 키워드를 추출하세요. 사용자의 전체 주제 설명을 질의로 전달하지 마세요. 스크립트를 호출하기 전에 주제를 가장 필수적인 2-3개 용어로 축소하세요. "in computer vision", "for NLP", "variants", "recent"와 같은 수식어는 --category 또는 --start-date에 속하므로 질의 문자열에 포함하지 마세요.
질의 문구 — 짧게 유지하세요. 스크립트는 arXiv에서 구문 일치를 위해 여러 단어로 된 질의를 큰따옴표로 감쌉니다. 즉:
"diffusion models"→ 정확한 구문 검색 → 좋음, 관련 논문 반환"diffusion models in computer vision"→ 정확히 5단어 구문 검색 → 너무 구체적, 결과 0개 반환 가능성 높음 (해당 정확한 문자열을 포함한 논문이 거의 없기 때문)
질의로 2-3개의 핵심 키워드를 사용하고, --category를 사용하여 분야를 좁히세요. 분야명을 질의에 넣지 마세요. 예시:
| 사용자 말 | 좋은 질의 | 나쁜 질의 |
|---|---|---|
| "diffusion models in computer vision" | "diffusion models" --category cs.CV | "diffusion models in computer vision" |
| "transformer attention variants" | "transformer attention" | "transformer attention variants in NLP" |
| "graph neural networks for molecules" | "graph neural networks" --category cs.LG | "graph neural networks for molecular property prediction" |
스크립트는 JSON 배열을 표준 출력으로 출력합니다. 각 논문에는 다음 필드가 포함됩니다: id, title, authors, abstract, published, updated, categories, pdf_url, abs_url.
정렬 전략:
- 항상
relevance정렬 사용 — arXiv의 BM25 스타일 점수는 결과가 실제로 사용자의 주제와 관련 있도록 보장합니다.submittedDate정렬은 주제 관련성과 관계없이 카테고리에서 가장 최근에 제출된 논문을 반환하며, 대부분 주제와 무관한 결과를 생성합니다. - 사용자가 "최근" 논문을 요청하거나 시간 범위를 제공하는 경우,
--sort-by relevance를--start-date와 함께 사용하여 관련성을 유지하면서 시간 범위를 제한하세요. 예: "최근 확산 모델 논문" →--sort-by relevance --start-date 2024-01-01,--sort-by submittedDate가 아님. submittedDate정렬은 사용자가 명시적으로 시간 순서를 요청할 때만 적절합니다(예: "게시된 순서대로 논문을 보여주세요"). 이는 드문 경우입니다.lastUpdatedDate는 거의 유용하지 않으며, 사용자가 요청하지 않는 한 무시하세요.
검색은 정확히 한 번만 실행하세요. 결과가 불완전해 보여도 수정된 질의로 재시도하지 마세요. arXiv의 관련성 순위는 그대로입니다. 다른 질의 문구로 재시도하는 것은 도구 호출을 낭비하고 재귀 한계에 도달할 위험이 있습니다. 결과가 실제로 비어 있으면(0개 논문) 사용자에게 알리고 주제를 넓히거나 카테고리 필터를 제거하도록 제안하세요.
스크립트가 요청된 것보다 적은 수의 논문을 반환하면, 그것이 해당 질의에 대한 arXiv 결과 집합의 실제 크기입니다. 목록을 늘리지 말고 — 실제 개수를 사용자에게 보고하고 진행하세요.
스크립트가 실패하면(네트워크 오류, arXiv로부터의 200이 아닌 응답) 사용자에게 오류를 알리고 중단하세요. 논문 메타데이터를 조작하지 마세요.
검색 결과를 파일에 저장하지 마세요 — JSON은 3단계를 위해 컨텍스트에 유지됩니다. 전체 워크플로우에서 저장되는 유일한 파일은 5단계의 최종 보고서입니다.
3단계: 메타데이터 병렬 추출
task 도구를 통해 하위 에이전트에 추출을 위임해야 합니다. 직접 메타데이터를 추출하지 마세요. 이는 필수 사항입니다. 특히 다음을 수행하지 마세요:
- ❌
python -c "papers = [...]"또는 논문을 처리하기 위한 Python/bash 스크립트 작성 - ❌ 초록을 하나씩 읽어 자신의 컨텍스트에서 메타데이터를 인라인으로 추출
- ❌ 이 단계에서
task이외의 도구 사용
대신 반드시 task 도구를 호출하여 하위 에이전트를 생성해야 합니다. 이유: 10-50개 논문을 자신의 컨텍스트에서 추출하면 너무 많은 토큰을 소비하고 4단계의 종합 품질이 저하됩니다. 각 하위 에이전트는 자체 배치의 논문만 가지고 격리된 컨텍스트에서 실행되어 더 깔끔한 추출을 생성합니다.
논문을 약 5개씩 배치로 나눈 다음, 각 배치에 대해 task 도구를 subagent_type: "general-purpose"로 호출하세요. 각 하위 에이전트는 논문 초록을 텍스트로 받고 구조화된 JSON을 반환합니다.
동시성 제한: 턴당 최대 3개의 하위 에이전트. DeerFlow 런타임은 MAX_CONCURRENT_SUBAGENTS = 3을 적용하며, 동일한 턴에서 추가 디스패치는 자동으로 삭제됩니다. 이 사실이 LLM에 알려지지 않으므로 아래 라운드 전략을 엄격히 따르세요.
라운드 전략 — 이 결정 테이블을 사용하고, 스스로 분할을 계산하지 마세요:
| 논문 수 | ~5개 논문 배치 | 라운드 | 라운드당 하위 에이전트 수 |
|---|---|---|---|
| 1–5 | 1배치 | 1라운드 | 1개 |
| 6–10 | 2배치 | 1라운드 | 2개 |
| 11–15 | 3배치 | 1라운드 | 3개 |
| 16–20 | 4배치 | 2라운드 | 3 + 1 |
| 21–25 | 5배치 | 2라운드 | 3 + 2 |
| 26–30 | 6배치 | 2라운드 | 3 + 3 |
| 31–35 | 7배치 | 3라운드 | 3 + 3 + 1 |
| 36–40 | 8배치 | 3라운드 | 3 + 3 + 2 |
| 41–45 | 9배치 | 3라운드 | 3 + 3 + 3 |
| 46–50 | 10배치 | 4라운드 | 3 + 3 + 3 + 1 |
같은 턴에 3개 이상의 하위 에이전트를 디스패치하지 마세요. 행에 "2라운드 (3 + 1)"이라고 표시되면, 이는 다음을 의미합니다: 첫 번째 턴에서 3개의 하위 에이전트를 병렬로 디스패치하고, 모든 3개가 완료될 때까지 기다린 다음, 두 번째 턴에서 1개의 하위 에이전트를 디스패치합니다. 라운드는 메인 에이전트 레벨에서 엄격히 순차적입니다.
논문 수가 행 사이에 해당하는 경우(예: 23개 논문) 다음 행의 레이아웃으로 반올림하되 실제로 필요한 만큼의 배치만 디스패치하세요. 결정 테이블은 모양을 제공할 뿐 엄격한 규칙이 아닙니다.
메인 에이전트 레벨에서 배치를 수행하세요: 2단계에서 각 논문의 초록을 이미 가지고 있으므로 각 하위 에이전트는 순수 텍스트 입력을 받습니다. 하위 에이전트는 네트워크나 샌드박스에 액세스할 필요가 없습니다. 이들의 유일한 임무는 텍스트를 읽고 JSON을 반환하는 것입니다. 하위 에이전트에게 arxiv_search.py를 다시 실행하도록 요청하지 마세요. 이는 토큰을 낭비하고 속도 제한 위험을 초래합니다.
각 하위 에이전트가 수신할 내용(구조화된 프롬프트):
Execute this task: extract structured metadata and key findings from the
following arXiv papers.
Papers:
[Paper 1]
arxiv_id: 1706.03762
title: Attention Is All You Need
authors: Ashish Vaswani, Noam Shazeer, ...
published: 2017-06-12
abstract: <전체 초록 텍스트>
[Paper 2]
arxiv_id: ...
...
For each paper, return a JSON object with these fields:
- arxiv_id (string)
- title (string)
- authors (list of strings)
- published_date (string, YYYY-MM-DD)
- research_question (1 sentence, what problem the paper tackles)
- methodology (1-2 sentences, how they tackle it)
- key_findings (3-5 bullet points, what they actually found)
- limitations (1-2 sentences, what they acknowledge or what is obviously missing)
Return the result as a JSON array, one object per paper, in the same
order as the input. Do not include any text outside the JSON — no
preamble, no markdown fences, just the array.
하위 에이전트 결과 파싱: task 도구는 Task Succeeded. Result: [...JSON...]와 같은 고정 접두사가 있는 문자열을 반환합니다. JSON을 파싱하기 전에 Task Succeeded. Result: 접두사(또는 Task failed. / Task timed out. 접두사)를 제거하세요. 배치가 실패했거나 파싱 불가능한 JSON을 반환하는 경우 기록하고 영향을 받은 논문을 기록한 후 나머지 배치로 계속 진행하세요. 하나의 잘못된 배치 때문에 전체 종합을 실패로 처리하지 마세요.
모든 라운드가 완료되면 배치별 배열을 단일 논문 메타데이터 객체 목록으로 병합하고 순서를 유지하세요.
4단계: 종합 및 형식화
이제 최종 SLR 보고서를 생성합니다. 여기서 두 가지 작업이 이루어집니다: 논문 간 종합(주제 분석) 및 인용 형식화.
논문 간 종합: 보고서는 논문을 단순히 나열하는 것 이상을 수행해야 합니다. 최소한 다음을 식별하세요:
- 주제: 논문 집합 전반에 걸친 3-6개의 반복되는 연구 방향, 접근 방식 또는 문제 프레임
- 일치점: 여러 논문이 동의하는 발견
- 불일치점: 논문이 다른 결론에 도달하거나 호환되지 않는 방법론을 사용하는 부분
- 공백: 전체 문헌이 아직 다루지 않는 부분(종종 "한계점" 필드에 명시적으로 언급됨)
논문 집합이 너무 작거나 주제 분석을 지원하기에 너무 이질적인 경우(예: 완전히 다른 하위 주제에 대한 5개 논문) 보고서에 그렇게 명시적으로 언급하고 존재하지 않는 주제를 강제로 만들지 마세요.
인용 형식화: 정확한 형식은 사용자 선호도에 따라 다릅니다. 사용자가 요청한 형식과 일치하는 템플릿 파일 만 읽으세요. 세 개 모두 읽지 마세요:
- templates/apa.md — APA 7판. 사회 과학 및 대부분의 CS 저널의 기본값입니다. 사용자가 APA를 요청하거나 형식을 지정하지 않은 경우 사용하세요.
- templates/ieee.md — IEEE 숫자 인용. 사용자가 IEEE 회의 또는 저널을 대상으로 하거나 명시적으로 IEEE를 요청하는 경우 사용하세요.
- templates/bibtex.md — BibTeX 항목. 사용자가 BibTeX, LaTeX 또는 기계 판독 가능한 참고 문헌을 언급하는 경우 사용하세요. 중요: arXiv 논문은
@article이 아닌@misc로 인용됩니다. BibTeX 템플릿이 이를 명시적으로 다룹니다.
각 템플릿은 인용 규칙과 전체 보고서 구조(집행 요약, 주제, 논문별 주석, 참고 문헌, 방법론 섹션)를 모두 포함합니다. 보고서 본문에 대해 템플릿의 구조를 그대로 따르고, 3단계에서 추출한 메타데이터로 내용을 채우세요.
5단계: 저장 및 제시
전체 보고서를 /mnt/user-data/outputs/slr-<topic-slug>-<YYYYMMDD>.md에 저장하세요. 여기서 <topic-slug>는 소문자 하이픈으로 연결된 주제입니다(예: transformer-attention). 그런 다음 present_files 도구를 해당 경로로 호출하여 사용자가 다운로드할 수 있도록 하세요.
채팅 메시지에서 사용자가 파일을 열지 않고도 즉시 가치를 확인할 수 있도록 짧은 미리보기를 보여주세요.
- 집행 요약 — 보고서 상단의 3-5문장 단락, 그대로.
- 주제 목록 — 4단계 종합에서 식별한 주제의 글머리 기호 목록(주제 이름 + 한 줄 설명. 전체 주제 섹션은 아님).
- 논문 수 + 파일 포인터 — 예: "전체 보고서(20개 논문, 논문별 주석, 형식화된 참고 문헌 포함)가
slr-transformer-attention-20260409.md에 저장되었습니다."
2000단어 이상의 전체 보고서를 인라인으로 덤프하지 마세요. 논문별 주석, 참고 문헌 및 방법론은 파일에 있습니다. 미리보기를 통해 사용자는 보고서를 한눈에 판단하고 열지 여부를 결정할 수 있습니다.
예시
예시 1: 일반적인 SLR 요청
사용자: "최근 트랜스포머 어텐션 변형에 대한 체계적 문헌 고찰을 수행해 주세요. 20개 논문, APA 형식."
당신의 흐름:
- 1단계: 주제(트랜스포머 어텐션 변형), 범위(20개 논문, 기본 시간 범위), 형식(APA) 확인. 누락된 경우에만 하나의 명확화 질문(예: "특정 시간 범위가 있나요? 아니면 기본값인 지난 3년으로 할까요?")을 하세요.
- 2단계:
arxiv_search.py "transformer attention" --max-results 20 --sort-by relevance --start-date 2023-01-01 - 3단계: 20개 논문 → 라운드 1 = 3개 하위 에이전트 × 5개 논문 = 15개 처리, 라운드 2 = 1개 하위 에이전트 × 5개 논문 = 5개 처리
…
[번역을 위해 잘림]