Python OpenAI

openai es una potente biblioteca de Python para interactuar con una serie de modelos y servicios de OpenAI.

openai encapsula todas las llamadas a la API RESTful, lo que permite a los desarrolladores integrar fácilmente potentes capacidades de IA en sus aplicaciones Python, como procesamiento de lenguaje natural, generación de imágenes y reconocimiento de voz, entre otras.

Funciones principales:

  • Generación de texto: usa modelos como GPT-4 o GPT-5 para generar artículos, código, resúmenes, diálogos, etc.
  • Generación de imágenes: crea imágenes a partir de descripciones de texto mediante el modelo DALL-E.
  • Embeddings: convierte texto en representaciones vectoriales, comúnmente utilizado en tareas como búsqueda semántica, clasificación de texto y agrupamiento.
  • Conversión de voz a texto: transcribe archivos de audio a texto usando el modelo Whisper.
  • Ajuste fino (Fine-tuning): entrena un modelo más específico proporcionando tu propio conjunto de datos.
  • API de Asistentes (Assistants): crea aplicaciones complejas que pueden comprender el contexto, invocar herramientas y realizar interacciones a largo plazo.

Dirección de código abierto de openai:https://github.com/openai/openai-python


¿Cómo usar?

Requisitos del entorno:

  • Versión de Python: 3.9 o superior.
  • Bibliotecas dependientes: httpx (predeterminado), aiohttp (opcional), websockets (necesario para Realtime API).

Primero, necesitas instalar la biblioteca openai con pip:

pip install openai

o 

pip3 install openai

Luego necesitas ir al sitio web oficial de OpenAIhttps://platform.openai.com/ registrar una cuenta y generar una API Key en la página de claves de API.

Ver la versión instalada:

import openai
print(openai.__version__)  # 输出当前 SDK 版本

Ejemplo

import os
from openai import OpenAI

client = OpenAI(
    # This is the default and can be omitted
    api_key=Tu API key,
)

response = client.responses.create(
    model="gpt-4o",
    instructions="You are a coding assistant that talks like a pirate.",
    input="How do I check if a Python object is an instance of a class?",
)

print(response.output_text)

Descripción de parámetros:

Nombre del parámetro Obligatorio Tipo Descripción
api_key Sí str API key de OpenAI
model Sí str Especifica el modelo de OpenAI a utilizar; determina las capacidades, el nivel de razonamiento y el costo.
instructions no str Instrucción a nivel de sistema (System Prompt), define la identidad, las reglas de comportamiento y el estilo de expresión del modelo, con prioridad sobreinput
input Sí str / list Contenido de entrada del usuario, describe un problema o tarea específica.

Modelos de terceros

En China, actualmente acceder a OpenAI es un poco complicado; muchos proveedores nacionales también son compatibles con OpenAI, como DeepSeek, Qwen y GLM.

DeepSeek

DeepSeek API es totalmente compatible con el formato de API de OpenAI; solo necesita modificar una pequeña configuración para usar directamente el SDK de OpenAI o herramientas compatibles para acceder a DeepSeek API.

Parámetro Valor/Descripción
base_url Obligatorio, valor fijo:https://api.deepseek.com(También se puede completarhttps://api.deepseek.com/v1, solo por compatibilidad con OpenAI; v1 no está relacionado con la versión del modelo).
api_key Obligatorio, primero debe solicitar una API Key exclusiva en el sitio web oficial de DeepSeek (dirección de solicitud:https://platform.deepseek.com/)
model

Obligatorio, el modelo a configurar:

  • deepseek-v4-flash: corresponde almodo sin razonamiento, velocidad de respuesta rápida, adecuado para preguntas y respuestas convencionales.
  • deepseek-v4-pro: corresponde almodo de razonamiento, mayor capacidad de razonamiento, adecuado para resolver problemas complejos.

Ejemplo

import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ.get('DEEPSEEK_API_KEY'),   # Se recomienda configurar mediante variables de entorno; también se puede escribir directamente (no recomendado).
    base_url="https://api.deepseek.com")

