에이전트 구축 시 안전

에이전트 구축 시 안전 (Safety in building agents)

Agent Builder로 에이전트를 구축하고 배포할 때 반드시 알아야 할 위험 유형과 완화 방법을 다루는 가이드예요. 프롬프트 인젝션, 비공개 데이터 누출 등에 대비하는 방법을 배워요.

출처: 문서

본문

Agent Builder로 에이전트를 구축하고 배포하면서, 위험을 이해하는 것이 중요해요. 다중 에이전트 워크플로우를 구축할 때 위험 유형과 이를 완화하는 방법을 배워 보세요.

OpenAI는 Agent Builder를 폐기하고 있어요. 기존 사용자는 전환 기간 동안 계속 사용할 수 있으며, 제품은 2026년 11월 30일에 종료될 예정이에요. ChatKit은 계속 사용할 수 있어요. 현재 타임라인은 deprecations page를 참고하세요.

위험 유형

특정 에이전트 워크플로우 패턴은 위험에 더 취약해요. 채팅 워크플로우에서 두 가지 중요한 고려사항은 사용자 입력 보호와 MCP 도구 호출에 대한 주의예요.

프롬프트 인젝션 (Prompt injections)

프롬프트 인젝션은 흔하고 위험한 공격 유형이에요. 프롬프트 인젝션은 신뢰할 수 없는 텍스트나 데이터가 AI 시스템에 들어왔을 때, 그 텍스트나 데이터의 악의적인 내용이 AI에 대한 지침을 덮어쓰려 시도하는 경우 발생해요. 프롬프트 인젝션의 최종 목표는 다양하지만, 다운스트림 도구 호출을 통한 비공개 데이터 탈취, 잘못 정렬된(tisaligned) 작업 수행, 또는 의도하지 않은 방식으로 모델 동작을 바꾸는 것 등이 포함될 수 있어요. 예를 들어 프롬프트가 데이터 조회 에이전트를 속여 의도한 요약 대신 원시 고객 레코드를 보내게 할 수 있어요. 맥락 속 예시는 Codex internet access docs에서 확인하세요.

비공개 데이터 누출 (Private data leakage)

비공개 데이터 누출(에이전트가 실수로 비공개 데이터를 공유하는 것)도 방어해야 할 위험이에요. 공격자 없이도 모델이 의도하지 않은 방식으로 비공개 데이터를 누출할 수 있어요. 예를 들어 모델이 사용자가 기대하거나 의도한 것보다 더 많은 데이터를 MCP로 보낼 수 있어요. 가드레일(guardrails)이 컨텍스트에 포함되는 정보를 제한하는 데 더 나은 제어를 제공하지만, 모델이 연결된 MCP와 공유하기로 선택하는 것을 완전히 제어할 수는 없어요.

다음 지침을 사용해 공격 표면을 줄이고 이러한 위험을 완화하세요. 하지만 이러한 완화 조치가 있더라도, 에이전트는 완벽하지 않으며 실수하거나 속을 수 있어요. 따라서 이러한 위험을 이해하고 에이전트에 부여하는 접근 권한과 에이전트를 적용하는 방식에 주의를 기울이는 것이 중요해요.

개발자 메시지에 신뢰할 수 없는 변수를 사용하지 마세요

개발자 메시지는 사용자 및 어시스턴트 메시지보다 우선하기 때문에, 신뢰할 수 없는 입력을 개발자 메시지에 직접 주입하면 공격자에게 가장 높은 수준의 제어권을 주게 돼요. 신뢰할 수 없는 입력은 사용자 메시지를 통해 전달해 그 영향을 제한하세요. 이는 사용자 입력이 민감한 도구나 권한 있는 컨텍스트로 전달되는 워크플로우에서 특히 중요해요.

구조화된 출력으로 데이터 흐름 제한하기

프롬프트 인젝션은 종종 모델이 예상치 못한 텍스트나 명령을 자유롭게 생성해 다운스트림으로 전파되는 것에 의존해요. 노드 간에 구조화된 출력(예: enum, 고정 스키마, 필수 필드 이름)을 정의하면 공격자가 지침이나 데이터를 밀반입하는 데 악용할 수 있는 자유 형식 채널을 제거할 수 있어요.

명확한 지침과 예시로 에이전트 안내하기

에이전트 워크플로우는 환각, 오해, 모호한 사용자 입력 등으로 인해 원하지 않는 일을 할 수 있어요. 예를 들어 에이전트가 해서는 안 되는 환불을 제안하거나, 지워서는 안 되는 정보를 삭제할 수 있어요. 이 위험을 완화하는 가장 좋은 방법은 원하는 정책에 대한 좋은 문서와 명확한 예시로 프롬프트를 강화하는 거예요. 의도하지 않은 시나리오를 예상하고 예시를 제공해 에이전트가 이런 경우에 무엇을 해야 하는지 알게 하세요.

GPT-5 또는 GPT-5-mini 사용하기

이 모델들은 개발자 지침을 따르는 데 더 훈련되어 있으며, 탈옥(jailbreak)과 간접 프롬프트 인젝션에 대한 견고성이 더 강해요. 특히 위험도가 높은 워크플로우에서 더 탄력적인 기본 자세를 위해 에이전트 노드 수준에서 이 모델들을 설정하세요.

도구 승인 켜두기

MCP 도구를 사용할 때는 읽기와 쓰기를 포함한 모든 작업을 최종 사용자가 검토하고 확인할 수 있도록 항상 도구 승인(tool approvals)을 활성화하세요. Agent Builder에서는 human approval 노드를 사용하세요.

사용자 입력에 가드레일 사용하기

들어오는 입력을 내장 guardrails로 정화(sanitize)해 개인 식별 정보(PII)를 마스킹하고 탈옥 시도를 탐지하세요. Agent Builder의 가드레일 노드만으로는 완벽하지 않지만, 효과적인 1차 방어선이에요.

트레이스 그레이더와 이벌스 실행하기

모델이 무엇을 하고 있는지 이해하면 실수를 더 잘 잡고 예방할 수 있어요. evals를 사용해 성능을 평가하고 개선하세요. 트레이스 그레이딩은 에이전트 트레이스의 특정 부분(결정, 도구 호출, 추론 단계 등)에 점수와 주석을 제공해 에이전트가 어디서 잘했고 어디서 실수했는지 평가하게 해줘요.

기법 결합하기

이러한 기법을 결합하고 중요한 단계를 강화하면 프롬프트 인젝션, 악의적인 도구 사용, 예상치 못한 에이전트 동작의 위험을 크게 줄일 수 있어요.

신뢰할 수 없는 데이터가 에이전트 동작을 직접 구동하지 않도록 워크플로우를 설계하세요. 외부 입력에서 특정 구조화된 필드(예: enum 또는 검증된 JSON)만 추출해 노드 간 주입 위험을 제한하세요. 가드레일, 도구 확인, 사용자 메시지를 통해 전달되는 변수를 사용해 입력을 검증하세요.

에이전트가 도구 호출에 영향을 주는 임의의 텍스트를 처리할 때 위험이 높아져요. 구조화된 출력과 격리가 이 위험을 크게 줄여 주지만, 완전히 제거하지는 않아요.

더 알아보기 (Learn more)

관련 문서: Agent Builder와 이벌스(eval) 시작하기를 참고하세요.