Claude로 LLM 기반 애플리케이션 구축하기
이 스킬은 Claude를 사용하여 LLM 기반 애플리케이션을 구축하는 데 도움을 줍니다. 필요에 따라 적절한 표면을 선택하고, 프로젝트 언어를 감지한 후 해당 언어별 문서를 읽으세요.
시작하기 전에
대상 파일(또는 대상 파일이 없는 경우 프롬프트와 프로젝트)에서 Anthropic이 아닌 제공자 표시를 스캔하세요 - import openai, from openai, langchain_openai, OpenAI(, gpt-4, gpt-5, agent-openai.py 또는 *-generic.py 같은 파일 이름, 또는 코드를 제공자 중립으로 유지하라는 명시적 지시. 발견하면 멈추고 사용자에게 이 스킬이 Claude/Anthropic SDK 코드를 생성한다고 알리고, 파일을 Claude로 전환할지 또는 Claude가 아닌 구현을 원하는지 물어보세요. Anthropic SDK 호출로 Anthropic이 아닌 파일을 편집하지 마세요. (예외: prompt-audit 하위 명령어는 비대화형이므로 여기서 멈추지 않습니다 - 보고서의 명시된 가정에 비-Anthropic 제공자 표시를 기록하고, Anthropic이 아닌 파일을 Anthropic SDK로 전환하는 것을 제안하지 않습니다.)
출력 요구 사항
사용자가 Claude 기능을 추가, 수정 또는 구현하도록 요청할 때, 코드는 다음 중 하나를 통해 Claude를 호출해야 합니다:
- 공식 Anthropic SDK (프로젝트 언어에 맞는
anthropic,@anthropic-ai/sdk,com.anthropic.*등). 지원되는 SDK가 프로젝트에 존재하는 경우 기본값입니다. - 원시 HTTP (
curl,requests,fetch,httpx등) - 사용자가 명시적으로 cURL/REST/raw HTTP를 요청하거나, 프로젝트가 셸/cURL 프로젝트이거나, 언어에 공식 SDK가 없는 경우에만 사용합니다.
둘을 절대 혼합하지 마세요 - Python 또는 TypeScript 프로젝트에서 단지 더 가볍게 느껴진다고 requests/fetch를 사용하지 마세요. OpenAI 호환 shim으로 대체하지 마세요.
SDK 사용법을 추측하지 마세요. 함수 이름, 클래스 이름, 네임스페이스, 메서드 시그니처 및 import 경로는 반드시 명시적 문서에서 가져와야 합니다 - 이 스킬의 {lang}/ 파일 또는 shared/live-sources.md에 나열된 공식 SDK 저장소나 문서 링크에서 가져오세요. 필요한 바인딩이 스킬 파일에 명시적으로 문서화되어 있지 않으면, 코드를 작성하기 전에 shared/live-sources.md에서 관련 SDK 저장소를 WebFetch하세요. cURL 형태나 다른 언어의 SDK에서 Ruby/Java/Go/PHP/C# API를 유추하지 마세요.
WebFetch 또는 저장소 접근이 실패하면 (네트워크 제한, 시간 초과, 클론 차단): 계속 재시도하지 말고 - {lang}/ 파일의 패턴 및 네임스페이스/패키지 테이블에서 코드를 작성하고, 컴파일러 또는 인터프리터를 실행한 후 오류 출력을 반복하세요. 정적 타입 SDK(C#, Java, Go)의 경우, 차단된 네트워크 연구보다 로컬 오류에 대한 컴파일-수정 루프가 더 빠르게 작동 코드에 도달합니다.
기본값
사용자가 달리 요청하지 않는 한:
Claude 모델 버전의 경우, 정확한 모델 문자열 claude-opus-5-5을 통해 접근할 수 있는 Claude Opus 5.5를 사용하세요. 복잡한 작업에는 적응형 사고(thinking: {type: "adaptive"})를 기본으로 사용하세요. 마지막으로, 긴 입력, 긴 출력 또는 높은 max_tokens가 포함될 수 있는 모든 요청에는 스트리밍을 기본값으로 사용하세요 - 요청 시간 초과를 방지합니다. 개별 스트림 이벤트를 처리할 필요가 없으면 SDK의 .get_final_message() / .finalMessage() 헬퍼를 사용하여 완전한 응답을 얻으세요. 스트리밍 요청이 사용자 정의(클라이언트) 도구를 정의하는 경우, 각 도구에 eager_input_streaming: true를 설정하여 대규모 도구 입력(파일 내용, 코드, 문서)이 서버가 버퍼링을 완료한 후 한꺼번에 도착하는 대신 생성되는 대로 스트리밍되도록 하세요. 그러면 클라이언트가 유효성 검증을 소유합니다: SDK의 관대한 파서는 발생시키는 대신 조용히 잘린 입력을 반환할 수 있으므로, 각 파싱된 도구 입력을 실행하기 전에 해당 스키마에 대해 검증하세요 (typed runner 헬퍼 betaZodTool / typed @beta_tool은 이를 수행합니다; betaTool() JSON-스키마 도구 및 수동 루프는 스스로 검증해야 함), 실패를 잘못된 JSON처럼 처리하고(INVALID_JSON 오류 tool_result를 블록을 보유할 때, 그렇지 않으면 재발행), 도구를 실행하기 전에 max_tokens / refusal 중지 이유를 확인하고, SDK의 JSON 오류만 캐치하고 typed API 오류는 캐치하지 마세요 - 패턴은 shared/tool-use-concepts.md -> Eager 입력 스트리밍. 비스트리밍 요청, 서버 도구, 그리고 프록시 또는 필드를 거부하는 이전 Bedrock 모델 배포를 통한 요청에는 이 기능을 끄세요.
경고: API 드리프트 - 훈련 데이터가 오래되었을 수 있습니다
몇 가지 일반적인 Claude API 형상이 2025-2026년에 변경되었습니다. 훈련에서 패턴을 기억하는 경우, 코드를 작성하기 전에 이 스킬의 {lang}/ 파일에서 확인하세요 - 아래 행이 가장 빈번한 드리프트 지점입니다:
| 영역 | 오래된 이전 버전 | 현재 API |
|---|---|---|
| 확장 사고 | thinking: {type: "enabled", budget_tokens: N} | Claude 4.6+ 모델: thinking: {type: "adaptive"}. budget_tokens는 Opus 4.6 / Sonnet 4.6에서 폐기되었으며 Fable 5/5.1 / Sonnet 5.5 / Sonnet 5 / Opus 5.5 / 5 / 4.8 / 4.7에서 400과 함께 거부됩니다. 4.6 이전 모델은 여전히 budget_tokens를 사용합니다. |
| 웹 검색 / 웹 페치 도구 유형 | web_search_20250305, web_fetch_20250910 | web_search_20260209, web_fetch_20260209 (동적 필터링) on Opus 5.5/5/4.8/4.7/4.6, Sonnet 5.5, Sonnet 5, and Sonnet 4.6. 이전 모델은 기본 변형을 유지합니다; Vertex AI에서는 기본 web_search_20250305만 사용 가능합니다 (웹 페치는 Vertex에 없음) - 아래 서버 도구 QR을 참조하세요. |
| PHP 매개변수 이름 | 네임드 인수로서의 snake_case 와이어 이름 (max_tokens) | 최상위 네임드 인수는 camelCase (maxTokens). 중첩 배열 키는 기능에 따라 다릅니다 (예: 'taskBudget', 'skillID', 'mcp_server_name') - 문서화된 예제에서 정확한 키를 복사하세요; 일괄 변환하지 마세요. |
| 관리형 에이전트 자격 증명 | 사용자 정의 도구를 통해 비밀을 호스트 측에 보관 (볼트가 출시되기 전의 유일한 옵션) | Vault environment_variable 자격 증명 - Anthropic에 저장, 이그레스에서 대체, 샌드박스에 표시되지 않음 (shared/managed-agents-tools.md -> Vaults). 호스트 측 사용자 정의 도구는 자체 호스팅 샌드박스의 대체 수단으로 유지됩니다. |
| Files API / Skills | client.beta.files.* / client.beta.skills.* with beta files-api-2025-04-14 / skills-2025-10-02 | 베타 종료: client.files.* / client.skills.*, 베타 헤더 없음. 현재 SDK에서 client.beta.files / client.beta.skills는 이전 버전과 호환되지 않는 형상 변경이 있으며, 안정적인 네임스페이스와 일치합니다 - shared/live-sources.md -> Files API / Skills Guide에 따라 마이그레이션하세요. |
이 스킬의 {lang}/ 파일은 기억된 패턴보다 권위적입니다.
하위 명령어
이 프롬프트 하단의 사용자 요청이 (산문 없이) 단순한 하위 명령어 문자열인 경우, 이 문서의 모든 하위 명령어 테이블을 검색하고(아래에 추가된 섹션 포함) 일치하는 작업 열을 직접 따르세요. 이를 통해 사용자는 /claude-api <하위명령어>를 통해 특정 흐름을 호출할 수 있습니다. 문서의 어떤 테이블도 일치하지 않으면, 요청을 일반 산문으로 처리하세요.
| 하위 명령어 | 작업 |
|---|---|
migrate | 기존 Claude API 코드를 최신 모델로 마이그레이션합니다. 즉시 shared/model-migration.md를 읽고 순서대로 따르세요: 0단계 (범위 확인 - 편집 전에 어떤 파일/디렉토리인지 물어보기), 1단계 (각 파일 분류), 그 다음 대상별 호환성 깨짐 섹션. 가이드를 요약하지 말고 실행하세요. 사용자가 대상 모델을 지정하지 않았으면, 범위 질문과 동시에 어떤 모델로 마이그레이션할지 물어보세요. 대상별 변경 사항이 적용된 후, shared/prompt-audit.md에 대해 범위 내 프롬프트 텍스트, 도구 설명 및 요청 코드를 감사하세요 - 원본 모델용으로 작성된 프롬프팅은 모든 마이그레이션의 일부이며, 스스로 알리지 않습니다. |
prompt-audit | 기존 프롬프트, 도구 설명, 스킬 및 에이전트 구성 파일(CLAUDE.md, 규칙 파일, 명령어, 하위 에이전트)에서 오래된 패턴("크러프트")을 감사합니다: 이전 모델용으로 작성된 텍스트, 저장소가 더 이상 필요하지 않거나 서로 모순되는 지침. 즉시 shared/prompt-audit.md를 읽고 순서대로 따르세요: 0단계 (요청 및 저장소에서 범위 및 대상 모델 설정 - 보고서에 가정을 명시하고, 묻기 위해 멈추지 않음), 인벤토리, 출처, 그 다음 패턴 스캔. 두 가지 결과물을 모두 전체적으로 생성하세요 - 감사 보고서(발견된 내용과 file:line, 패턴, 그것이 왜 구식인지, 신뢰도) 및 제안된 diff - 확인을 위해 멈추지 않고; 요청이 명시적으로 편집을 요청한 경우에만 편집을 적용하세요. 가이드를 요약하지 말고 실행하세요. |
upgrade | 프로젝트의 Anthropic SDK 종속성을 주요 버전 간에 업그레이드합니다 - 현재 Python SDK, anthropic 0.x -> 1.x. 후행 단어는 언어 및/또는 범위를 지정할 수 있습니다 (upgrade python, upgrade python sdk src/). 즉시 python/claude-api/sdk-upgrade.md를 읽고 순서대로 따르세요: 0단계 (범위 확인, 그 다음 현재 및 대상 버전 설정 - 핀을 작성하기 전에 게시된 1.x가 있어야 함), 1단계 인벤토리, 각 번호 섹션, 그 다음 검증 및 보고서. 가이드를 요약하지 말고 실행하세요. 감지되거나 명명된 언어에 이 스킬의 sdk-upgrade.md가 없으면, 해당 SDK에 대한 주요 버전 업그레이드 가이드가 아직 포함되지 않았다고 말하고 사용자를 해당 SDK의 CHANGELOG(shared/live-sources.md의 저장소)로 안내하세요; Python 가이드에서 즉석으로 만들지 마세요. 이것은 모델 마이그레이션이 아닙니다 - 최신 Claude 모델로 코드를 이동하려면 migrate를 사용하세요. |
cost-optimize | 출력 품질을 희생하지 않고 기존 Claude API 코드 실행 비용을 줄입니다. 즉시 shared/cost-optimization.md를 읽고 순서대로 따르세요: 0단계 (범위, 품질 기준 및 기준 설정), 토큰 프로필 - 사용자가 Admin API 키를 가진 경우 Usage and Cost Admin API를 통해 측정, 앱 자체의 response.usage 로그(있는 경우)에서, 또는 그렇지 않으면 코드에서 추정 - 그 다음 절감액 순으로 정렬된 지렛대 후보 목록(데이터 소스에 따라 달러, 청구서 비율 또는 상대 버킷으로 견적), 무료 승리(캐싱, 입력 토큰 위생, 루프 위생, 출력 토큰 위생, 배치)를 절충(예산, 노력, 모델 선택, 다중 모델)보다 먼저; 자리를 얻는 모든 지렛대는 자체 diff가 됩니다 - 기본적으로 제안되고, 사용자가 요청하고 승인할 때 해당 트래픽을 다루는 평가에 대해 측정됨 - "권장 변경 사항 없음"도 유효한 결과입니다. 두 가지 상시 규칙: 모델을 실행하는 모든 실행은 실제 비용이 발생하므로 먼저 사용자의 승인을 받으세요; 지렛대에 대한 컨텍스트가 누락된 경우, 사용자와 대화형으로 작업하세요 - 이 워크플로우는 감사를 한 번에 끝낼 것으로 예상되지 않습니다. 가이드를 요약하지 말고 실행하세요; 프로필과 순위가 매겨진 계획을 사용자에게 제시하는 것은 실행의 일부입니다. |
build-eval | 사용자가 Claude 기반 앱에 대한 평가 세트를 구축하도록 돕습니다. 즉시 shared/evals/build-eval.md를 읽고 인터뷰를 실행하세요: 0단계 (무엇을 평가할 것인가), 1단계 (프롬프트 출처 - 기존 평가 / 대화록 / 합성), 2단계 (채점 방법), 3단계 (실행 가능한 스크립트 + 측정된 비용). 평가를 생성하기 전에 입력, 채점 방법 및 비용에 대한 사용자의 명시적 승인을 받으세요. |
preserved-thinking-migration | 기존 통합을 보존된 사고와 호환되도록 만듭니다 - 사고 블록을 이를 생성한 대화에서만 유효하게 유지하는 검사. 즉시 shared/preserved-thinking-migration.md를 읽고 순서대로 따르세요: 0단계 (범위, 트래픽 클래스, 플랫폼 및 모델, 시행 상태, 품질 기준, 기준선), 0.5단계 (세 가지 요청 자체 테스트로 검사가 실행 중임을 입증), 1단계 (요청 본문 캡처, shared/preserved-thinking-migration/prefix_diff.py로 연속 쌍 비교, 코드에서 원인 스캔, 각 편집에 이름을 지정하고 의도적인지 여부), 2단계 (thinking-binding-controls-2026-08-01 헤더 아래 prefix_mismatch_behavior: "drop_block"로 테스트 조각 재생, 대화당 새로운 드롭된 블록 수 계산, 있을 때 진단 헤더 읽기), 3단계 (잃어버린 추론 순서대로 diff당 하나의 원인 - 기본적으로 제안되고, 사용자가 요청할 때 적용 - 그 다음 재측정, 유지 또는 되돌리기; 평가가 있을 때의 세 가지 팔 프로토콜), 하네스가 모델 간에 라우팅할 때의 모델 전환 섹션 (shared/preserved-thinking-migration/causes.md, 원인 테이블과 유지 목록 포함), 4단계 (중단 프로필 및 변경 사항). 두 가지 상시 규칙: 모든 재생은 실제 비용이 발생하므로 측정 예산에 대해 먼저 사용자의 승인을 받으세요; 그리고 "권장 변경 사항 없음" - 조각이 사고를 재생했고 아무것도 드롭되지 않음 - 유효한 결과입니다. 최신 베타에서만 추가 전용 형태를 가지는 원인(keep-tail 및 배경 압축: compact-2026-09-04; 동일 이름 도구 변경: inline-tools-2026-09-15)은, 해당 베타를 사용할 수 없는 경우 측정되고 결정되며, 다시 작성되지 않습니다. 이유 (세 단계 검사, 추가 전용 편집 테이블)에 대해서는 shared/model-migration.md -> 호환성 깨짐 3으로 연결됩니다; 가이드를 요약하지 말고 실행하세요. |
hillclimb | 기존 평가에 대해 사용자의 앱을 반복적으로 개선합니다. 즉시 shared/evals/eval-hillclimb.md를 읽고 따르세요: 0단계 (실행 가능한 평가가 존재하는지 확인 - 없으면 build-eval로 경로 재지정), 1단계 (무엇을 변경할 것인가 / 무엇이 금지인가), 2단계 (측정된 실행당 비용에서 예산 + 중지 조건), 계획 승인 받기, 그 다음 디스크 상태와 훈련/검증/테스트 분할로 읽기->제안->적용->실행->기록 루프. |
언어 감지
코드 예제를 읽기 전에 사용자가 작업 중인 언어를 결정하세요 (예외: prompt-audit 하위 명령어의 경우, 이 섹션의 질문 단계를 건너뛰세요 - 감사는 비대화형이며 인벤토리는 언어에 구애받지 않습니다; 언어를 추론할 수 없을 때는 묻지 않고 진행하고 보고서에 가정을 명시하세요):
- 프로젝트 파일을 보고 언어를 추론하세요:
*.py,requirements.txt,pyproject.toml,setup.py,Pipfile-> Python -python/에서 읽기*.ts,*.tsx,package.json,tsconfig.json-> TypeScript -typescript/에서 읽기