response = client.chat.completions.create(
    model="deepseek-v4-flash",
    messages=[
        {"role": "system", "content": "You are a helpful assistant"},
        {"role": "user", "content": "Hello"},
    ],
    stream=False    # stream=False no streaming (retorno único), stream=True streaming (retorno en tiempo real)
)

print(response.choices[0].message.content)

Forma de uso

A continuación, usamos el SDK de OpenAI para acceder al modelo Tongyi Qianwen en el servicio Bailian.

Ejemplo de llamada no streaming

Ejemplo

from openai import OpenAI
import os

def get_response():
    client = OpenAI(
        api_key="sk-xxx",  # Use la API Key de Bailian de Alibaba Cloud
        base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",  # Complete la base_url del SDK de DashScope
    )
    completion = client.chat.completions.create(
        model="qwen-plus",  # Aquí se usa qwen-plus como ejemplo; puede cambiar el nombre del modelo según sea necesario. Lista de modelos: https://help.aliyun.com/zh/model-studio/getting-started/models
        messages=[{'role': 'system', 'content': 'You are a helpful assistant.'},
                  {'role': 'user', 'content': '¿Quién eres?'}]
        )
    # datos JSON
    #print(completion.model_dump_json())
    print(completion.choices[0].message.content)

if __name__ == '__main__':
    get_response()

Al ejecutar el código se puede obtener el siguiente resultado:

Soy Tongyi Qianwen, un modelo de lenguaje a gran escala desarrollado de forma independiente por el Laboratorio Tongyi, perteneciente al grupo Alibaba. Puedo ayudarte a responder preguntas y crear textos, como escribir historias, redactar documentos oficiales, escribir correos electrónicos, guiones, realizar razonamiento lógico, programar, etc. También puedo expresar opiniones y jugar juegos. Si tienes alguna pregunta o necesitas ayuda, ¡no dudes en decírmelo!

Ejemplo de llamada streaming

Ejemplo

from openai import OpenAI

def get_response():
    client = OpenAI(
        api_key="sk-xxx",
        base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
    )

    completion = client.chat.completions.create(
        model="qwen-plus",
        messages=[
            {'role': 'system', 'content': 'You are a helpful assistant.'},
            {'role': 'user', 'content': '¿Quién eres?'}
        ],
        stream=True,
        stream_options={"include_usage": True}
    )

    for chunk in completion:
        # el chunk puede no tener choices o delta
        if hasattr(chunk, "choices") and len(chunk.choices) > 0:
            choice = chunk.choices[0]
            if hasattr(choice, "delta") and hasattr(choice.delta, "content"):
                print(choice.delta.content, end='', flush=True)

if __name__ == '__main__':
    get_response()

Al ejecutar el código se puede obtener el siguiente resultado:

Soy Tongyi Qianwen, un modelo de lenguaje a gran escala desarrollado de forma independiente por el Laboratorio Tongyi, perteneciente al grupo Alibaba. Puedo ayudarte a responder preguntas y crear textos, como escribir historias, redactar documentos oficiales, escribir correos electrónicos, guiones, realizar razonamiento lógico, programar, etc. También puedo expresar opiniones y jugar juegos. Si tienes alguna pregunta o necesitas ayuda, ¡no dudes en decírmelo!

Funciones especiales

Función de visión (Vision)

Admite entrada de imágenes (URL o codificación Base64) para lograr interacción multimodal.

Entrada de URL de imagen:

Ejemplo

prompt = "What is in this image?"
img_url = "https://upload.wikimedia.org/wikipedia/commons/thumb/d/d5/2023_06_08_Raccoon1.jpg/1599px-2023_06_08_Raccoon1.jpg"

response = client.responses.create(
    model="gpt-5.2",
    input=[
        {
            "role": "user",
            "content": [
                {"type": "input_text", "text": prompt},
                {"type": "input_image", "image_url": img_url},
            ],
        }
    ],
)
print(response.output_text)

