Base URL

OpenAI 호환 API의 권장 Base URL:

https://miyang.cn/api/v1
이전 주소 https://miyang.cn/v1는 기존 클라이언트와 계속 호환돼요. 새로 연동할 때는 https://miyang.cn/api/v1를 사용해 주세요.
인증

공개 모델 목록을 제외한 추론 엔드포인트는 요청 헤더에 API 키가 필요해요. 다음 두 가지 헤더를 지원해요:

  • 권장Authorization: Bearer miyang-xxxxx
  • 대체x-api-key: miyang-xxxxx

API 키는 콘솔에서 만들고 암호화해 저장하며, API Keys 페이지에서 다시 확인하고 복사할 수 있어요.

bash
# Bearer Token(推荐)
curl https://miyang.cn/api/v1/models \
  -H "Authorization: Bearer miyang-xxx"

# x-api-key(备用)
curl https://miyang.cn/api/v1/models \
  -H "x-api-key: miyang-xxx"
모델 이름 규칙

모델 ID는 보통 {provider_slug}/{model_name} 형식이에요. miyang/auto로 자동 선택하거나, 모델 목록 또는 콘솔에서 다른 호출 ID를 복사할 수 있어요.

  • miyang/auto — 현재 요청에 맞는 모델을 자동으로 선택해요
  • miyang/standard — 스탠다드 모델
  • miyang/premium — 프리미엄 모델

