用 OpenAI SDK 调用百炼 Qwen3 — 一行 base_url 切换到阿里云
为什么用 OpenAI 兼容接口
DashScope SDK 是百炼的原生方式,但如果你已经有基于 OpenAI API 的代码,或者用的是 LangChain、LlamaIndex 等只认 OpenAI 接口的框架,OpenAI 兼容接口就是你的选择。
迁移只需改两处:
base_url改成百炼的兼容地址model名改成百炼的模型名
其他代码几乎不用动。
最简迁移
# 原来调 OpenAI
# from openai import OpenAI
# client = OpenAI(api_key="sk-openai-xxx")
# response = client.chat.completions.create(model="gpt-4", messages=messages)
# 改成调百炼
from openai import OpenAI
client = OpenAI(
api_key="YOUR_DASHSCOPE_API_KEY", # 用百炼的 API Key
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1" # 百炼兼容接口
)
response = client.chat.completions.create(
model="qwen3-plus", # 百炼的模型名
messages=[
{"role": "user", "content": "介绍一下 Qwen3。"}
]
)
print(response.choices[0].message.content)
就这么简单。
安装
pip install openai # ≥ 1.0.0
模型名对照
百炼兼容接口支持的 Qwen3 模型名:
| 百炼模型名 | 说明 |
|---|---|
qwen3-max | 旗舰,默认自动思考 |
qwen3-plus | 高性能,可选思考 |
qwen3-flash | 低延迟,可选思考 |
qwen3-vl-plus | 多模态(图+视频) |
qwen3-vl-flash | 多模态(仅图) |
思考模式控制
OpenAI 接口通过 extra_body 传递百炼特有参数:
开启思考
response = client.chat.completions.create(
model="qwen3-max",
messages=[{"role": "user", "content": "证明勾股定理。"}],
max_tokens=2048,
extra_body={
"enable_thinking": True
}
)
关闭思考
response = client.chat.completions.create(
model="qwen3-plus",
messages=[{"role": "user", "content": "1 + 1 = ?"}],
extra_body={
"enable_thinking": False
}
)
获取思考内容
当开启思考模式时,百炼会在 OpenAI 响应的 reasoning_content 字段返回思考链:
response = client.chat.completions.create(
model="qwen3-max",
messages=[{"role": "user", "content": "证明勾股定理。"}],
extra_body={"enable_thinking": True}
)
msg = response.choices[0].message
print("思考过程:", getattr(msg, "reasoning_content", None))
print("最终答案:", msg.content)
reasoning_content 是百炼扩展的字段,OpenAI 原生没有。如果要在代码里兼容两者,可以用 getattr 或 .pop("reasoning_content", None) 访问原始字典。
流式输出
stream = client.chat.completions.create(
model="qwen3-flash",
messages=[{"role": "user", "content": "介绍一下 Qwen3。"}],
stream=True,
extra_body={"enable_thinking": False}
)
for chunk in stream:
if chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="")
流式思考模式下,思考内容会以 delta.reasoning_content 的形式推送:
stream = client.chat.completions.create(
model="qwen3-max",
messages=[{"role": "user", "content": "证明勾股定理。"}],
stream=True,
extra_body={"enable_thinking": True}
)
for chunk in stream:
delta = chunk.choices[0].delta
if hasattr(delta, "reasoning_content") and delta.reasoning_content:
print(delta.reasoning_content, end="")
if delta.content:
print(delta.content, end="")
多模态(图像理解)
OpenAI 格式下的图像理解:
response = client.chat.completions.create(
model="qwen3-vl-plus",
messages=[
{
"role": "user",
"content": [
{"type": "text", "text": "这张图片里有什么?"},
{"type": "image_url", "image_url": {
"url": "https://example.com/image.jpg"
}}
]
}
]
)
print(response.choices[0].message.content)
本地图片需要先转成 base64:
import base64
with open("image.jpg", "rb") as f:
base64_img = base64.b64encode(f.read()).decode("utf-8")
response = client.chat.completions.create(
model="qwen3-vl-plus",
messages=[
{
"role": "user",
"content": [
{"type": "text", "text": "描述这张图片。"},
{"type": "image_url", "image_url": {
"url": f"data:image/jpeg;base64,{base64_img}"
}}
]
}
]
)
与 LangChain / LlamaIndex 集成
LangChain
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(
api_key="YOUR_DASHSCOPE_API_KEY",
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
model="qwen3-plus",
# 可以在这里设置默认的 extra_body
model_kwargs={
"extra_body": {"enable_thinking": False}
}
)
response = llm.invoke("介绍一下 Qwen3。")
print(response.content)
LlamaIndex
from llama_index.llms.openai import OpenAI
llm = OpenAI(
api_key="YOUR_DASHSCOPE_API_KEY",
api_base="https://dashscope.aliyuncs.com/compatible-mode/v1",
model="qwen3-plus"
)
response = llm.complete("介绍一下 Qwen3。")
print(response.text)
完整参数
response = client.chat.completions.create(
model="qwen3-plus",
messages=[
{"role": "system", "content": "你是一个有帮助的助手。"},
{"role": "user", "content": "写一首关于春天的诗。"}
],
# 标准 OpenAI 参数
max_tokens=1024,
temperature=0.7,
top_p=0.9,
stream=False,
# 百炼扩展参数(通过 extra_body)
extra_body={
"enable_thinking": False, # 思考模式
"repetition_penalty": 1.05, # 重复惩罚
"top_k": 50 # Top-K
}
)
不兼容的地方
虽然接口高度兼容,但仍有一些差异:
| 方面 | OpenAI | 百炼兼容 |
|---|---|---|
| 思考模式 | 原生不支持 | 通过 extra_body 扩展 |
| 思考内容字段 | 无 | reasoning_content |
| 多模态格式 | OpenAI 原生格式 | 兼容,但百炼也支持自己的格式 |
| 函数/工具调用 | 原生支持 | 支持,但可能有细微差异 |
| 上下文长度 | 因模型而异 | qwen3-max 256K,其他 128K |
如果遇到问题,可以用 DashScope SDK 作为备选方案。
相关阅读
- 02-DashScope Python SDK:百炼原生 SDK
- 01-阿里云百炼控制台:API Key 获取
- 04-API Key 管理与计费:安全管理