코딩 어시스턴트가 SDK 메이저 버전 업 이후 없는 메서드를 그럴듯하게 지어냅니다
Claude나 Copilot한테 코드를 짜게 하면 빌드 전까지는 멀쩡해 보이는데, 실제로는 그 라이브러리에 없는 메서드나 옵션을 그럴듯하게 지어내는 경우가 종종 있습니다. 특히 최근에 API가 바뀐 패키지(SDK 메이저 버전 업 같은)에서 옛날 시그니처를 쓰거나, 아예 없는 함수를 호출해요.
빌드/런타임 가서야 터지니 검토 시간이 오히려 더 듭니다. 이 환각 줄이는 실전 방법 있을까요?
답변 3개
- 채택된 답변에디터 검증
LLM이 학습 시점 지식으로 "있을 법한" API를 생성하니까, 빠르게 바뀌는 SDK일수록 옛 시그니처나 가짜 메서드가 나옵니다. 모델 탓해봐야 안 줄어요. 검증 루프를 자동화해서 틀려도 머지 전에 걸리게 하는 게 답입니다.
-
타입 시스템을 무기로. TS면
strict, Python이면 mypy/pyright 켜고, 에이전트한테 "코드 짜고 나서 타입체크 반드시 돌리고 통과할 때까지 고쳐라"를 종료 조건으로 박으세요. 없는 메서드는 타입 단계에서 바로 빨간 줄 뜹니다. 환각 방어 1순위예요. -
실제 타입 정의를 읽게. 모델 기억에 맡기지 말고 설치된 패키지의
.d.ts나 소스를 Read 시키세요.node_modules/패키지/dist/*.d.ts직접 읽히는 것만으로도 정확도가 확 올라갑니다. Context7 같은 문서 MCP 붙이는 것도 방법이고요. -
버전 명시. CLAUDE.md나 프롬프트에 "이 패키지는 v3 쓰고 v2랑 API 다름" 박아두세요. 메이저 버전 업이 환각 제일 잘 나는 지점이라.
-
lock 파일 기준.
package.json/lockfile에 박힌 정확한 버전을 에이전트가 먼저 확인하게 하면 버전 불일치 환각이 줄어요.
핵심은 "모델이 안 틀리게"가 아니라 "틀려도 자동으로 걸리게"입니다. 타입체크 + 테스트를 루프 안에 넣는 순간 이 문제 체감 빈도가 뚝 떨어져요. 빌드 한 번 통과를 종료 게이트로 거는 게 그렇게 별거 아닌데 효과가 큽니다.
-
덧붙이면, 웹검색이나 문서 도구 붙은 에이전트라도 "불확실하면 추측하지 말고 문서 확인하라"를 명시적으로 줘야 실제로 찾아봅니다. 안 그러면 기본값이 "자신 있게 지어내기"라서요. 저는 시스템 프롬프트에 "API 시그니처가 불확실하면 설치된 타입 정의나 공식 문서를 먼저 조회하고, 못 찾으면 모른다고 말하라" 넣어두는데 헛 API 비율 눈에 띄게 줄었어요. 케바케일 수도 있는데 적어도 제 환경에선 효과 있었음.
공감해요. 저는 자주 쓰는 라이브러리는 CLAUDE.md에 "이 프로젝트에서 X 라이브러리 쓰는 정석 패턴"을 짧게 박아둡니다. ORM 쿼리, 인증 미들웨어 이런 거요. 그러면 에이전트가 매번 기억에서 끌어오지 않고 우리 규약을 따라서 가짜 API 만들 여지가 줄어요. 일종의 few-shot을 레포에 상주시키는 셈.
새 패키지 처음 도입할 땐 에이전트한테 던지기 전에 제가 공식 quickstart 한 번 같이 붙여줍니다. 첫 단추만 정확히 끼우면 그 뒤로는 잘 따라오더라고요.