You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何同时使用Python OpenAI客户端调用Azure与OpenAI服务?

同时使用Azure ChatCompletion与OpenAI Transcribe的解决方案

OpenAI官方Python客户端(版本0.27.8)同时支持Azure OpenAI与原生OpenAI平台,以下是调用各平台接口的示例:

OpenAI ChatCompletion调用示例

# openai_chatcompletion.py

"""Test OpenAI's ChatCompletion endpoint"""
import os
import openai
import dotenv
dotenv.load_dotenv()
openai.api_key = os.environ.get('OPENAI_API_KEY')

# Hello, world.
api_response = openai.ChatCompletion.create(
  model="gpt-3.5-turbo",
  messages=[
    {"role": "user", "content": "Hello!"}
  ],
  max_tokens=16,
  temperature=0,
  top_p=1,
  frequency_penalty=0,
  presence_penalty=0,
)

print('api_response:', type(api_response), api_response)
print('api_response.choices[0].message:', type(api_response.choices[0].message), api_response.choices[0].message)

Azure ChatCompletion调用示例

# azure_openai_35turbo.py

"""Test Microsoft Azure's ChatCompletion endpoint"""
import os
import openai
import dotenv
dotenv.load_dotenv()

openai.api_type = "azure"
openai.api_base = os.getenv("AZURE_OPENAI_ENDPOINT") 
openai.api_version = "2023-05-15"
openai.api_key = os.getenv("AZURE_OPENAI_KEY")


# Hello, world.
# 除了上述`api_*`配置,OpenAI与Azure的调用参数也有区别:
# - 原生OpenAI使用`model="gpt-3.5-turbo"`
# - Azure OpenAI使用`engine="部署名称"`!⚠️
#   > 需要将engine设置为你在Azure门户部署GPT-35-Turbo或GPT-4时指定的部署名
# 以下是我在Azure资源中创建的部署名称
api_response = openai.ChatCompletion.create(
  engine="gpt-35-turbo", # engine = "deployment_name".
  messages=[
    {"role": "user", "content": "Hello!"}
  ],
  max_tokens=16,
  temperature=0,
  top_p=1,
  frequency_penalty=0,
  presence_penalty=0,
)

print('api_response:', type(api_response), api_response)
print('api_response.choices[0].message:', type(api_response.choices[0].message), api_response.choices[0].message)

注意:api_type等配置属于Python库的全局变量,切换平台时会影响全局设置。

OpenAI Transcribe调用示例(基于Whisper,Azure暂不支持)

# openai_transcribe.py

"""
Test the transcription endpoint
"""
import os
import openai
import dotenv
dotenv.load_dotenv()


openai.api_key = os.getenv("OPENAI_API_KEY")
audio_file = open("minitests/minitests_data/bilingual-english-bosnian.wav", "rb")
transcript = openai.Audio.transcribe(
    model="whisper-1",
    file=audio_file,
    prompt="Part of a Bosnian language class.",
    response_format="verbose_json",
)
print(transcript)

需求与问题

在Flask Web应用中,需同时实现:

  1. 使用Azure的ChatCompletion接口;
  2. 使用OpenAI的Transcribe接口(Azure暂不支持该功能)。

曾考虑的方案:

  • 每次调用前修改全局配置,但担心引发意外副作用;
  • 复制/分叉库以同时运行两个版本,分别对应不同服务商,操作过于繁琐;
  • 使用OpenAI Whisper的其他替代客户端。

对以上方案均不满意,希望找到更直观的解决方案,也可考虑其他服务商的Whisper服务或替代工具。

可行解决方案

方案1:创建独立客户端实例(推荐)

在openai-python 0.27.8版本中,可通过创建openai.OpenAI和openai.AzureOpenAI的独立实例,隔离不同平台的配置,避免全局变量冲突:

Azure ChatCompletion实例

import os
import openai
from dotenv import load_dotenv

load_dotenv()

