포맷

프롬프트 인젝션과 사용자 입력: AI 에이전트 API에 데이터 넘기기

고객 텍스트는 Sume 실행의 instruction이 아니라 input 객체에 넣으세요. 에이전트는 이를 데이터로 읽으라는 안내를 받으며, 문서는 이를 샌드박스가 아닌 신뢰 경계라고 부릅니다.

읽는 시간 5분Sume
전체 글

고객 입력이나 그 밖의 사용자 입력을 Sume 에이전트 실행에 넘기려면 input JSON 객체에 넣고, instruction은 여러분 자신의 결정에만 쓰세요. Sume는 input을 실행 워크스페이스의 파일로 기록하고, 에이전트에게 이를 지시가 아닌 데이터로만 읽으라고 알려 줍니다. 문서는 이를 “a trust boundary, not a sandbox”(샌드박스가 아니라 신뢰 경계)라고 부릅니다. 실행의 지출 상한이 적대적인 페이로드의 피해 범위를 제한하지만, 그래도 신뢰할 수 없는 원문 텍스트를 일부러 그대로 넘겨서는 안 됩니다.

아래 내용은 모두 2026-09-26에 확인한 Sume 문서 Format 호출하기 (영문)와 Format API (영문) 페이지, 그리고 Agent Completions, Scheduled, 안전한 자동화 페이지에서 가져왔습니다. Format이 처음이라면 Sume Format이란?부터 읽어 보세요.

고객 데이터는 instruction과 input 중 어디에 넣어야 하나요?

input에 넣으세요. 문서는 크롤링한 상품 문구, 고객 메시지, 공급사 필드를 instruction에 이어 붙이지 말고 바로 input에 넣어야 할 것으로 꼽습니다. 쿡북도 같은 선을 긋습니다. instruction에는 4000자보다 넉넉히 짧은 산문으로 결정 사항을 담고, input에는 데이터를 담습니다.

두 필드는 실행에 전달되는 방식도 다릅니다.

수락되는 것과 전달되는 것, Format 호출하기 (영문) 기준, 2026-09-26 확인.
필드수락실행에 전달되는 것
instruction8000자앞 ~4000자, 프롬프트 텍스트로
input2 MiB전부, 에이전트가 읽는 파일로. 잘리지 않음
Format 본문패키지 파일당 100 MiB 외에는 상한 없음전부, 파일로 첨부됨
curl -sS -X POST "https://api.sume.com/v1/formats/acme/product-promo/runs" \
  -H "Authorization: Bearer $SUME_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: order-8823-v1" \
  -d '{
    "instruction": "Vertical 9:16 host video. Use the script as written. No BGM, no captions.",
    "input": {
      "product_url": "https://shop.example.com/p/8823",
      "product_name": "Aurora Headphones",
      "highlights": ["…copied from the supplier feed…"]
    },
    "generation_spend_cap_usd": 120
  }'

에이전트는 내 input을 어떻게 보나요?

에이전트가 받는 내용은 정해진 순서로 조합됩니다. Format을 가리키는 포인터, 디스크에 놓인 패키지 전체, 실행 지시문, API 실행과 스케줄 실행에만 붙는 [Sume unattended run] 블록, input을 가리키는 포인터, 그리고 첨부 파일 순입니다. 고객 데이터에 대해서는 다음과 같은 뜻입니다.

  • instruction은 Format의 레시피 뒤에 오고 둘이 어긋나면 우선하므로, 여러분이 쓰지 않은 텍스트를 넣기에는 맞지 않는 자리입니다.
  • input은 /workspace/inputs/sume-action-input.json에 통째로 기록되고, 에이전트는 이를 지시가 아닌 데이터로만 읽으라는 안내를 받습니다.
  • 빈 input({})은 파일도 블록도 전혀 추가하지 않습니다. 그러면 input에서 product_url을 읽으라는 Format은 읽을 것이 없습니다.
  • 실행이 무엇을 받았는지 보려면 에이전트 탭에서 그 실행의 thread_id를 여세요. 첫 메시지가 바로 그렇게 조합된 텍스트입니다.

