HiAPI
블로그

사용 가이드

hiapi API로 DeepSeek V4.1 Flash를 사용하여 이커머스 제품 이미지 처리하기

이미지를 생성하지는 않지만, 제품 리스팅을 둘러싼 나머지 모든 콘텐츠를 작성합니다.

Sep 11, 2026
hiapi API로 DeepSeek V4.1 Flash를 사용하여 이커머스 제품 이미지 처리하기

DeepSeek V4.1 Flash는 제품 이미지를 생성하지 않습니다 — 이커머스 기술 스택에서 실제로 무엇을 잘하는지 설명합니다

"제품 이미지"라는 단어 때문에 이 글을 클릭하셨다면, DeepSeek V4.1 Flash는 제품 이미지를 생성할 수 없습니다 — 이미지, 오디오, 비디오 출력이 전혀 없는 순수 텍스트 모델입니다. 하지만 이커머스 카탈로그가 의존하는 텍스트는 이미지보다 훨씬 많습니다. 모든 리스팅에는 설명이 필요하고, 모든 이미지에는 대체 텍스트가 필요하며, 모든 고객 질문에는 답변이 필요하고, 모든 광고 채널에는 동일한 판매 포인트의 다른 버전이 필요합니다. 바로 이 지점이 이 모델이 뛰어난 영역이며, 이 작업에서 유난히 저렴하고 유연합니다 — /v1/chat/completions와 /v1/responses를 모두 지원하므로 단일 요청 형식을 중심으로 통합을 재구축할 필요가 없습니다. 이 가이드는 제품 이미지 워크플로의 텍스트 부분을 다룹니다: 구조화된 출력을 사용한 대량 설명 생성, 고객 지원 Q&A, 그리고 멀티채널 문구 변형 — hiapi API 기반의 실제 요청 예시와 함께. 이미지 자체가 필요하다면 GPT Image 2와 같은 이미지 모델과 함께 사용하여 DeepSeek V4.1 Flash가 이미지 주변의 모든 텍스트 콘텐츠를 처리하도록 하십시오.

이중 API 인터페이스가 중요한 이유

hiapi의 대부분의 추론급 모델은 하나의 경로만 선택합니다 — Chat Completions 또는 Responses — 그리고 계속 그것을 사용합니다. DeepSeek V4.1 Flash는 POST /v1/chat/completions와 POST /v1/responses를 기본으로 지원하므로, 이 모델을 위해 새로운 클라이언트를 구축할 필요 없이 기존 통합에 연결할 수 있습니다. 다음 사항은 두 엔드포인트 모두에 적용됩니다:

  • reasoning_effort에는 실제로 다섯 가지 레벨이 있습니다. 가격 페이지 문구에는 none, high, max만 언급되어 있지만, 모델은 실제 요청에서 low와 medium도 허용합니다 — 다섯 레벨 모두 유효합니다. 리스팅 문구와 같은 짧고 결정적인 작업에는 none 또는 low로 충분하며, high/max는 정책에 민감한 고객 지원 답변처럼 판단이 필요한 시나리오에 남겨두십시오.
  • 구조화된 출력은 엔드포인트에 따라 다르게 동작합니다. 이 모델의 경우 /v1/chat/completions에서 response_format: {"type": "json_schema", ...}를 사용해도 스키마 검증된 결과가 반환되지 않습니다 — 대신 response_format: {"type": "json_object"}를 사용하고 프롬프트에 구조를 설명하십시오. 스키마 검증을 강제해야 한다면 동일한 요청을 /v1/responses로 보내고 text.format.type=json_schema를 설정하면 이를 준수합니다.
  • 함수 호출과 스트리밍은 예상대로 작동합니다 — /v1/chat/completions에서 tools, tool_choice, stream: true는 hiapi의 다른 모든 OpenAI 호환 채팅 모델과 동일하게 동작하므로 기존 도구 호출 코드를 조정할 필요가 없습니다.

Base URL은 https://api.hiapi.ai/v1이며, 다른 hiapi 모델과 동일한 키를 사용합니다. 두 엔드포인트의 전체 요청/응답 형식은 모델 페이지에서 확인하십시오.

사용 사례 1: 구조화된 출력을 사용한 대량 제품 설명 생성