miyang/* 모델은 Alice 클라이언트용이에요. 다른 앱이나 스크립트는 모델 목록에서 usage_scopegeneral인 모델을 선택해 주세요.

python
# 自动选择适合当前请求的模型
model = "miyang/auto"
속도 제한

API 키마다 따로 집계되며, 기본값은 분당 60회이에요. 상한은 콘솔에서 조정할 수 있어요. 제한을 넘으면 429 Too Many Requests를 반환해요.

http
{
  "error": {
    "message": "Rate limit exceeded",
    "type": "rate_limit_error",
    "code": 1002
  }
}
과금

정산 단위는 크레딧(米粒)이며 호출 시 바로 차감돼요. 현재 충전은 1위안 = 140 크레딧(米粒)로 입금되고, 이벤트 보너스는 별도예요.

  • 호출 전 잔액이 0보다 큰지 확인하며, 잔액이 부족하면 402를 반환해요
  • prompt + completion 토큰 사용량으로 과금해요
  • Prompt Cache를 지원하며 cache_read_tokens는 할인 요금으로 계산해요

콘솔에서 크레딧(米粒)을 충전하고, 사용량에서 호출과 소비 내역을 볼 수 있어요.

json
// 余额不足响应(402)
{
  "error": {
    "message": "Insufficient balance",
    "type": "insufficient_balance",
    "code": 1004
  }
}
Chat Completions
POST /api/v1/chat/completions

OpenAI 호환 대화 엔드포인트로, 스트리밍과 비스트리밍을 지원해요. OpenAI SDK의 base_url만 바꾸면 돼요.

매개변수유형설명
model 필수string모델 ID, 형식 provider_slug/model
messages 필수array대화 메시지 목록이며 각 항목은 rolecontent를 포함해요
streamboolean스트리밍(SSE) 사용 여부, 기본값 false
temperaturefloat샘플링 온도, 범위 0–2
max_tokensinteger최대 출력 토큰 수
response_formatobject구조화 출력 형식. 「구조화 출력」 섹션을 참고하세요
bash
curl https://miyang.cn/api/v1/chat/completions \
  -H "Authorization: Bearer miyang-xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "miyang/auto",
    "messages": [
      {"role": "user", "content": "Hello!"}
    ],
    "stream": false
  }'
모델 목록
GET /api/v1/models

공개 엔드포인트이며 API 키가 필요 없어요. 현재 공개 모델을 반환하고, API 키를 넣으면 계정 권한에 따라 내부 또는 허용 목록 모델도 포함돼요. 응답 필드는 표준 OpenAI 형식에 pricing, context_length, 사용 범위 정보를 더해요.

json
{
  "object": "list",
  "data": [
    {
      "id": "miyang/auto",
      "object": "model",
      "owned_by": "miyang",
      "name": "自动",
      "model_type": "text",
      "usage_scope": "alice",
      "usage_hint": "请在 Alice 客户端内使用",
      "pricing": {
        "prompt": "3.250000",
        "completion": "13.500000",
        "cache_read": "0.550000",
        "cache_write": "0.000000"
      },
      "context_length": 262144
    }
  ]
}
Embeddings
POST /api/v1/embeddings

OpenAI 호환 임베딩 엔드포인트예요. 모델이 벡터 작업을 지원하는지는 모델 목록과 콘솔 표시를 확인해 주세요.

매개변수유형설명
model 필수stringEmbedding 모델 호출 ID
input 필수string / array벡터화할 텍스트 또는 텍스트 배열
encoding_formatstring벡터 인코딩 형식. 흔히 float를 사용해요
bash
curl https://miyang.cn/api/v1/embeddings \
  -H "Authorization: Bearer miyang-xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "provider/embedding-model",
    "input": "需要向量化的文本"
  }'
Structured Decisions (Jev)
POST /api/v1/decisions

miyang/jev-1.13은 모든 Miyang API 사용자가 이용할 수 있는 저비용 구조화 결정 모델이며 엔진은 typesafe/jev-1.13으로 고정돼요. 대화 문장을 생성하지 않고 명시된 질문에 답해요. Alice의 장기 기억 사전 필터가 첫 번째 운영 사례예요.

유효한 Miyang API 키가 있으면 누구나 Authorization: Bearer miyang-xxx로 호출할 수 있어요. /api/v1/chat/completions과 다른 전용 Decisions 프로토콜을 사용하므로 Chat 전용 /api/v1/models 목록에는 섞이지 않아요.
모델 정보
Miyang 모델 IDmiyang/jev-1.13
결정 엔진typesafe/jev-1.13
컨텍스트 한도32768 tokens
질문 유형noul / choice / score
가격 입력 $0.042 / 1M tokens, 출력 $0.000 / 1M tokens. 업스트림이 반환한 실제 토큰 사용량으로 정산해요.
사용 범위유효한 Miyang API 키를 가진 모든 사용자

요청에는 등록된 Decisions 모델 셸을 지정해야 해요. Gateway는 해당 셸로 과금하면서 실제 업스트림 엔진을 고정해요. state에는 판단할 구조화 컨텍스트를, questions에는 답할 질문을 넣어요.

매개변수유형설명
model 필수string공개 호출에는 miyang/jev-1.13을 사용해요. 일반 API 사용자는 내부 시나리오 셸을 호출할 수 없어요.
state 필수object결정에 사용할 구조화 상태예요. 호출자는 전송 전에 불필요한 민감 정보를 제거해야 해요.
questions 필수object질문 이름을 키로 하는 객체이며 1개 이상 24개 이하예요.
questions.*.type 필수stringnoul(0–1 확률), choice 또는 score.
questions.*.instructions 필수string모델이 판단할 내용을 명확하게 설명해요.
questions.*.criteriaobject선택 사항. 각 답이나 점수의 의미를 설명해 모호함을 줄여요.

요청 본문은 최대 64 KiB, 질문은 최대 24개예요. 서버는 state 본문이나 결정 답변을 기록하지 않고 질문 수, 지연 시간, 토큰 사용량만 저장해요.

bash
curl https://miyang.cn/api/v1/decisions \
  -H "Authorization: Bearer miyang-xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "miyang/jev-1.13",
    "state": {"dialog": "사용자가 일반적인 기술 질문을 했어요"},
    "questions": {
      "remember": {
        "type": "noul",
        "instructions": "이 대화에 장기 보관할 가치가 있는 정보가 있나요?",
        "criteria": {
          "true": "안정적인 신원, 장기 선호 또는 명시적인 관계 사건",
          "false": "일회성 작업, 일반 질의응답 또는 가벼운 대화"
        }
      }
    }
  }'
json
{
  "model": "miyang/jev-1.13",
  "provider": "miyang",
  "answers": {
    "remember": {
      "type": "noul",
      "noul": 0.02
    }
  }
}
Images Generations (텍스트-이미지)
POST /api/v1/images/generations

OpenAI 호환 이미지 생성 엔드포인트예요. 텍스트 프롬프트로 이미지를 만들고 URL 또는 Base64를 반환하며, OpenAI Images API와 완전히 호환돼요.

이미지 생성은 시간이 걸려요(보통 30–120초). SDK나 HTTP 클라이언트에서 타임아웃을 최소 180초으로 설정해 주세요.
매개변수유형설명
model 필수string모델 ID, 형식 provider/model, 예: ts/gpt-image-2
prompt 필수string이미지 설명 텍스트
ninteger생성할 이미지 수. 기본값 1, 여러 장 가능
sizestring이미지 크기. 자주 쓰는 값: 1024x1024(정사각), 1024x1536(세로), 1536x1024(가로), auto(모델이 선택). 긴 변 최대 3840px, 양쪽은 16의 배수, 장단비는 3:1 이하
qualitystring렌더 품질: low(빠른 초안), medium, high, auto(기본, 모델이 선택)
output_formatstring출력 형식: png(기본), jpeg(더 빠름), webp
output_compressioninteger압축률 0–100. JPEG / WebP만 적용돼요
backgroundstringopaque(기본) 또는 transparent(투명 배경, 아이콘/스티커에 적합)
moderationstring콘텐츠 검열: auto(기본) 또는 low(느슨함)

기본 예제 — 텍스트-이미지:

bash
curl https://miyang.cn/api/v1/images/generations \
  -H "Authorization: Bearer miyang-xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "ts/gpt-image-2",
    "prompt": "A children'\''s book drawing of a veterinarian listening to the heartbeat of a baby otter",
    "size": "1024x1024",
    "quality": "high"
  }'
python
from openai import OpenAI
import base64

client = OpenAI(
    api_key="miyang-xxx",
    base_url="https://miyang.cn/api/v1",
    timeout=180.0,  # 图像生成需要较长超时
)

result = client.images.generate(
    model="ts/gpt-image-2",
    prompt="A children's book drawing of a veterinarian listening to the heartbeat of a baby otter",
    size="1024x1024",
    quality="high",
)
print(result.data[0].url)

고급 예제 — JPEG 출력 + 압축 + 로컬 저장:

python
import httpx, json, base64

resp = httpx.post(
    "https://miyang.cn/api/v1/images/generations",
    headers={"Authorization": "Bearer miyang-xxx"},
    json={
        "model": "ts/gpt-image-2",
        "prompt": "A serene Japanese garden with a koi pond",
        "size": "1536x1024",
        "quality": "medium",
        "output_format": "jpeg",       # jpeg 比 png 更快
        "output_compression": 80,     # 压缩率 0-100
    },
    timeout=180.0,
)
data = resp.json()
print(data["data"][0]["url"])
json
// 响应示例
{
  "created": 1779691963,
  "data": [
    {
      "url": "https://image.token-recyclebin.com/images/2026/05/25/xxx.png",
      "revised_prompt": "A serene Japanese garden with a koi pond..."
    }
  ]
}

크기와 품질 참고

매개변수선택값설명
size1024x1024(정사각)
1536x1024(가로)
1024x1536(세로)
2048x2048(2K)
3840x2160(4K 가로)
auto
긴 변 ≤ 3840px, 양쪽은 16의 배수, 비율 ≤ 3:1, 총 픽셀 655,360 – 8,294,400
qualitylow · medium · high · autolow가 가장 빠르고 초안·반복에 좋아요. high가 가장 정밀하고 최종 출력에 좋아요
output_formatpng · jpeg · webpjpegpng보다 빨라서 지연에 민감한 상황에 우선 사용해요

GPT Image 2 참고 가격(크레딧(米粒) / 장)

Quality1024×10241024×1536 / 1536×1024
Low6 크레딧(米粒)5 크레딧(米粒)
Medium53 크레딧(米粒)41 크레딧(米粒)
High211 크레딧(米粒)165 크레딧(米粒)
Images Edits (참조 이미지 / 이미지-이미지)
POST /api/v1/images/edits

OpenAI 호환 이미지 편집 엔드포인트예요. 참조 이미지를 한 장 이상 올리고 텍스트 프롬프트로 새 이미지를 만들어요. 부분 편집(mask)과 여러 장 합성을 지원하며, 요청은 multipart/form-data 형식이에요.

대표 사용 예:

  • 스타일 변환 — 사진 업로드 + "유화 스타일로 바꿔 주세요"
  • 여러 장 합성 — 여러 소재 업로드 + "이 물건들이 들어간 선물 바구니를 만들어 주세요"
  • 부분 편집 — 원본 + mask + "마스크 영역에 플라밍고를 추가해 주세요"
매개변수유형설명
model 필수string모델 ID, 예: ts/gpt-image-2
image 필수file / file[]참조 이미지. 한 장은 image, 여러 장은 image[]( image[]=@file.png를 여러 번)
prompt 필수string편집 지시 설명
maskfile마스크 이미지(알파 채널 필요). 투명 영역이 편집 대상이에요. 여러 장일 때 mask는 첫 장에 적용돼요
ninteger생성 수, 기본값 1
sizestring출력 크기. 기본값 auto. Generations와 같은 크기 옵션을 지원해요
qualitystringlow · medium · high · auto

한 장 편집 — 스타일 변환:

bash
curl https://miyang.cn/api/v1/images/edits \
  -H "Authorization: Bearer miyang-xxx" \
  -F "model=ts/gpt-image-2" \
  -F "prompt=Turn this photo into a Studio Ghibli style illustration" \
  -F "image=@photo.png" \
  -F "size=1536x1024"
python
from openai import OpenAI

client = OpenAI(
    api_key="miyang-xxx",
    base_url="https://miyang.cn/api/v1",
    timeout=180.0,
)

result = client.images.edit(
    model="ts/gpt-image-2",
    image=open("photo.png", "rb"),
    prompt="Turn this photo into a Studio Ghibli style illustration",
)
print(result.data[0].url)

여러 장 합성 — 여러 소재를 한 장으로:

bash
# 多图参考:用 image[] 传多张
curl https://miyang.cn/api/v1/images/edits \
  -H "Authorization: Bearer miyang-xxx" \
  -F "model=ts/gpt-image-2" \
  -F "image[]=@lotion.png" \
  -F "image[]=@soap.png" \
  -F "image[]=@candle.png" \
  -F 'prompt=A gift basket on a white background containing all these items'

부분 편집 — mask 사용:

python
# mask 需要有 alpha 通道,透明区域为编辑区
result = client.images.edit(
    model="ts/gpt-image-2",
    image=open("room.png", "rb"),
    mask=open("mask.png", "rb"),
    prompt="Add a flamingo in the pool area",
    quality="high",
)
print(result.data[0].url)
Mask 요구사항:mask와 원본은 크기와 형식이 같아야 하고, 각각 50MB 미만이어야 해요. mask에는 알파 채널이 있어야 하며 투명 영역이 편집 구역이에요. GPT Image의 mask는 프롬프트 안내라서 가장자리를 정확히 따르지 않을 수 있어요.
Videos Generations (비디오 생성)
POST /api/v1/videos/generations

비동기 비디오 생성 엔드포인트예요. 생성 요청이 성공하면 task_id를 반환해요. 같은 요청을 다시 보내지 말고 조회 엔드포인트로 상태를 확인해 주세요.

현재 Alice 및 내부 계정에서만 사용할 수 있어요. 지원 모델은 miyang/h3, miyang/h3-max예요.
매개변수유형설명
model 필수stringmiyang/h3 또는 miyang/h3-max
content 필수array정확히 하나의 비어 있지 않은 텍스트를 포함하는 멀티모달 배열이며 이미지, 비디오, 오디오를 함께 넣을 수 있어요
duration 필수integer출력 길이(초). H3는 4–15초, H3 Max는 5–15초를 지원해요
resolutionstring기본값 768P. H3는 768P / 2K, H3 Max는 480P / 768P를 지원해요
ratiostring화면 비율: 21:9, 16:9, 4:3, 1:1, 3:4, 9:16. 참조 미디어는 adaptive를 사용할 수 있어요
aigc_watermarkbooleanAIGC 워터마크 추가 여부
extraobjectH3 Max 전용. prompt_expansion_mode는 disabled, balanced, quality 중 하나예요

content 미디어 형식

typerole설명
text정확히 한 개가 필요하며 최대 7,000자예요
image_urlfirst_frame / last_frame / reference_image첫 프레임, 마지막 프레임 또는 참조 이미지. role이 없는 이미지 한 장은 첫 프레임으로 처리돼요
video_urlreference_video참조 비디오, 최대 3개. role이 필요해요
audio_urlreference_audio참조 오디오, 최대 3개. role이 필요해요
bash
curl https://miyang.cn/api/v1/videos/generations \
  -H "Authorization: Bearer miyang-xxx" \
  -H "Idempotency-Key: alice-video-001" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "miyang/h3",
    "content": [
      {"type": "text", "text": "A lamb runs across a sunlit meadow"}
    ],
    "duration": 5,
    "resolution": "768P",
    "ratio": "16:9"
  }'
json
{
  "task_id": "443429054845209"
}

사용자 과금

표는 정확한 CNY 기준 가격이에요. 크레딧(米粒)은 CNY price ÷ CNY-per-USD rate × 1000로 계산해요.

모델과금 항목사용자 가격
miyang/h3출력 비디오 · 768P¥1.25 / s
miyang/h3출력 비디오 · 2K¥2.0 / s
miyang/h3참조 비디오 입력 · 768P¥1.25 / s
miyang/h3참조 비디오 입력 · 2K¥2.0 / s
miyang/h3참조 이미지 입력(처음 5장은 무료, 초과분만 과금)¥0.5 / 장
miyang/h3-max출력 비디오 · 480P¥0.825 / s
miyang/h3-max출력 비디오 · 768P¥1.25 / s
miyang/h3-max참조 비디오 입력 · 480P¥0.925 / s
miyang/h3-max참조 비디오 입력 · 768P¥2.425 / s
miyang/h3-max참조 이미지 입력(처음 2장은 무료, 초과분만 과금)¥1.25 / 장
참조 오디오 입력무료
출력 비디오, 참조 비디오 입력, 무료 한도 초과 이미지 비용을 합산해 정산해요. 크레딧 환산에는 작업 정산 시점의 실시간 환율을 사용하며 사용량 기록의 실제 차감액이 최종 기준이에요.
비디오 작업 조회
GET /api/v1/videos/generations/{task_id}

생성 시 받은 task_id로 조회해요. 상태는 queued, running, succeeded, failed, cancelled 중 하나예요. 5–15초 간격으로 조회하는 것을 권장해요.

성공한 비디오는 현재 사용자의 Miyang Drive에 자동 저장되어 클라우드 용량을 사용해요. 공간이 부족하면 quota_full을 반환하며, 파일을 정리하거나 용량을 확장해야 저장과 정산이 완료돼요. 재생 URL은 임시 서명 주소이므로 필요할 때 다시 조회해 주세요.
bash
curl https://miyang.cn/api/v1/videos/generations/443429054845209 \
  -H "Authorization: Bearer miyang-xxx"
json
{
  "task": {
    "status": "succeeded",
    "resolution": "768P",
    "duration": 5,
    "content": {
      "url": "https://signed.example/video.mp4",
      "drive_file_id": "drv-xxx",
      "size_bytes": 1757278,
      "expires_in": 3600
    }
  }
}
비디오 작업 취소
DELETE /api/v1/videos/generations/{task_id}

처리 중인 작업을 취소하고 과금 보류를 해제해요. 연결된 Miyang Drive 파일도 함께 삭제돼요. 완료된 작업을 업스트림에서 취소할 수 없는 경우 엔드포인트 응답을 따라 주세요.

bash
curl -X DELETE https://miyang.cn/api/v1/videos/generations/443429054845209 \
  -H "Authorization: Bearer miyang-xxx"
웹 검색(개요 및 과금)

에이전트와 앱에 실시간 웹 기능을 제공해요: 웹 검색, 뉴스 검색, 페이지 본문 읽기. 모두 GET이며 추론과 같은 API 키로 인증해요(Authorization: Bearer miyang-xxx).

과금: 빠른 검색, 페이지 읽기, 뉴스 검색은 회당 10 크레딧(米粒), 심층 검색은 회당 50 크레딧(米粒)이에요.요청 실패(업스트림 오류, 매개변수 오류, 뉴스 검색 결과 없음)는 차감하지 않아요.
엔드포인트매개변수설명
/api/v1/websearch/searchq심층 검색: 결과에 페이지 본문 추출과 재정렬 컨텍스트가 있어 RAG에 좋아요
/api/v1/websearch/simple-searchq빠른 검색: 제목과 요약만 반환하며 더 빨라요
/api/v1/websearch/readerurl페이지 읽기: 지정 URL을 가져와 깨끗한 텍스트로 변환해요
/api/v1/websearch/search-newsq뉴스 검색: 최근 뉴스 소스만 검색하며 결과에도 검색 컨텍스트가 있어요
빠른 검색
GET /api/v1/websearch/simple-search

검색만 하고 페이지 추출·재정렬은 하지 않아요. 보통 1초 안에 돌아와요. 제목 + 요약 + 링크만 필요할 때 쓰면 좋아요. 답변 카드에 히트하면 응답에 answerBox 필드가 추가로 들어가요.

매개변수유형설명
q 필수string검색 키워드
bash
curl "https://miyang.cn/api/v1/websearch/simple-search?q=最新AI新闻" \
  -H "Authorization: Bearer miyang-xxx"
json
// 响应示例
{
  "code": 200,
  "message": "ok",
  "took_ms": 950,
  "data": {
    "answerBox": {
      "title": "Latest AI news",
      "snippet": "..."
    },
    "organic": [
      {
        "title": "AI News",
        "link": "https://example.com",
        "snippet": "Latest updates..."
      }
    ]
  }
}
페이지 읽기
GET /api/v1/websearch/reader

대상 페이지 URL을 이미 알 때 페이지를 가져와 깨끗한 Markdown으로 변환해요. 이 엔드포인트는 최상위 content를 반환하며 data가 아니에요.

매개변수유형설명
url 필수string읽을 웹페이지 주소. http:// 또는 https://로 시작해야 해요
bash
curl "https://miyang.cn/api/v1/websearch/reader?url=https://go.dev" \
  -H "Authorization: Bearer miyang-xxx"
json
// 响应示例(content 为页面正文)
{
  "code": 200,
  "message": "ok",
  "content": "# The Go Programming Language\n\nGo is an open source programming language..."
}
뉴스 검색
GET /api/v1/websearch/search-news

최근 뉴스 소스만 검색해요. 나머지 파이프라인은 심층 검색과 같고, 결과에도 contexts 본문 조각이 있어요.

맞는 뉴스가 없으면 404를 반환해요(본문 {"code": 404, "message": "no search results"}). 정상적인 업무 결과이며 차감하지 않아요.
매개변수유형설명
q 필수string뉴스 검색 키워드
bash
curl "https://miyang.cn/api/v1/websearch/search-news?q=OpenAI" \
  -H "Authorization: Bearer miyang-xxx"
json
// 响应示例
{
  "code": 200,
  "message": "ok",
  "took_ms": 4200,
  "data": {
    "organic": [
      {
        "title": "Latest OpenAI news",
        "link": "https://example.com/news",
        "snippet": "Recent product and research updates...",
        "contexts": [
          { "idx": 0, "text": "..." }
        ]
      }
    ]
  }
}
스트리밍(SSE)

요청 본문에 "stream": true을 넣으면 스트리밍이 켜져요. 응답 형식은 OpenAI SSE 규격과 완전히 호환돼요. 스트림 종료 표시는 data: [DONE]이에요.

python
from openai import OpenAI

client = OpenAI(
    api_key="miyang-xxx",
    base_url="https://miyang.cn/api/v1",
)

stream = client.chat.completions.create(
    model="miyang/auto",
    messages=[{"role": "user", "content": "Hello!"}],
    stream=True,
)

for chunk in stream:
    print(chunk.choices[0].delta.content, end="")
구조화 출력

response_format 필드를 그대로 전달하며 JSON Schema를 지원해요. 출력 형식은 업스트림 모델이 보장하고, 플랫폼은 추가로 가공하지 않아요.

json
{
  "model": "miyang/auto",
  "messages": [...],
  "response_format": {
    "type": "json_schema",
    "json_schema": {
      "name": "result",
      "schema": {
        "type": "object",
        "properties": {
          "answer": { "type": "string" }
        }
      }
    }
  }
}
Prompt Cache

Prompt Cache를 지원하는 모델은 업스트림이 반환한 캐시 히트 토큰을 할인 요금으로 과금해요. 플랫폼은 업스트림 usage 필드를 그대로 전달하고, 청구서에 캐시 히트량이 보여요.

공급업체마다 필드 이름이 달라요:

  • cache_read_input_tokens — Anthropic
  • prompt_cache_hit_tokens — DeepSeek
  • cached_tokens — OpenAI
json
{
  "usage": {
    "prompt_tokens": 1000,
    "completion_tokens": 200,
    "cache_read_input_tokens": 800,   // Anthropic
    "prompt_cache_hit_tokens": 800,    // DeepSeek
    "cached_tokens": 800               // OpenAI
  }
}
Python SDK 예제

base_urlapi_key만 바꾸면 OpenAI SDK로 호출할 수 있어요.

python
from openai import OpenAI

client = OpenAI(
    api_key="miyang-xxx",
    base_url="https://miyang.cn/api/v1",
)

resp = client.chat.completions.create(
    model="miyang/auto",
    messages=[{"role": "user", "content": "Hello!"}],
)
print(resp.choices[0].message.content)
cURL 예제
bash
# 非流式
curl https://miyang.cn/api/v1/chat/completions \
  -H "Authorization: Bearer miyang-xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "miyang/auto",
    "messages": [{"role": "user", "content": "Hello"}]
  }'

# 流式
curl https://miyang.cn/api/v1/chat/completions \
  -H "Authorization: Bearer miyang-xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "miyang/auto",
    "messages": [{"role": "user", "content": "Hello"}],
    "stream": true
  }'