데이터를 input에 두면 프롬프트 인젝션을 막을 수 있나요?

아닙니다. 문서는 input을 “a trust boundary, not a sandbox”(샌드박스가 아니라 신뢰 경계)라고 부릅니다. 에이전트는 이를 데이터로 읽으라는 안내를 받지만, 문서는 그래도 신뢰할 수 없는 원문 텍스트를 일부러 그대로 넘기지 말라고 합니다. 문서가 그 경계 주위에 두는 장치는 다음과 같습니다.

  • 지출 상한: 실행에는 지출 상한이 있으므로 적대적인 페이로드의 피해 범위는 상한으로 제한됩니다. 실행마다 generation_spend_cap_usd로 플랫폼 최대치인 $500까지 지정하세요. 무인 AI 에이전트 지출 상한을 참고하세요.
  • 사람의 개입 없음: API를 통한 실행은 무인 실행입니다. 채팅 레시피라면 요청했을 승인이 미리 부여되고, 실행은 상한 안에서 유료 단계까지 계속 진행됩니다.
  • 키가 정하는 워크스페이스: 워크스페이스는 API 키가 결정하며, 제품이 워크스페이스 전환을 지원하지 않는 한 도구는 사용자가 보낸 워크스페이스 ID를 받아서는 안 됩니다.
  • 로그: 과도한 사용자 콘텐츠와 트랜스크립트는 문서가 꼽은, 로그에 남기면 안전하지 않은 항목입니다.

API는 input에서 무엇을 검사하나요?

타입, 키 개수, 크기, 미디어 참조뿐이고 그 밖에는 없습니다. input은 와이어 스키마가 아니며, Sume는 이 필드의 필드 목록을 공개하지 않습니다. Format의 레시피는 자기가 아는 키만 읽고, 모르는 키는 그냥 데이터일 뿐입니다. 작성자와 호출자 사이에 선언된 계약은 Format의 io 프로필 하나뿐입니다.

  • 타입: JSON 객체여야 합니다. 배열, 문자열, 숫자는 거부되며, null과 생략은 모두 input이 없다는 뜻입니다.
  • 키: 최상위 키는 최대 64개입니다. 중첩된 키는 세지 않으므로 묶는 것은 자유입니다.
  • 크기: compact 직렬화 기준 최대 2097152 UTF-8 바이트(2 MiB)입니다.
  • 미디어: 이미지, 영상, 오디오 파일을 가리키는 HTTPS URL은 깊이와 상관없이 실행의 첨부 예산 30개를 함께 쓰며, 그중 영상은 최대 10개, 오디오는 최대 10개입니다. 넘으면 400 invalid_attachment입니다.

보낸 값이 출력으로 다시 돌아오나요?

보장되지 않습니다. input은 구조화 출력까지 가지 않습니다. output은 실행이 만든 것과 말한 것으로 만들어지므로, 보낸 주문 ID나 SKU는 실행이 스스로 되풀이하지 않는 한 되돌아올 수 없습니다. 식별자는 data.id나 보낸 Idempotency-Key를 키로 삼아 여러분 쪽에 보관하세요.

Agent Completions와 Scheduled 실행도 input을 같은 방식으로 다루나요?

Agent Completions는 input을 같은 /workspace/inputs/sume-action-input.json에 통째로 기록하고, 프롬프트에는 그 파일을 가리키는 크기가 제한된 포인터가 실리며, 에이전트는 이를 지시가 아닌 데이터로만 다루라는 안내를 받습니다. 형식이 잘못된 input은 400 invalid_request입니다.

Scheduled 실행에 대해 문서는 input이 지시가 아니라 데이터로 에이전트에 전달되며, 동작은 여전히 스케줄에 저장된 지시문에서 나온다고 설명합니다. 또한 호출자가 보낸 텍스트를 신뢰할 수 없는 것으로 봅니다. 지시문이 권위를 갖게 하고, input이 동작을 바꿀 수 있는 Action은 설계하지 마세요. 한도도 같습니다. 속성 64개, 2 MiB입니다.

출처

관련 글

작성자 Sume