Entrada de imagen codificada en Base64:

Ejemplo

import base64
from openai import OpenAI

client = OpenAI()

prompt = "What is in this image?"
# Leer la imagen local y codificarla en Base64
with open("path/to/image.png", "rb") as image_file:
    b64_image = base64.b64encode(image_file.read()).decode("utf-8")

response = client.responses.create(
    model="gpt-5.2",
    input=[
        {
            "role": "user",
            "content": [
                {"type": "input_text", "text": prompt},
                {"type": "input_image", "image_url": f"data:image/png;base64,{b64_image}"},
            ],
        }
    ],
)

Uso asíncrono (Async usage)

Reemplace OpenAI por AsyncOpenAI y llame a la API con await:

Ejemplo asíncrono básico:

Ejemplo

import os
import asyncio
from openai import AsyncOpenAI

client = AsyncOpenAI(
    api_key=os.environ.get("OPENAI_API_KEY"),
)

async def main() -> None:
    response = await client.responses.create(
        model="gpt-5.2",
        input="Explain disestablishmentarianism to a smart five year old."
    )
    print(response.output_text)

asyncio.run(main())

Optimización para escenarios asíncronos (backend aiohttp), instale la versión extendida:

pip install openai[aiohttp]

Optimización del backend aiohttp:

Ejemplo

import os
import asyncio
from openai import DefaultAioHttpClient, AsyncOpenAI

async def main() -> None:
    # El administrador de contexto asegura la liberación de recursos
    async with AsyncOpenAI(
        api_key=os.environ.get("OPENAI_API_KEY"),
        http_client=DefaultAioHttpClient(),  # Habilitar el backend aiohttp
    ) as client:
        chat_completion = await client.chat.completions.create(
            messages=[{"role": "user", "content": "Say this is a test"}],
            model="gpt-5.2",
        )

asyncio.run(main())

Respuestas en streaming (Streaming responses)

Obtenga respuestas en tiempo real basadas en Server Side Events (SSE), con interfaz consistente para síncrono/asíncrono.

Ejemplo de streaming síncrono:

Ejemplo

from openai import OpenAI

client = OpenAI()

stream = client.responses.create(
    model="gpt-5.2",
    input="Write a one-sentence bedtime story about a unicorn.",
    stream=True,  # Habilitar salida en streaming
)

for event in stream:
    print(event)  # Imprimir la respuesta por segmentos

Ejemplo de streaming asíncrono:

Ejemplo

import asyncio
from openai import AsyncOpenAI

client = AsyncOpenAI()

async def main():
    stream = await client.responses.create(
        model="gpt-5.2",
        input="Write a one-sentence bedtime story about a unicorn.",
        stream=True,
    )
    async for event in stream:
        print(event)

asyncio.run(main())

API en tiempo real (Realtime API)

Diálogo multimodal de baja latencia (texto/audio), implementado sobre WebSocket, depende de la biblioteca websockets.

Ejemplo básico de texto:

Ejemplo

import asyncio
from openai import AsyncOpenAI

async def main():
    client = AsyncOpenAI()
    # Establecer conexión en tiempo real
    async with client.realtime.connect(model="gpt-realtime") as connection:
        # Actualizar configuración de la sesión (solo salida de texto)
        await connection.session.update(
            session={"type": "realtime", "output_modalities": ["text"]}
        )
        # Enviar mensaje del usuario
        await connection.conversation.item.create(
            item={
                "type": "message",
                "role": "user",
                "content": [{"type": "input_text", "text": "Say hello!"}],
            }
        )
        # Activar respuesta del modelo
        await connection.response.create()
        # Escuchar eventos en tiempo real
        async for event in connection:
            if event.type == "response.output_text.delta":
                print(event.delta, flush=True, end="")  # Imprimir fragmentos de texto en tiempo real
            elif event.type == "response.output_text.done":
                print()  # Nueva línea al finalizar la respuesta
            elif event.type == "response.done":
                break  # Detener la escucha

