DashScope 호환 모드로 OpenAI SDK에서 Qwen3.7 Plus 호출하기
2026년 7월 23일 · 20분 읽기 · Claude / GPT / Gemini

Qwen3.7 Plus는 진지하게 테스트해볼 만큼 저렴합니다. 2026년 7월 23일 기준 Qwen Cloud는 qwen3.7-plus 가격을 입력 토큰 256K까지 1M 입력 토큰당 $0.40, 1M 출력 토큰당 $1.60으로, 256K부터 1M까지는 입력 $1.20, 출력 $4.80으로 안내하고 있습니다(Qwen Cloud 가격). 무언가를 다시 작성하기 전에 이 포팅을 해볼 가치가 있는 가장 큰 이유가 바로 이것입니다.
유용한 부분은 API 형태입니다. Qwen Cloud는 OpenAI 호환 Chat Completions 엔드포인트를 다음과 같이 문서화합니다.
https://dashscope-intl.aliyuncs.com/compatible-mode/v1
자체 마이그레이션 페이지에 따르면 기존 OpenAI SDK 코드는 base_url, api_key, model만 변경하면 전환할 수 있으며, 예제에서는 model="qwen3.7-plus"를 사용합니다(Qwen Cloud OpenAI 호환성). 즉 대부분의 채팅 앱, 평가 스크립트, 소형 에이전트, 내부 도구는 몇 분 안에 포팅할 수 있습니다. 주의해야 할 부분은 thinking 파라미터, 무시되는 OpenAI 필드, 긴 컨텍스트 가격, 캐시 동작입니다.

