경쟁사 비교표를 내가 모은 자료로만 만들기
경쟁 서비스 3곳의 요금·기능 비교표를 붙여 넣은 메모로만 만들게 하고, 칸마다 달린 근거 문장을 메모에서 스크립트로 찾아 대조하는 방법입니다.
경쟁 서비스 3곳의 기능·요금 비교표를 오늘 안에 내야 하는데, AI 에 서비스 이름만 던지면 없는 요금제나 기능이 섞여 나올 수 있습니다. 그래서 요금 페이지와 소개 글을 복사해 둔 메모를 직접 붙여 넣고, 그 안의 내용만 쓰게 합니다. 아래 서비스 A·B·C 는 이 글을 위해 지어낸 가상 서비스입니다.
자료: 일부러 빈 곳을 둔 메모 3개
세 메모는 항목이 서로 다르게 빠져 있습니다. A 는 무료 체험·연동·모바일 앱이, B 는 연동이, C 는 파일 한도와 모바일 앱이 없습니다.
[서비스 A 요금 페이지 — 복사본]스타터: 월 9,000원 (사용자 1인 기준). 프로젝트 5개까지.팀: 월 19,000원 (사용자 1인 기준). 프로젝트 무제한, 파일 첨부 파일당 200MB.엔터프라이즈: 별도 문의.모든 요금은 연 결제 시 월 환산 금액입니다. 월 결제는 20% 추가.[서비스 B 기능 소개 — 복사본]- 14일 무료 체험, 카드 등록 없이 시작- 베이직 월 12,000원 / 프로 월 24,000원 (모두 월 결제 기준, 사용자 수 무관 팀 단위 요금)- 모바일 앱: iOS, 안드로이드 제공- 파일 첨부 파일당 50MB (베이직), 500MB (프로)- 프로젝트 수 제한 없음[서비스 C 소개 — 복사본]C 는 소규모 팀을 위한 작업 관리 도구입니다. 무료 플랜은 사용자 3명까지, 프로젝트 2개까지 쓸 수 있습니다.유료 플랜: 1인당 월 15,000원. 슬랙·구글 캘린더 연동 지원.유료 플랜은 30일 환불 보장.짧게 시켰을 때
메모를 붙이고 「비교표로 만들어 줘」 한 줄만 붙여 두 번 돌렸습니다(claude -p --model claude-sonnet-5-5 --max-turns 1 --tools "" --setting-sources "" --strict-mcp-config).
서비스 A, B, C 의 기능과 요금을 비교표로 만들어 줘. 참고 메모:(메모 3개)메모에 없는 기능을 지어내지는 않았고, 빈 곳은 「정보 없음」으로 남겼습니다. 문제는 그 밖에 있습니다.
- 부탁하지 않은 계산과 판단이 붙었습니다. 사용자 5명 기준 월 비용(A 팀 95,000원 등)이 두 번 모두 나왔고, 한 번은 「인원이 많을수록 B 가 유리」라는 결론까지 붙었습니다. 검증할 숫자가 표 밖으로 늘어납니다.
- 메모에 없는 값과 단정이 섞였습니다. 월 결제 때 스타터 약 10,800원 같은 환산 값은 메모에 없는 계산이고, 한 번은 C 유료 플랜을 「단일 플랜」이라고 적었습니다. 메모는 유료 플랜 하나만 적었을 뿐 다른 플랜이 없다고는 하지 않습니다.
- 칸마다 근거가 없어서 어느 칸을 메모와 대조해야 하는지 알 수 없습니다.
자료만 쓰고 칸마다 근거를 달게 하기
규칙은 네 가지입니다. 메모 밖 지식 금지, 빈 칸은 「자료 없음」, 칸마다 메모 문장을 그대로 복사해 붙이기, 근거를 못 찾으면 그 칸을 「자료 없음」으로 바꾸기. 모델에게 자료 안에서만 답하게 하고 주장마다 인용을 달게 하며, 뒷받침할 인용을 못 찾으면 주장을 거두게 하는 것은 Anthropic 의 환각 줄이기 안내에 있는 방법입니다. 열을 6개로 못 박은 것은 항목이 제멋대로 늘지 않게 하려는 것입니다.
아래 <memo> 태그 안에 서비스 A, B, C 의 메모가 있습니다. 이 메모에 적힌 내용만 사용해서 비교표를 만드세요. 규칙:- 메모에 없는 내용은 일반 지식이나 추측으로 채우지 마세요. 메모에 없으면 칸에 「자료 없음」이라고 쓰세요.- 표는 마크다운으로, 행은 서비스 A·B·C, 열은 다음 6개입니다: 최저 유료 플랜 월 요금 | 요금 기준 | 무료 체험·무료 플랜 | 파일 첨부 한도 | 외부 연동 | 모바일 앱- 「자료 없음」이 아닌 모든 칸에는 값 뒤에 메모에서 그대로 복사한 근거 문장을 괄호 안에 「」 로 감싸 붙이세요. 예: (「스타터: 월 9,000원 (사용자 1인 기준).」) 근거 문장을 메모에서 찾지 못하면 그 칸은 「자료 없음」으로 바꾸세요.- 표 아래에 서비스별로 「자료 없음」 칸 수를 한 줄로 적고, 다른 말은 쓰지 마세요. <memo>바꿀 곳은 서비스 수와 열 이름뿐입니다. 메모와 닫는 태그를 이어 붙여 실행합니다.
$ { cat head.txt; for x in a b c; do cat memo-$x.txt; echo; done; echo "</memo>"; } > 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결과
첫 번째 실행의 표입니다. 근거 문장은 대부분 … 로 줄였습니다.
| 서비스 | 최저 유료 플랜 월 요금 | 요금 기준 | 무료 체험·무료 플랜 | 파일 첨부 한도 | 외부 연동 | 모바일 앱 ||---|---|---|---|---|---|---|| A | 스타터 9,000원, 연 결제 시 월 환산 금액 (「스타터: 월 9,000원 (사용자 1인 기준).」「모든 요금은 연 결제 시 월 환산 금액입니다.」) | 사용자 1인 기준 (「…」) | 자료 없음 | 스타터는 자료 없음, 팀 플랜은 파일당 200MB (「…」) | 자료 없음 | 자료 없음 || B | 베이직 12,000원, 월 결제 기준 (「…」) | 팀 단위 요금, 사용자 수 무관 (「…」) | 14일 무료 체험, 카드 등록 없이 시작 (「14일 무료 체험, 카드 등록 없이 시작」) | 베이직 파일당 50MB, 프로 파일당 500MB (「…」) | 자료 없음 | iOS, 안드로이드 제공 (「…」) || C | 15,000원 (「…」) | 1인당 (「…」) | 무료 플랜: 사용자 3명, 프로젝트 2개까지 (「…」) | 자료 없음 | 슬랙, 구글 캘린더 (「…」) | 자료 없음 | 「자료 없음」 칸 수: A 3칸, B 1칸, C 2칸메모에서 비워 둔 6칸이 전부 「자료 없음」이고, 표 밖의 말은 없습니다. 두 번째 실행도 빈 칸 6곳이 같았고, 인용을 더 길게 복사한 정도만 달랐습니다.
확인: 근거 문장을 메모에서 찾기
인용 13개를 Ctrl+F 로 하나씩 찾는 대신 스크립트로 합니다. 표의 「…」 안 문장이 메모에 그대로 있는지 보고, 없으면 종료 코드 1 을 냅니다.
import re, sysnorm = lambda s: " ".join(s.split())memos = norm(" ".join(open(p, encoding="utf-8").read() for p in sys.argv[2:]))out = open(sys.argv[1], encoding="utf-8").read()quotes = [q for q in re.findall(r"「([^」]+)」", out) if q != "자료 없음"]if not quotes: sys.exit("NO QUOTES FOUND (check the quote marks)")miss = [q for q in dict.fromkeys(quotes) if norm(q) not in memos]for q in miss: print("MISS:", q)cells = sum(l.count("자료 없음") for l in out.splitlines() if l.startswith("|"))print(f"{len(quotes)} quotes, {len(miss)} not found in memos; '자료 없음' cells: {cells}")sys.exit(1 if miss else 0)$ python3 -I check.py out.ko.1.txt memo-*.txt; echo "exit $?"13 quotes, 0 not found in memos; '자료 없음' cells: 7exit 0인용 13개가 모두 메모에 있습니다. 그런데 「자료 없음」 칸이 7 로 나옵니다. 표 마지막 줄은 6칸이라고 했는데, A 의 파일 한도 칸 안에 「스타터는 자료 없음」이 한 번 더 들어 있었기 때문입니다. 칸 수는 표에서 직접 세어 봅니다. 두 번째 실행은 6칸이었습니다.
실패하는 경우는 표의 인용을 일부러 바꿔서 냈습니다(모델이 만든 오류가 아닙니다). B 의 「카드 등록 없이 시작」을 「카드 등록 없이 바로 시작」으로 고친 파일입니다.
$ python3 -I check.py out-bad.txt memo-*.txt; echo "exit $?"MISS: 14일 무료 체험, 카드 등록 없이 바로 시작13 quotes, 1 not found in memos; '자료 없음' cells: 7exit 1빗나가는 곳
스크립트가 통과해도 남는 것이 있습니다.
- 인용이 메모에 있다는 것만 봅니다. 인용이 칸의 값을 뒷받침하는지는 보지 못합니다. A 의 9,000원은 연 결제 환산 금액이고 월 결제는 20% 더 붙습니다. 첫 번째 결과의 요금 칸은 환산이라는 말은 달았지만 20% 는 빠져 있고, 인용은 「스타터: 월 9,000원 …」과 「모든 요금은 …」 두 문장에서 멈춰 바로 다음 문장 「월 결제는 20% 추가.」는 들어 있지 않습니다. 요금 칸의 값과 인용 숫자는 나란히 놓고 눈으로 봅니다.
- 인용 표시가 흔들리면 스크립트가 아무것도 못 찾습니다. 처음 쓴 프롬프트에는 「」 지정 없이 「괄호로 붙이세요」 라고만 했는데, 두 번 중 한 번(
out.ko.1.txt)은 큰따옴표("…")로 인용했고, 그때 스크립트는0 quotes, 0 not found로 종료 코드 0 을 냈습니다. 그래서 프롬프트에 「」 를 지정했고, 스크립트는 인용을 하나도 못 찾으면 실패하게 했습니다. - 「자료 없음」이 정말 메모에 없는 항목인지는 Ctrl+F 로 찾습니다. A 메모에서 「체험」, C 메모에서 「모바일」이 0건이어야 합니다.
메모에 없는 요금은 AI 가 답할 수 없습니다. 비교표를 외부에 내보내기 전에는 각 서비스의 실제 요금 페이지에서 가격과 날짜를 다시 확인합니다. 메모를 복사한 시점의 가격일 뿐입니다. 이미 붙여 넣은 자료를 인용과 함께 정리하는 같은 방식은 Claude 요약에 원문 인용을 붙이게 하고 grep 으로 검증 에도 있습니다.