HiAPI
블로그

사용 가이드

hiapi API로 gpt-6-astra를 사용해 이커머스 제품 이미지 생성하기

사진을 생성하지는 않지만—제품 리스팅의 나머지 모든 콘텐츠를 작성할 수 있습니다.

Sep 9, 2026
hiapi API로 gpt-6-astra를 사용해 이커머스 제품 이미지 생성하기

GPT-6 Astra는 이미지를 생성하지 않습니다—이커머스 기술 스택에서 실제로 쓰이는 부분은 다음과 같습니다

GPT-6 Astra로 제품 사진을 그릴 수 있기를 기대하며 이 글을 읽고 있다면, 그건 불가능합니다—이 모델은 /v1/responses 엔드포인트로 접근하는 순수 텍스트·추론 모델이며 이미지, 오디오, 비디오를 전혀 출력하지 않습니다. 하지만 이커머스 팀에게 이는 막다른 길이 아닙니다. 모든 제품 이미지는 하나의 페이지에 존재하며, 그 페이지에는 설명, alt 텍스트, 고객 서비스 답변, 동일한 판매 포인트의 세 가지 광고 채널 버전까지 필요합니다—그리고 GPT-6 Astra는 바로 이 계층을 위해 만들어졌습니다. 이 가이드는 제품 이미지 워크플로의 텍스트 부분, 즉 대량 설명 생성, 상품 리스팅을 위한 구조화 데이터 추출, 고객 Q&A를 다루며 Responses API에 대한 실제 요청 예시를 함께 제공합니다. 사진 자체가 필요하다면 GPT Image 2 같은 이미지 모델과 함께 사용하여 사진을 둘러싼 모든 텍스트를 GPT-6 Astra가 처리하게 하십시오.

Chat Completions 대신 Responses API를 쓰는 이유

GPT-6 Astra는 POST /v1/responses를 통해서만 노출됩니다—OpenAI가 자사의 최신 추론 모델에 사용하는 엔드포인트 계열과 동일하며, 구형 Chat Completions 형태가 아닙니다. 제품 파이프라인에 연결하려면 세 가지 차이점이 중요합니다:

  • messages 대신 input을 사용합니다. messages 목록이 아니라 입력 항목 배열을 전달합니다. Chat Completions 클라이언트를 그대로 재사용하지 말고 요청 구성 코드를 개조해야 합니다.
  • 실무에서는 기본적으로 stream=true, 상태는 store=false를 사용합니다. 모델은 텍스트가 도착할 때 response.output_text.delta 이벤트를, 구조화된 항목이 완성될 때 response.output_item.done을 스트리밍으로 내보냅니다. store=false를 사용하면 호출 간에 서버에 아무것도 보관되지 않습니다—다중 턴 고객 서비스 대화를 운영 중이라면 다음 input 배열에 이전 사용자/어시스턴트 턴을 직접 재생해야 합니다.
  • temperature 대신 reasoning.effort를 사용합니다. 이 통합에는 temperature, top_p, max_output_tokens 조정 항목이 없습니다. reasoning.effort로 출력 품질/지연을 제어하며, 값은 low, medium, high, xhigh, max 중 하나입니다(none은 없습니다—추론은 끌 수 없습니다). 설명 생성처럼 짧고 결정적인 작업에는 low 또는 medium이면 충분하며, 정책에 민감한 사안을 다루는 고객 서비스 답변 초안 작성처럼 판단력이 필요한 시나리오에는 high 이상을 쓰십시오.

기본 URL은 https://api.hiapi.ai/v1이며, 다른 hiapi 모델과 동일한 키를 사용합니다.

사용 사례 1: 구조화 출력으로 제품 설명 대량 생성

가장 직접적인 이커머스 접점은 스펙 표를 대규모로 브랜드에 맞는 상품 리스팅 문구로 변환하는 것입니다. 모델이 반환한 자유 텍스트를 다시 파싱하는 대신 text.format.type=json_schema를 사용하여 모든 응답이 CMS에 바로 인입 가능한 형태—제목, 짧은 설명, 긴 설명, 요점 목록—로 한 번의 호출에 반환되게 하십시오.

import json
import requests

