Interacción básica con Codex vía CLI y API
Esta lección cubre la interacción básica con Codex a través de su interfaz de línea de comandos (CLI) y API. Se explica cómo ejecutar comandos y los parámetros esenciales como el modelo y la temperatura para controlar la generación de código. El objetivo es proporcionar una base operativa para el uso de Codex.

Fundamentos de la interacción con Codex
Codex, como otros modelos de lenguaje de OpenAI, se consume principalmente a través de una API REST. Sin embargo, para tareas de desarrollo y experimentación rápidas, la CLI de OpenAI (si está disponible y configurada) ofrece una capa de abstracción útil. La interacción con Codex implica enviar una "solicitud" (prompt) y recibir una "respuesta" (completion). La calidad y relevancia de la respuesta dependen directamente de la claridad y especificidad del prompt, así como de los parámetros configurados en la solicitud.
Uso de la CLI de OpenAI para Codex
Aunque OpenAI no mantiene una CLI oficial específica para Codex como producto independiente, la CLI general de OpenAI (o herramientas de terceros que la emulan) permite interactuar con los modelos de completions, donde se incluyen los modelos de la familia Codex. Para interactuar con Codex, se utiliza el endpoint de completions y se especifica el modelo adecuado. Asumiendo una CLI configurada, un comando básico para generar código podría ser:
openai api completions create \
-m <nombre_del_modelo_codex> \
-p "# Escribe una función en Python que sume dos números enteros" \
-t 0.7 \
-n 1 \
--max-tokens 150Desglosemos los parámetros esenciales:
-mo--model: Especifica el modelo de Codex a utilizar. Por ejemplo,code-davinci-002o variantes específicas de la API. Es crucial seleccionar el modelo adecuado para la tarea y el costo.-po--prompt: La instrucción o el fragmento de código inicial que se le da a Codex. Este es el insumo principal para la generación. Un prompt bien formulado es la clave para obtener resultados útiles.-to--temperature: Controla la aleatoriedad de la salida. Un valor más alto (ej. 0.8) hace que la salida sea más creativa y diversa, mientras que un valor más bajo (ej. 0.2) la hace más determinista y enfocada. Para código, generalmente se prefieren valores bajos para evitar errores sintácticos o lógicos.-no--n: Número de completions a generar. Permite obtener múltiples alternativas para un mismo prompt.--max-tokens: El número máximo de tokens (aproximadamente 4 caracteres por token) que el modelo puede generar en la respuesta. Esto limita la longitud del código generado y ayuda a controlar costos.
Para tareas de generación de código donde la precisión y la consistencia son críticas (ej. refactorización, implementación de funciones específicas), se recomienda una temperatura baja (0.1-0.4). Para exploración o generación de prototipos donde se busca diversidad, se puede aumentar (0.5-0.7), pero siempre con revisión manual exhaustiva.
Interacción vía API de OpenAI
La forma más robusta y programática de interactuar con Codex es a través de la API de OpenAI. Esto permite integrar la funcionalidad de Codex directamente en aplicaciones y flujos de trabajo. El proceso implica realizar una solicitud HTTP POST al endpoint de completions. A continuación, un ejemplo en Python utilizando la librería oficial de OpenAI:
import openai
openai.api_key = "TU_API_KEY"
response = openai.Completion.create(
model="code-davinci-002",
prompt="""# Python function to calculate factorial
def factorial(n):
"""Calculates the factorial of a non-negative integer."""""",
temperature=0.3,
max_tokens=100,
top_p=1,
frequency_penalty=0,
presence_penalty=0,
stop=["\nclass", "\ndef", "\nif", "\nprint"]
)
print(response.choices[0].text.strip())Parámetros adicionales relevantes en la API:
top_p: Una alternativa a la temperatura para controlar la diversidad. El modelo considera solo los tokens cuya probabilidad acumulada sumatop_p. Un valor de 1.0 es equivalente a la muestreo estándar.frequency_penalty: Penaliza la repetición de tokens existentes en la salida. Valores positivos reducen la probabilidad de repetición.presence_penalty: Penaliza la aparición de tokens nuevos en la salida. Valores positivos aumentan la probabilidad de que el modelo hable sobre nuevos temas.stop: Una secuencia de uno o más strings en los que el modelo detendrá la generación. Útil para evitar que el modelo genere código fuera del alcance de la función o bloque deseado.
Consideraciones sobre la elección del modelo
OpenAI ofrece diferentes modelos de la familia Codex, cada uno con capacidades y costos distintos. Generalmente, los modelos más grandes (ej. code-davinci-002) son más capaces pero también más costosos y lentos. Para tareas complejas o de alta calidad, se justifica el uso de los modelos más potentes. Para tareas más sencillas, como completar fragmentos de código o generar pequeños snippets, modelos más pequeños pueden ser suficientes y más económicos.
| Modelo (ejemplo) | Capacidad | Costo (relativo) |
|---|---|---|
code-davinci-002 | Más capaz, apto para tareas complejas de generación y refactorización. | Alto |
code-cushman-001 | Menos capaz que davinci, pero más rápido y económico para tareas sencillas. | Medio |
Es importante consultar la documentación oficial de OpenAI para obtener la lista actualizada de modelos disponibles y sus características, ya que estos pueden cambiar con el tiempo.
Aplicación práctica: Preparando un script de prueba
Para el lunes, prepare un script en Python que utilice la API de OpenAI para interactuar con un modelo Codex. El script debe:
- Configurar su clave de API (recuerde NO hardcodearla en el código fuente de producción; use variables de entorno).
- Definir un prompt que solicite una función Python simple, por ejemplo, "Escribe una función que invierta una cadena de texto."
- Realizar una solicitud de completion especificando el modelo
code-davinci-002, unatemperaturede 0.2 y unmax_tokensde 100. - Imprimir la salida generada por Codex. Analice la calidad del código, su sintaxis y si cumple con la intención del prompt. Experimente con diferentes valores de
temperature(ej. 0.1, 0.5, 0.8) y observe cómo afecta la creatividad y la precisión del código generado.
No hay comentarios por ahora.