1. 클라이언트 설정
공식 OpenAI Python SDK를 설치합니다.
python -m pip install --upgrade openai
DashScope 키를 설정합니다.
export DASHSCOPE_API_KEY="sk-your-dashscope-key"
그런 다음 가능한 한 가장 작은 Chat Completions 호출을 만듭니다.
# qwen_chat.py
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["DASHSCOPE_API_KEY"],
base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1",
)
completion = client.chat.completions.create(
model="qwen3.7-plus",
messages=[
{"role": "system", "content": "You are a concise senior Python engineer."},
{"role": "user", "content": "Write a Python function that chunks a list into size-n batches."},
],
temperature=0.2,
)
print(completion.choices[0].message.content)
print(completion.usage)
실행합니다.
python qwen_chat.py
Node에서도 같은 패턴이 동작합니다. Qwen Cloud의 빠른 마이그레이션 페이지는 JavaScript SDK에서도 baseURL: "https://dashscope-intl.aliyuncs.com/compatible-mode/v1"와 model: "qwen3.7-plus"를 사용하는 예제를 보여줍니다(Qwen Cloud OpenAI 호환성).
여러 제공자 간 전환이 필요한 코드를 유지보수한다면, 제공자 설정은 호출 지점 밖에 두세요.
PROVIDERS = {
"qwen": {
"api_key_env": "DASHSCOPE_API_KEY",
"base_url": "https://dashscope-intl.aliyuncs.com/compatible-mode/v1",
"model": "qwen3.7-plus",
}
}
def make_client(provider_name: str) -> tuple[OpenAI, str]:
cfg = PROVIDERS[provider_name]
return (
OpenAI(
api_key=os.environ[cfg["api_key_env"]],
base_url=cfg["base_url"],
),
cfg["model"],
)
OpenAI SDK 자체는 base_url, 사용자 지정 타임아웃, 재시도, 원시 응답 접근을 지원합니다. README에는 연결 오류, 408, 409, 429, 500번대 오류에 대한 자동 재시도와 max_retries, timeout 옵션이 문서화되어 있습니다(openai-python).
2. URL만이 아니라 파라미터도 포팅하기
해피 패스는 쉽습니다. 까다로운 부분은 파라미터 차이입니다.
Qwen Cloud에 따르면 Chat Completions API는 OpenAI의 Chat API와 대체로 호환되지만, Qwen 전용 파라미터는 Python SDK에서 extra_body를 통해 전달해야 합니다(Qwen Cloud OpenAI 호환성). 이는 thinking, search, 일부 샘플링 제어에서 중요합니다.
thinking을 활성화한 예시는 다음과 같습니다.
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["DASHSCOPE_API_KEY"],
base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1",
)
stream = client.chat.completions.create(
model="qwen3.7-plus",
messages=[
{"role": "user", "content": "Find the bug in this retry loop and explain the fix."}
],
extra_body={
"enable_thinking": True,
"thinking_budget": 500,
},
stream=True,
)
for chunk in stream:
if not chunk.choices:
continue
delta = chunk.choices[0].delta
if getattr(delta, "reasoning_content", None):
print(delta.reasoning_content, end="", flush=True)
if getattr(delta, "content", None):
print(delta.content, end="", flush=True)
Qwen의 thinking 가이드에 따르면 enable_thinking은 하이브리드 모델에서 추론을 켜고, thinking_budget은 thinking 토큰 상한을 정하며, thinking 토큰은 출력 토큰으로 과금됩니다(Qwen Cloud thinking). 개발자들이 놓치기 쉬운 지점은 마지막입니다. 300토큰짜리 답변을 쓰기 전에 2,000토큰을 thinking에 쓰는 모델은 300토큰 출력 호출이 아닙니다.
프로덕션 코드를 포팅하기 전에는 지원되지 않는 OpenAI 필드도 확인하세요. Qwen Cloud에 따르면 reasoning_effort, max_completion_tokens, metadata, store, verbosity, prompt_cache_key 및 여러 다른 필드는 Chat Completions 호환 모드에서 조용히 무시됩니다(Qwen Cloud OpenAI 호환성). OpenAI 앱이 비용 제어나 제품 동작을 위해 이러한 필드 중 하나에 의존한다면, 명시적으로 대체해야 합니다.
3. 보내기 전에 긴 컨텍스트 비용 계산하기
qwen3.7-plus의 가격 구간은 단순하지만 영향은 큽니다.
| 한 요청의 입력 토큰 | 입력 가격 / 1M | 출력 가격 / 1M |
|---|---|---|
| ≤ 256K | $0.40 | $1.60 |
| 256K to 1M | $1.20 | $4.80 |
출처: Qwen Cloud 가격.
5월 26일 스냅샷의 모델 마켓플레이스 페이지는 qwen3.7-plus-2026-05-26을 텍스트, 이미지, 비디오 입력과 텍스트 출력을 지원하는 모델로 소개하며, 2026년 5월 26일 스냅샷이라고 명시합니다(Qwen Cloud 모델 페이지). Qwen Cloud 변경 로그는 별도로 2026년 6월 1일 항목 아래 qwen3.7-plus와 qwen3.7-plus-2026-05-26을 나열하며, Plus 시리즈가 코딩, 도구 사용, 생산성 워크플로를 유지하면서 업그레이드된 vision-language 기능을 추가했다고 설명합니다(Qwen Cloud 모델 릴리스).
제품 코드에는 사전 추정기를 추가하세요. 우발적인 900K 토큰 호출이 비싼 구간으로 들어가는 것을 막는 데 완벽한 토큰화가 꼭 필요하지는 않습니다.
def estimate_qwen37_plus_cost(input_tokens: int, output_tokens: int) -> float:
if input_tokens <= 256_000:
input_per_m = 0.40
output_per_m = 1.60
else:
input_per_m = 1.20
output_per_m = 4.80
return (input_tokens / 1_000_000 * input_per_m) + (
output_tokens / 1_000_000 * output_per_m
)
print(estimate_qwen37_plus_cost(180_000, 4_000)) # 0.0784
print(estimate_qwen37_plus_cost(400_000, 4_000)) # 0.4992
두 번째 호출은 단순히 “컨텍스트가 조금 더 많은” 정도가 아닙니다. 가격 구간 경계를 넘습니다.