asyncio.run(main())

Manejo de errores de la API en tiempo real:

Ejemplo

import asyncio
from openai import AsyncOpenAI

client = AsyncOpenAI()

async def main():
    async with client.realtime.connect(model="gpt-realtime") as connection:
        async for event in connection:
            if event.type == 'error':
                # Capturar y manejar eventos de error (la conexión no se desconecta)
                print(fTipo de error: {event.error.type})
                print(f"Código de error: {event.error.code}")
                print(f"Mensaje de error: {event.error.message}")

asyncio.run(main())

Manual de referencia

El contenido de la siguiente tabla es:

  • Inicialización del núcleo: para uso síncronoOpenAI, para uso asíncronoAsyncOpenAI, para AzureAzureOpenAI, se recomienda configurar la API Key mediante variables de entorno.
  • Generación de texto: para la nueva versión se prefiere usarresponses.create(), para escenarios clásicos usarchat.completions.create(), para salida en streaming se debe configurarstream=True。
  • Capacidades avanzadas: soporta multimodal (entrada de imágenes), API en tiempo real, carga de archivos/ajuste fino, el manejo de errores requiere capturarAPIErrorsubclases, el tiempo de espera/reintentos se pueden configurar de forma flexible.

Instalación e importación

Instalar el SDK oficial:

pip install --upgrade openai

Importar las clases principales:

from openai import OpenAI, AsyncOpenAI, AzureOpenAI

Creación del cliente

Crear el cliente estándar de OpenAI:

from openai import OpenAI

client = OpenAI(api_key="YOUR_API_KEY")

Crear el cliente mediante variables de entorno:

import os
from openai import OpenAI

os.environ["OPENAI_API_KEY"] = "YOUR_API_KEY"
client = OpenAI()

Configurar el tiempo de espera de las solicitudes y el número de reintentos:

client = OpenAI(
    timeout=30,
    max_retries=2
)

Generación de texto (Responses API)

La solicitud más básica de generación de texto:

response = client.responses.create(
    model="gpt-5.2",
    input="用一句话解释什么是 Python"
)

print(response.output_text)

Restringir el comportamiento del modelo mediante instrucciones:

response = client.responses.create(
    model="gpt-5.2",
    instructions="你是一个严谨的 Python 教程作者",
    input="解释什么是列表推导式"
)

print(response.output_text)

Conversaciones de varios turnos

Construir diálogos contextuales usando el array input:

response = client.responses.create(
    model="gpt-5.2",
    input=[
        {"role": "user", "content": "Python 是什么?"},
        {"role": "assistant", "content": "Python 是一门高级编程语言。"},
        {"role": "user", "content": "它适合做什么?"}
    ]
)

print(response.output_text)

Salida estructurada (JSON Schema)

Solicitar al modelo que devuelva datos JSON que cumplan con el Schema:

response = client.responses.create(
    model="gpt-5.2",
    response_format={
        "type": "json_schema",
        "json_schema": {
            "name": "tech_summary",
            "schema": {
                "type": "object",
                "properties": {
                    "title": {"type": "string"},
                    "summary": {"type": "string"}
                },
                "required": ["title", "summary"]
            }
        }
    },
    input="介绍 asyncio"
)

print(response.output_parsed)

Llamada a herramientas (Function Calling)

Definir herramientas y permitir que el modelo decida automáticamente si invocarlas:

tools = [
    {
        "type": "function",
        "function": {
            "name": "get_weather",
            "description": "获取城市天气",
            "parameters": {
                "type": "object",
                "properties": {
                    "city": {"type": "string"}
                },
                "required": ["city"]
            }
        }
    }
]

response = client.responses.create(
    model="gpt-5.2",
    tools=tools,
    input="北京今天天气怎么样?"
)

print(response.output)

Salida en streaming (Streaming)

Salida en streaming síncrona:

with client.responses.stream(
    model="gpt-5.2",
    input="写一段 Python 示例代码"
) as stream:
    for event in stream:
        if event.type == "response.output_text.delta":
            print(event.delta, end="")

Salida en streaming asíncrona:

stream = await client.responses.create(
    model="gpt-5.2",
    input="解释什么是生成式 AI",
    stream=True
)

async for event in stream:
    print(event)

Llamada asíncrona (AsyncOpenAI)

Usar el cliente asíncrono en asyncio:

import asyncio
from openai import AsyncOpenAI

client = AsyncOpenAI()

async def main():
    response = await client.responses.create(
        model="gpt-5.2",
        input="解释什么是事件循环"
    )
    print(response.output_text)

asyncio.run(main())

API en tiempo real (Realtime)

Usar WebSocket para conversaciones en tiempo real de baja latencia:

async with client.realtime.connect(model="gpt-realtime") as conn:
    await conn.session.update(
        session={"type": "realtime", "output_modalities": ["text"]}
    )

    await conn.conversation.item.create(
        item={
            "type": "message",
            "role": "user",
            "content": [{"type": "input_text", "text": "你好"}]
        }
    )

    async for event in conn:
        print(event)

Generación de imágenes

Generar imágenes a partir de texto:

image = client.images.generate(
    model="gpt-image-1",
    prompt="一只在写代码的猫",
    size="1024x1024"
)

print(image.data[0].url)

Generación de embeddings (Embeddings)

Generar incrustaciones vectoriales de texto:

embedding = client.embeddings.create(
    model="text-embedding-3-small",
    input="Hello world"
)

print(embedding.data[0].embedding)

Conversión de audio a texto (Speech to Text)

Convertir archivos de audio en texto:

audio_file = open("speech.mp3", "rb")

transcript = client.audio.transcriptions.create(
    model="whisper-1",
    file=audio_file
)

print(transcript.text)

Texto a voz (Text to Speech)

Convertir texto en archivos de voz:

speech = client.audio.speech.create(
    model="gpt-4o-mini-tts",
    voice="alloy",
    input="你好,欢迎使用 OpenAI"
)

with open("output.mp3", "wb") as f:
    f.write(speech)

Gestión de archivos (Files API)

Subir archivos:

from pathlib import Path

client.files.create(
    file=Path("data.jsonl"),
    purpose="fine-tune"
)

Listar archivos:

files = client.files.list()
for f in files:
    print(f.id, f.filename)

Eliminar archivos:

client.files.delete(file_id="file-xxx")

Ajuste fino de modelos (Fine-tuning Jobs)

Crear una tarea de ajuste fino:

job = client.fine_tuning.jobs.create(
    training_file="file-xxx",
    model="gpt-3.5-turbo"
)

print(job.id, job.status)

Verificación de Webhook

Verificar y analizar solicitudes Webhook:

event = client.webhooks.unwrap(request_body, request_headers)

Solo verificar la firma:

client.webhooks.verify_signature(request_body, request_headers)

Manejo de errores

Capturar las excepciones lanzadas por el SDK:

import openai

try:
    client.responses.create(
        model="gpt-5.2",
        input="test"
    )
except openai.RateLimitError as e:
    print("触发速率限制:", e)
except openai.APIConnectionError as e:
    print("连接失败:", e)

Obtener el Request ID de las solicitudes fallidas:

try:
    client.responses.create(model="gpt-5.2", input="test")
except openai.APIStatusError as exc:
    print(exc.request_id)

Compatibilidad con Azure OpenAI

Inicializar el cliente de Azure OpenAI:

from openai import AzureOpenAI

client = AzureOpenAI(
    api_version="2023-07-01-preview",
    azure_endpoint="https://xxx.openai.azure.com"
)

Versiones y registros

Ver la versión del SDK:

import openai
print(openai.__version__)

Activar los registros de depuración del SDK:

export OPENAI_LOG=debug

Más referencias de API:https://github.com/openai/openai-python/blob/main/api.md

Otras extensiones