# 创建Azure OpenAI客户端实例
azure_client = openai.AzureOpenAI(
    api_key=os.getenv("AZURE_OPENAI_KEY"),
    api_version="2023-05-15",
    azure_endpoint=os.getenv("AZURE_OPENAI_ENDPOINT")
)

# 调用Azure ChatCompletion
def azure_chat_completion():
    response = azure_client.chat.completions.create(
        model="gpt-35-turbo",  # 对应Azure部署的模型名称
        messages=[{"role": "user", "content": "Hello!"}],
        max_tokens=16,
        temperature=0
    )
    print(response.choices[0].message.content)

OpenAI Transcribe实例

# 创建原生OpenAI客户端实例
openai_client = openai.OpenAI(
    api_key=os.getenv("OPENAI_API_KEY")
)

# 调用OpenAI Transcribe
def openai_transcribe(audio_path):
    with open(audio_path, "rb") as audio_file:
        transcript = openai_client.audio.transcriptions.create(
            model="whisper-1",
            file=audio_file,
            prompt="Part of a Bosnian language class.",
            response_format="verbose_json"
        )
    print(transcript)

该方式通过独立实例隔离配置,不会互相干扰,适合在Web应用中同时调用两个平台的接口。

方案2:用上下文管理器临时切换全局配置

若不想创建多个实例,可使用上下文管理器临时修改全局配置,调用完成后恢复原设置:

import os
import openai
from dotenv import load_dotenv
from contextlib import contextmanager

load_dotenv()

# 保存原始全局配置
original_api_type = openai.api_type
original_api_base = openai.api_base
original_api_version = openai.api_version
original_api_key = openai.api_key

@contextmanager
def use_azure_openai():
    try:
        # 切换到Azure配置
        openai.api_type = "azure"
        openai.api_base = os.getenv("AZURE_OPENAI_ENDPOINT")
        openai.api_version = "2023-05-15"
        openai.api_key = os.getenv("AZURE_OPENAI_KEY")
        yield
    finally:
        # 恢复原始配置
        openai.api_type = original_api_type
        openai.api_base = original_api_base
        openai.api_version = original_api_version
        openai.api_key = original_api_key

@contextmanager
def use_openai():
    try:
        # 切换到原生OpenAI配置
        openai.api_type = ""
        openai.api_base = "https://api.openai.com/v1"
        openai.api_version = ""
        openai.api_key = os.getenv("OPENAI_API_KEY")
        yield
    finally:
        # 恢复原始配置
        openai.api_type = original_api_type
        openai.api_base = original_api_base
        openai.api_version = original_api_version
        openai.api_key = original_api_key

# 使用示例
def call_azure_chat():
    with use_azure_openai():
        response = openai.ChatCompletion.create(
            engine="gpt-35-turbo",
            messages=[{"role": "user", "content": "Hello!"}],
            max_tokens=16
        )
        print(response.choices[0].message.content)

def call_openai_transcribe(audio_path):
    with use_openai():
        with open(audio_path, "rb") as audio_file:
            transcript = openai.Audio.transcribe(
                model="whisper-1",
                file=audio_file,
                prompt="Part of a Bosnian language class."
            )
        print(transcript)

该方式适合兼容旧代码的场景,但多线程/多进程环境下可能存在竞态问题,Web应用中需谨慎使用。

方案3:使用第三方Whisper客户端

若不想依赖openai-python库的全局配置,可直接使用Whisper官方Python包本地运行,或调用其他第三方服务:

本地运行Whisper

import whisper

model = whisper.load_model("base")
result = model.transcribe("minitests/minitests_data/bilingual-english-bosnian.wav", prompt="Part of a Bosnian language class.")
print(result["text"])

该方式无需调用OpenAI API,但需本地部署模型,适合对数据隐私要求较高的场景。


内容的提问来源于stack exchange,提问作者Fabien Snauwaert

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 03:42:07