4. 접두사가 반복될 때 캐시 사용하기
컨텍스트 캐싱은 반복되는 긴 프롬프트에서 Qwen을 실질적으로 더 저렴하게 만들 수 있는 지점입니다. Qwen Cloud는 세 가지 캐시 모드, 즉 explicit, implicit, session cache를 문서화합니다(Qwen Cloud 컨텍스트 캐시).
과금 규칙은 구체적입니다.
| 캐시 모드 | 생성 비용 | 히트 비용 | 최소 캐시 토큰 |
|---|---|---|---|
| Explicit cache | 표준 입력의 125% | 표준 입력의 10% | 1,024 |
| Implicit cache | 표준 입력의 100% | 표준 입력의 20% | 256 |
| Session cache | 표준 입력의 125% | 표준 입력의 10% | 1,024 |
qwen3.7-plus의 ≤256K 구간 기준으로는, 모델 페이지에 안내된 것처럼 implicit-cache 히트 토큰은 1M당 $0.08, explicit-cache 생성 토큰은 1M당 $0.50, explicit-cache 읽기 토큰은 1M당 $0.04에 해당합니다(Qwen Cloud 모델 페이지).
정책 문서, 긴 시스템 프롬프트, 도구 매뉴얼, 스키마, 저장소 요약처럼 안정적인 접두사에 캐시를 사용하세요. 모든 요청이 서로 다른 내용으로 시작하는 프롬프트를 캐시가 구해줄 것이라고 기대하지 마세요. Qwen Cloud는 Batch와 캐시 할인을 같은 요청에 함께 적용할 수 없다고도 명시합니다(Qwen Cloud 가격).
5. 프로덕션 체크리스트와 게이트웨이 옵션
트래픽을 전환하기 전에 다음 사례를 테스트하세요.
- 기본 비스트리밍 채팅.
- 스트리밍 채팅.
extra_body를 사용한 thinking 모드.- 앱이 함수를 사용한다면 도구 호출.
- JSON 출력. Qwen 호환 모드는 OpenAI
json_schema가 아니라json_object를 지원한다는 점을 기억하세요. - 256K 입력 토큰에 가까운 긴 프롬프트.
- 캐시 사용량이 많은 반복 접두사 호출.
- 재시도 및 타임아웃 동작.
모델 패밀리 간 fallback 라우팅에는 onehop이 쉬운 경로입니다. OpenAI SDK base URL 하나를 https://api.onehop.ai/v1로 변경하고 GPT, Claude, Gemini 및 기타 모델에 하나의 게이트웨이를 사용하면 됩니다. OneHop은 OpenAI 호환 https://api.onehop.ai/v1, Anthropic 호환 https://api.onehop.ai/anthropic, Vertex/Gemini 호환 https://api.onehop.ai/vertex-ai 엔드포인트를 문서화합니다(onehop 문서). 또한 first-party보다 저렴하다고 포지셔닝되어 있으며, 신규 계정은 카드 없이 $10를 무료로 받습니다.
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["ONEHOP_API_KEY"],
base_url="https://api.onehop.ai/v1",
)
response = client.chat.completions.create(
model="openai/gpt-5.5",
messages=[{"role": "user", "content": "Summarize this incident report in 5 bullets."}],
)
print(response.choices[0].message.content)
이것이 위의 Qwen 전용 작업을 대체하지는 않습니다. 대신 앱이 한 워크플로에는 Claude, 다른 워크플로에는 GPT, 멀티모달 테스트에는 Gemini를 필요로 할 때 세 개의 과금 시스템과 세 개의 SDK 설정을 연결하지 않고도 더 깔끔한 경로를 제공합니다. 여기에서 onehop으로 Claude 및 기타 모델 호출하기를 시작하거나, $10 무료 크레딧 받기에 가입하세요.
6. 실전 포팅
포팅은 아닌 순간이 오기 전까지는 세 줄입니다. base_url, api_key, model입니다. 그다음 실제 작업은 무시되는 OpenAI 파라미터를 제거하고, Qwen 제어를 extra_body로 옮기며, 긴 컨텍스트에 강한 가드를 두는 것입니다.
긴 컨텍스트와 멀티모달 입력 지원을 갖춘 균형 잡힌 비용 모델이 필요할 때 qwen3.7-plus를 사용하세요. 단순 추출과 분류에는 thinking을 꺼두세요. 코드 리뷰, 도구 오케스트레이션, 다단계 추론에는 켜되, 비용이 흘러가지 않도록 thinking_budget을 설정하세요. 안정적인 접두사는 캐시하세요. 256K 구간 경계를 주시하세요.
같은 제품 안에서 Claude, GPT, Gemini도 필요한 팀이라면 게이트웨이 경로를 준비해두세요. onehop으로 Claude 및 기타 모델 호출하기를 사용한 다음, 카드를 추가하지 않고 실제 스모크 테스트를 실행하고 싶을 때 $10 무료 크레딧 받기에 가입하세요.
관련 글

OpenAI SDK로 Groq GPT-OSS 120B 사용하기: Base URL, 가격, 캐싱
OpenAI SDK의 base URL 한 줄만 바꿔 Groq에서 GPT-OSS 120B를 실행하고, 캐시 토큰 비용을 추정하며 도구 과금 이슈를 피하세요.
2026년 6월 17일 · 19분 읽기

OpenAI SDK로 Gemini API 호출하기: base_url, API Key, 모델명만 바꾸는 마이그레이션 튜토리얼
기존 OpenAI SDK 프로젝트를 위한 Gemini 호환 인터페이스 마이그레이션 체크리스트. 코드, 파라미터 매핑, 가격 포함.
2026년 6월 14일 · 9분 읽기

OpenAI SDK로 Gemini API 호출하기: base_url, key, 모델명만 바꾸는 연동 튜토리얼
기존 OpenAI SDK 코드로 Gemini를 연동할 때 최소 변경은 세 가지 설정이면 충분합니다.
2026년 6월 14일 · 9분 읽기