가장 직접적인 활용은 사양표를 대규모로 브랜드 톤에 맞는 리스팅 문구로 변환하고, CMS가 후처리 없이 바로 가져올 수 있는 형식으로 출력하는 것입니다. Chat Completions에서는 json_object 모드와 프롬프트에 명시된 스키마로 이를 안정적으로 구현할 수 있습니다:

import json
import requests

resp = requests.post(
    "https://api.hiapi.ai/v1/chat/completions",
    headers={
        "Authorization": f"Bearer {HIAPI_KEY}",
        "Content-Type": "application/json",
    },
    json={
        "model": "deepseek-v4.1-flash",
        "reasoning_effort": "none",
        "response_format": {"type": "json_object"},
        "messages": [
            {
                "role": "system",
                "content": (
                    "You write concise, factual e-commerce listing copy. "
                    "Never invent specs that aren't in the input. "
                    "Respond with JSON matching this shape: "
                    '{"title": str, "short_description": str, '
                    '"long_description": str, "bullet_points": [str]}'
                ),
            },
            {
                "role": "user",
                "content": (
                    "Product: ceramic pour-over coffee dripper, 400ml, "
                    "matte white, dishwasher safe, fits standard filters. "
                    "Write listing copy for this product."
                ),
            },
        ],
    },
)
listing = json.loads(resp.json()["choices"][0]["message"]["content"])

제품 데이터베이스의 각 SKU에 대해 이를 실행하면, 채팅 창에서 텍스트를 수동으로 편집할 필요 없이 일관된 문구를 얻을 수 있습니다. 형식이 잘못된 경우 모델이 프롬프트를 준수하기를 기대하는 대신 응답이 명시적으로 오류를 반환하길 원한다면, 동일한 요청을 /v1/responses로 보내고 text.format.type=json_schema를 설정하십시오 — 이 경로는 반환 전에 출력을 스키마에 따라 검증합니다.

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

지원 어시스턴트의 경우, 두 엔드포인트 모두 진행 중인 대화를 재전송해야 합니다 — 둘 다 기본적으로 호출 간에 상태를 유지하지 않으므로 대화 기록은 공급업체가 아닌 애플리케이션에서 관리합니다. 공급업체의 세션 저장소를 신뢰하는 대신 자체 데이터베이스에서 대화를 마스킹, 분기 또는 복원해야 하는 경우에 유용합니다.

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/chat/completions",
        headers={"Authorization": f"Bearer {HIAPI_KEY}", "Content-Type": "application/json"},
        json={
            "model": "deepseek-v4.1-flash",
            "reasoning_effort": "low",
            "messages": history,
        },
    )
    answer = resp.json()["choices"][0]["message"]["content"]
    history.append({"role": "assistant", "content": answer})
    return answer

주문 상태 확인이나 반품 처리가 필요한 작업의 경우 tools에 함수로 선언하십시오 — 모델이 tool_calls 항목을 반환하면 백엔드에서 이를 실행하고, 결과를 담은 role: "tool" 메시지를 추가한 후 다시 호출합니다. 이렇게 하면 모델이 주문 데이터베이스에 직접 접근하지 않으며, hiapi의 다른 모든 OpenAI 호환 채팅 모델과 동일하게 작동합니다.

사용 사례 3: 다양한 채널을 위한 마케팅 문구 변형

동일한 제품 사실도 제품 페이지, 이메일 제목 줄, 30자 광고 헤드라인에서 서로 다른 표현이 필요합니다. /v1/chat/completions에서 stream: true를 사용하면 한 번의 요청으로 여러 채널 변형을 생성하고 전체 응답을 기다리지 않고 도착하는 대로 렌더링할 수 있습니다 — 내부 도구의 실시간 미리보기로 연결되는 경우 유용합니다. 여기서도 reasoning_effort는 none 또는 low로 유지하십시오. 짧은 문구의 톤을 맞추는 데 더 무거운 추론은 필요 없으며, 마케터가 실시간으로 반복 작업할 때 지연 시간을 낮게 유지할 수 있습니다.

비용은 얼마입니까

DeepSeek V4.1 Flash는 사전에 계획해야 하는 단계별 구간 없이 토큰당 균일하게 과금됩니다:

입력 출력 캐시된 입력
$0.44 / 1M tokens $1.32 / 1M tokens $0.014 / 1M tokens

위의 사용 사례 — 단일 제품 설명, 한 번의 지원 대화, 여러 채널 변형 배치 — 의 경우 호출당 비용은 몇 센트의 일부에 불과합니다. 캐시된 입력 요율은 의식적으로 사용할 가치가 있습니다: 시스템 프롬프트가 길고 수천 번의 SKU 호출에 걸쳐 반복된다면, 요청 간에 바이트 단위로 동일하게 유지해야 캐시 요율 조건을 충족할 수 있습니다. 요율은 사용량 기반이며 변경될 수 있습니다 — 대규모 배치 작업을 약정하기 전에 hiapi.ai/pricing을 확인하십시오.

기술 스택의 나머지 부분과의 관계

이 중 어느 것도 실제 이미지 모델을 대체하지 않습니다 — DeepSeek V4.1 Flash는 /v1/tasks 접근 권한이 없고 시각적 출력을 생성할 수 없습니다. 워크플로에 이 문구들과 함께할 제품 사진이나 라이프스타일 샷이 필요하다면 이는 GPT Image 2와 같은 이미지 모델에 대한 별도 호출이며, 둘은 요청 형식이나 엔드포인트를 공유하지 않습니다. 이미 GPT-6 Astra 이커머스 가이드를 읽었다면 이 문제의 형태는 완전히 동일합니다 — 차이점은 DeepSeek V4.1 Flash가 계층형 비용 곡선 대신 엔드포인트 선택권과 평탄한 비용 곡선을 제공한다는 것입니다.

FAQ

DeepSeek V4.1 Flash가 제품 이미지를 생성할 수 있습니까? 아니요. 이미지, 오디오, 비디오 출력이 없는 순수 텍스트 모델이며 /v1/chat/completions 또는 /v1/responses를 통해 액세스할 수 있습니다. 제품 리스팅의 시각적 부분을 처리하려면 이미지 모델과 함께 사용하십시오.

이 모델에는 Chat Completions와 Responses 중 무엇을 사용해야 합니까? 둘 다 가능합니다 — 기존 통합과 일치하는 것을 선택하십시오. 차이가 있는 유일한 경우는 구조화된 출력 강제입니다: json_schema 검증은 /v1/responses에서는 작동하지만 /v1/chat/completions에서는 작동하지 않으므로 후자에서는 json_object 모드를 사용해야 합니다.

reasoning_effort는 어떤 역할을 하며 어느 레벨을 사용해야 합니까? 답변 전에 모델이 수행하는 내부 추론의 양을 제어하여 지연 시간과 비용을 판단 품질과 교환합니다. 다섯 레벨(none, low, medium, high, max) 모두 실제 요청에서 유효하지만 가격 페이지에는 세 개만 나열되어 있습니다. 설명 생성과 같은 짧고 결정적인 작업에는 none 또는 low를 사용하고, 판단이 필요한 지원 답변에는 high 또는 max를 남겨두십시오.

스트리밍을 도구 호출과 동시에 사용할 수 있습니까? 예 — stream: true와 tools는 /v1/chat/completions에서 각각 독립적으로 작동하며, 동일한 요청에서 결합할 수 있습니다. hiapi의 다른 모든 OpenAI 호환 채팅 모델과 동일합니다.

지원 대화의 매 턴마다 전체 대화를 재전송해야 합니까? 예, 두 엔드포인트 모두에서 필요합니다. 둘 다 기본적으로 호출 간에 대화 상태를 유지하지 않으므로 애플리케이션에서 매번 필요한 기록을 다시 보내야 합니다. 이는 재전송 입력 토큰 비용을 증가시키지만, 포함할 컨텍스트를 제어하고 자체 데이터베이스에서 대화를 마스킹하거나 분기할 수 있다는 의미입니다.

캐시된 입력 요율은 자동입니까? 요청의 선두 부분(일반적으로 시스템 프롬프트)이 호출 간에 바이트 단위로 동일한 경우에만 자동으로 적용됩니다. 할인이 적용되었다고 가정하지 말고 응답의 usage 객체에 있는 cached_tokens를 확인하십시오.

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

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

API 문서 보기