resp = requests.post(
    "https://api.hiapi.ai/v1/responses",
    headers={
        "Authorization": f"Bearer {HIAPI_KEY}",
        "Content-Type": "application/json",
    },
    json={
        "model": "gpt-6-astra",
        "store": False,
        "reasoning": {"effort": "low"},
        "input": [
            {
                "role": "system",
                "content": "You write concise, factual e-commerce listing copy. "
                            "Never invent specs that aren't in the input.",
            },
            {
                "role": "user",
                "content": "Product: ceramic pour-over coffee dripper, 400ml, "
                            "matte white, dishwasher safe, fits standard filters. "
                            "Write listing copy for this product.",
            },
        ],
        "text": {
            "format": {
                "type": "json_schema",
                "name": "listing_copy",
                "schema": {
                    "type": "object",
                    "properties": {
                        "title": {"type": "string"},
                        "short_description": {"type": "string"},
                        "long_description": {"type": "string"},
                        "bullet_points": {
                            "type": "array",
                            "items": {"type": "string"},
                        },
                    },
                    "required": [
                        "title",
                        "short_description",
                        "long_description",
                        "bullet_points",
                    ],
                    "additionalProperties": False,
                },
            }
        },
    },
    stream=False,
)
data = resp.json()

이 코드를 제품 데이터베이스에 대해 SKU별로 실행하면 채팅 창에서 복사·붙여넣은 산문이 아니라 일관되고 스키마 검증을 거친 문구를 얻게 됩니다. 시스템 프롬프트에서 스펙 허구화를 엄격히 금지하십시오—그냥 두면 모델은 주어지지도 않은 기능에 대해 기꺼이 생생하게 써 내려갈 것입니다.

사용 사례 2: 자체 문서 기반 고객 지원 Q&A

고객 서비스 어시스턴트의 핵심 패턴은 store=false 재생 루프입니다. 매 턴마다 현재 대화에 도구 결과가 있다면 함께 input에 담아 다시 전송합니다. 보내지 않은 내용은 모델이 전혀 기억하지 못합니다. 이는 의도된 트레이드오프입니다—비용은 입력 토큰 재전송으로 약간 더 들지만, 대화 상태가 공급자가 아니라 여러분의 애플리케이션에 속하게 됩니다(자체 데이터베이스에서 대화를 마스킹, 분기, 복구해야 할 때 유용합니다).

history = [
    {"role": "system", "content": "Answer only from the provided product FAQ context. "
                                    "If the answer isn't in context, say so and offer to escalate."},
]

def ask(user_message: str, faq_context: str) -> str:
    history.append({"role": "user", "content": f"Context:\n{faq_context}\n\nQuestion: {user_message}"})
    resp = requests.post(
        "https://api.hiapi.ai/v1/responses",
        headers={"Authorization": f"Bearer {HIAPI_KEY}", "Content-Type": "application/json"},
        json={
            "model": "gpt-6-astra",
            "store": False,
            "reasoning": {"effort": "medium"},
            "input": history,
        },
    )
    answer = resp.json()["output"][-1]["content"][0]["text"]
    history.append({"role": "assistant", "content": answer})
    return answer

주문 상태 조회나 반품 처리를 트리거해야 하는 모든 동작은 tools에 함수로 선언하십시오—모델이 function_call을 반환하면 백엔드가 이를 실행하고, 모델이 계속 진행하기 전에 동일한 call_id로 function_call_output을 통해 결과를 되돌려줍니다. 이렇게 하면 모델이 주문 데이터베이스에 직접 접근하는 일이 결코 없습니다.

사용 사례 3: 채널별 마케팅 문구 변형

동일한 제품 사실도 제품 페이지, 이메일 제목, 30자 광고 제목에서는 각각 다른 표현이 필요합니다. GPT-6 Astra는 response.output_text.delta 이벤트를 스트리밍으로 내보내므로, 한 번의 호출로 여러 채널 변형을 생성하고 전체 응답을 기다리지 않고 내용이 도착하는 대로 즉시 렌더링할 수 있습니다—내부 도구의 실시간 미리보기에 쓸 때 유용합니다. 여기서도 reasoning.effort는 low로 유지하십시오. 짧은 문구의 톤 매칭에는 더 강한 추론이 필요 없으며, 마케터가 실시간으로 반복 작업할 때 지연을 낮게 유지할 수 있습니다.

비용은 어떻게 계산되나요

GPT-6 Astra는 토큰 단위로 과금되며, 점진적 할증이 아닌 단단한 구간 절벽이 존재합니다—한 번의 요청으로 대형 상품 카탈로그를 배치 처리하기 전에 미리 알아두는 것이 좋습니다:

구간 입력 출력 캐시 입력 캐시 쓰기
표준(요청당 ≤272,000 입력 토큰) $2.50 / 100만 tokens $12.50 / 100만 tokens $0.25 / 100만 tokens $3.125 / 100만 tokens
긴 컨텍스트(요청당 >272,000 입력 토큰) $5.00 / 100만 tokens $18.75 / 100만 tokens $0.50 / 100만 tokens $6.25 / 100만 tokens

이 임계값은 요청의 총입력—캐시 읽기와 쓰기 포함—에 대해 검사되며, 한 번 넘으면 전체 요청이 긴 컨텍스트 요율로 과금됩니다. 272,000을 초과한 토큰 부분만이 아닙니다. 위 사용 사례(단일 제품 설명 생성, 한 턴의 고객 서비스 대화, 하나의 문구 변형)에서는 이 선에 한참 못 미칩니다. 주로 전체 상품 카탈로그나 긴 문서를 한 번의 호출에 밀어 넣을 때 영향을 받습니다. 대량 작업을 약속하기 전에 최신 요율을 hiapi.ai/pricing에서 확인하십시오. 요율은 사용량 기반이며 변경될 수 있습니다.

이것이 기술 스택의 나머지와 어떻게 맞물리는가

위의 어느 것도 실제 이미지 모델을 대체하지 못합니다—GPT-6 Astra에는 /v1/tasks 접근 권한이 없고 시각적 출력을 생성할 수도 없습니다. 워크플로에 이 문구들과 짝을 이루는 제품 사진이나 라이프스타일 컷이 필요하다면 GPT Image 2 같은 이미지 모델을 별도로 호출해야 하며, 두 모델의 요청 형식과 엔드포인트는 서로 호환되지 않습니다. 모델 ID와 정확한 요청 형태를 포함한 전체 설정 세부 정보는 GPT-6 Astra API 가이드와 모델 페이지를 참조하십시오.

자주 묻는 질문

GPT-6 Astra가 제품 이미지를 생성할 수 있나요? 아니요. /v1/responses로 접근하는 순수 텍스트 모델이며 이미지, 오디오, 비디오를 출력하지 않습니다. 상품 리스팅의 시각적 부분에는 이미지 모델을 함께 사용하십시오.

input은 Chat Completions에서 사용하던 messages 배열과 무엇이 다른가요? input은 Responses API가 대화 턴과 콘텐츠에 사용하는 요청 필드입니다—messages의 직접 대체품이 아니므로 Chat Completions 클라이언트 코드는 필드 이름만 바꾸는 것이 아니라 개조가 필요합니다.

설명 생성 같은 단순 작업에는 추론을 끄면 되나요? 끌 수 없습니다—reasoning.effort=none은 존재하지 않습니다. 짧고 위험도가 낮은 생성 작업에는 low를 사용하십시오. 다섯 구간 중 가장 빠르고 저렴합니다.

store=false이면 대화 기록을 잃게 되나요? 아니요, 플랫폼이 대신 저장하지 않는다는 뜻입니다. 애플리케이션이 다음 input 배열에 필요한 턴을 재생하며, 이를 통해 어떤 컨텍스트를 포함할지 제어할 수 있습니다(대화 마스킹이나 분기도 가능). 대신 해당 토큰은 다시 입력으로 과금됩니다.

많은 제품 설명 호출에서 동일한 시스템 프롬프트를 반복하면 캐시 할인을 받을 수 있나요? 보장되지 않습니다. 캐시 적중은 단순한 문자 반복이 아니라 서버 정책과 타이밍에 달려 있습니다—할인이 반드시 적용된다고 가정하지 말고 응답의 usage 객체에 있는 cached_tokens를 확인하십시오.

전체 상품 카탈로그를 한 번의 요청에 배치로 넣으면 어떻게 되나요? 총 입력 토큰(캐시된 내용 포함)이 272,000을 초과하면 입력, 출력, 캐시 사용량을 포함한 전체 요청이 임계값 초과 부분만이 아니라 긴 컨텍스트 요율로 과금됩니다. 대부분의 단일 제품이나 단일 대화 호출에는 해당되지 않지만, 대형 카탈로그를 한 번의 호출에 배치로 넣기 전에 토큰 수를 확인하는 것이 좋습니다.

영구 AI 아티팩트로 빌드 시작하기

API 키를 받아 태스크 기반의 하나의 API로 이미지, 비디오, 오디오 모델을 호출하세요.

API 문서 보기