안전, 거부, 폴백
프로덕션에서, 당신의 코드는 Claude가 예상대로 답하지 못하는(또는 안 하는) 경우를 처리해야 합니다. 잘하면 사용자에게 보이지 않고, 못하면 크래시나 혼란스러운 응답이 됩니다.
- 모델 거부와 분류기/안전 차단을 구분 — 그리고 왜 그것이 중요한지
- 거부를 크래시나 빈 응답 대신 정상 결과로 처리
- 원하지 않은 거부는 줄이되, 원한 거부를 탈옥하려 하지 않기
- 폴백 선택: 명확화 질문, 안전한 대안, 또는 사람에게 인계
두 가지 서로 다른 것
- 모델 거부 — Claude가 요청을 거절합니다(예: 유해하다고 판단). 응답이 이를 신호로 보냅니다(일반적으로 refusal
stop_reason/콘텐츠). 오류가 아닌 정상 결과로 취급하세요. - 분류기/안전 차단 — 별도의 안전 계층이 콘텐츠를 차단할 수 있습니다. 이는 모델 거부와 다르게 보일 수 있습니다.
어느 쪽을 받았는지 아는 것이 맹목적으로 재시도하는 대신 적절히 대응하게 해줍니다.
우아하게 처리하기
resp = client.messages.create(...)
if getattr(resp, "stop_reason", None) == "refusal":
# Don't show a raw/empty result. Offer a safe fallback or a clarifying ask.
show_user("I can't help with that as asked. Here's what I can do instead…")
else:
render(resp)
원하지 않은 거부 줄이기
- 정당한 맥락을 추가하세요. 요청이 민감한 무언가에 패턴 매칭될 수 있지만 의도가 무해할 때, 실제 정당한 목적을 진술하는 것이 도움이 됩니다.
- 구체적으로. 모호하거나 도발적인 표현은 조심을 부릅니다.
- 싸우지 마세요. 요청이 정말로 허용되지 않는다면 거부는 옳습니다 — 우아한 경로를 설계하되, 탈옥하지 마세요.
정당한 맥락을 앞에 두기
I am a security engineer at [company] reviewing our own authentication code before a release. Below is a function we wrote and own. Identify weaknesses in it and explain how an attacker would exploit each one, so we can fix them before we ship. [code]
폴백 패턴
- 명확화 질문 대신 막다른 골목.
- 안전한 대안("대신 공개 정보를 요약할 수 있습니다").
- 파이프라인에서는, 신뢰도/자격이 낮을 때 사람에게 라우팅.
Guided walkthrough1 of 4
- 렌더링하기 전에 응답에서 거부 신호를 검사하세요. 검사되지 않은 응답을 UI에 바로 넣지 마세요 — 그것이 사용자가 빈 상자나 원시 객체를 보게 되는 방식입니다.
- 모델 거부인가 분류기/안전 차단인가? 거부는 요청에 대한 판단이고, 차단은 별도의 안전 계층입니다. 동일한 입력을 재시도해도 어느 쪽도 해결하지 못하지만, 서로 다른 해결책을 가리킵니다.
- 제품 자신의 목소리로 막다른 골목을 명확화 질문이나 안전한 대안으로 교체하세요. 사용자는 오류가 아닌 다음 단계를 받아야 합니다.
- 파이프라인에서, 신뢰도가 낮거나 자격이 없는 케이스는 추측하거나 조용히 떨어뜨리는 대신 사람 큐로 라우팅하세요.
스스로 확인해 보세요
0/3- 거부는 오류가 아닌 결과입니다 — 렌더링 전에 항상 감지하세요.
- 모델 거부와 분류기 차단은 서로 다른 것입니다; 어느 쪽을 받았는지 식별하세요.
- 원치 않는 거부는 보통 정당한 맥락을 추가하고 구체적으로 만들면 줄어듭니다.
- 요청이 정말로 허용되지 않는다면 거부는 옳습니다 — 탈옥하지 말고 우아한 경로를 만드세요.
- 폴백 순서: 명확화 질문, 안전한 대안, 사람에게 인계.