기획서 작성 프롬프트: 한 줄 아이디어를 1장 뼈대로
한 줄 요청으로 기획서를 시키면 입력에 없던 시간대·일정이 입력 값과 섞여 나옵니다. 값마다 출처 표시를 달게 하고 스크립트로 누락을 대조하는 방법입니다.
「이 아이디어로 기획서 써 줘」 한 줄이면 그럴듯한 문서가 나옵니다. 문제는 숫자입니다. 아래 입력의 수치는 보관 기간 7일과 개발 인원 2명뿐인데, 결과에는 입력에 없던 시간대와 일정이 섞여 나오고 어디까지가 입력인지 표시가 없습니다.
[1] 입력입니다. 가상 앱에 알림 하나를 넣는 아이디어에 기능 3개와 제약 2개를 붙였습니다.
아이디어: 동네 도서관 앱 「책이음」(가상)에 예약한 책이 도착하면 알림을 보낸다. 핵심 기능:1. 예약한 책이 대출 가능 상태가 되면 푸시 알림을 보낸다.2. 알림에서 바로 예약 상세 화면으로 들어간다.3. 이용자가 알림을 끄거나 받는 시간대를 고를 수 있다. 알려진 제약:- 예약 책은 도서관 서가에 보관되는 기간이 7일이다.- 현재 앱에는 푸시 알림 기능이 없고, 이번 분기 개발 인원은 2명이다.[2] 먼저 「다음 아이디어로 기획서 써 줘.」 와 입력만 넣어 세 번 돌렸습니다. 1,900~2,100자가 나왔고, 「취소율 30% 감소」 같은 목표 수치는 세 번 모두 만들지 않았습니다. 대신 입력에 없던 값이 본문에 섞였습니다.
| 입력에 없던 값 | 나온 횟수 |
|---|---|
| 수신 시간대 「09:00~21:00」 (예시 또는 기본값 제안) | 3회 중 2회 |
| 「5일차 재알림」 「만료 1~2일 전」 같은 숫자 예시 | 3회 중 2회 |
| 1~3주차부터 10~12주차까지의 일정표 | 3회 중 1회 |
「예:」 를 붙인 곳이 있고 한 번은 끝에 「가정」 이라고 밝혔지만, 값마다 입력인지 채운 것인지 구분되지는 않습니다. 아래 5번의 스크립트로 보면 세 번 모두 숫자가 든 줄 17~23개에 표시가 없고 가정·미정 칸이 없어 실패합니다.
[3] 칸을 일곱 개로 고정하고, 숫자 줄마다 출처를 달게 하고, 모르는 것은 「미정 사항」 에 질문으로 적게 합니다. 모른다고 말해도 된다고 허용하면 지어내기가 준다는 Anthropic 환각 줄이기 문서의 원칙을 쓴 것입니다.
아래 <idea> 의 내용으로 A4 한 장 분량의 기획서 뼈대를 만드세요. 규칙:- 다음 일곱 개 제목을 이 순서로 씁니다: 문제 / 대상 / 범위 안 / 범위 밖 / 성공 기준 / 가정 / 미정 사항.- 숫자·기간·인원·사용자 수가 들어간 줄에는 끝에 출처 표시를 붙입니다. <idea> 에 있던 값이면 [입력], 입력에 없는데 당신이 채운 값이면 [가정].- <idea> 에 없는 숫자는 만들지 않는 것이 원칙입니다. 꼭 필요하면 [가정] 으로 표시하고 「가정」 제목 아래에도 옮깁니다. 알 수 없는 것은 지어내지 말고 「미정 사항」 에 질문 형태로 적습니다.- 「범위 안」 과 「범위 밖」 은 같은 항목이 겹치지 않게 씁니다. 「범위 밖」 은 이번에 일부러 하지 않는 것 3개 이상.- 성공 기준은 측정 방법이 함께 있어야 하고, 기준값을 모르면 값 자리에 「미정」 이라고 씁니다.- 제목과 글머리표만 쓰고, 다른 설명은 붙이지 않습니다. <idea>[4] 입력 뒤에 닫는 태그를 붙여 돌립니다. 두 번 돌렸고 파일 이름만 out.ko.2.txt 로 다릅니다.
$ (cat head.ko.txt idea.ko.txt; echo "</idea>") > prompt.ko.txt$ claude -p --model claude-sonnet-5-5 --max-turns 1 --tools "" --setting-sources "" --strict-mcp-config < prompt.ko.txt > out.ko.1.txt첫 결과의 「가정」 칸입니다. 일정표와 목표값은 없고 성공 기준마다 「기준값: 미정」 이 붙었으며, 「미정 사항」 은 7개였습니다.
## 가정- 앱 서버가 도서관 시스템에서 대출 가능 상태 전환을 감지할 수 있다.- 이용자가 기기의 알림 권한을 허용한다.- 이번 분기 개발 인원 2명 기준으로 범위를 잡았다. [입력][5] 숫자 줄의 태그 누락, [입력] 인데 입력에 없는 숫자, 가정·미정 0개, 범위 안·밖의 같은 줄을 스크립트로 찾습니다.
#!/usr/bin/env python3import re, sysidea, out = (open(p, encoding="utf-8").read() for p in sys.argv[1:3])known = set(re.findall(r"\d+", idea)); sec = {}; cur = ""; bad = 0for line in out.splitlines(): if line.startswith("#"): cur = line.lstrip("# ").strip(); sec[cur] = []; continue if not line.strip(): continue sec.setdefault(cur, []).append(line.strip("-* ").strip()) nums = re.findall(r"\d+", line) if nums and "[입력]" not in line and "[가정]" not in line: print("UNTAGGED :", line); bad += 1 elif nums and "[입력]" in line and not set(nums) <= known: print("NOT-INPUT:", line); bad += 1a, q = len(sec.get("가정", [])), len(sec.get("미정 사항", []))dup = set(sec.get("범위 안", [])) & set(sec.get("범위 밖", []))print(f"assumptions {a}, open questions {q}, scope overlap {len(dup)}")sys.exit(1 if bad or not a or not q or dup else 0)$ python3 -I check.py idea.ko.txt naive.ko.1.txt | tail -1; echo "exit ${PIPESTATUS[0]}"assumptions 0, open questions 0, scope overlap 0exit 1$ python3 -I check.py idea.ko.txt out.ko.2.txt; echo "exit $?"assumptions 4, open questions 6, scope overlap 0exit 0본 프롬프트는 두 번 모두 통과(exit 0)했습니다.
[6] 스크립트가 못 잡는 오류가 있습니다. [4] 의 마지막 줄이 그렇습니다. 숫자 2 는 입력에 있어 통과하지만 「범위를 잡았다」 는 입력에 없는 모델의 판단입니다. 두 번째 결과의 「미정 사항」 에도 「이번 분기 안에 2명으로 출시까지 가능한 범위인가? [입력]」 이 있었습니다. 질문에 입력 표시가 붙은 것입니다. 규칙을 한 줄 더했습니다.
- [입력] 은 <idea> 에 적힌 값을 그대로 옮긴 줄에만 붙입니다. <idea> 를 바탕으로 한 추론이나 판단(예: 인원으로 일정이 가능한지)은 [입력] 이 아니라 가정입니다.[7] 이 줄을 넣고 두 번 더 돌리자 둘 다 스크립트를 통과했고, 판단은 [가정] 으로 옮겨 갔습니다.
- 개발 인원 2명으로 이번 분기 안에 푸시 기반 마련과 핵심 기능 전체를 구현할 수 있음 [가정]사람이 봐야 할 것은 남았습니다.
- 「가정」 의 「도서관 시스템에서 대출 가능 상태 전환을 앱 서버가 감지할 수 있다」 는 두 결과 모두에 있고 숫자가 없어 표시가 붙지 않습니다. 이 기능 전체가 이 전제에 기대므로 가장 먼저 확인합니다.
- 성공 기준의 기준값이 전부 「미정」 이라 이 문서만으로는 합격 여부를 못 가립니다. 「미정 사항」 의 「목표값은 누가 정하는가」 가 그 자리입니다.
- 같은 프롬프트인데도 「미정 사항」 이 6~8개로 달랐고 항목이 일치하지 않았습니다. 질문은 한 번 돌린 결과만 믿지 말고 합쳐서 봅니다.
사용자 수·일정·기술 제약은 사람이 채웁니다. 「미정 사항」 에 답이 없으면 이 문서를 밖으로 내지 않습니다.