Integración con ChatGPT API en Go: de la idea al código funcional

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

¿Por qué Go y ChatGPT son el tándem ideal?

\n

¿Alguna vez se ha preguntado qué tan rápido puede "enseñar" a su programa Go a comunicarse con el usuario como una persona real? ¿O tal vez desea automatizar la generación de contenido, crear un asistente inteligente o simplemente agregar un "toque especial" a su servicio? La integración con la API de ChatGPT en Go no es solo una tendencia moderna, sino una herramienta poderosa que abre las puertas al mundo de la inteligencia artificial. Go, con su velocidad y simplicidad, es ideal para crear solicitudes rápidas y confiables a redes neuronales. En este artículo no solo analizaremos la teoría, sino que escribiremos código real que puede usar de inmediato en sus proyectos.

\n\n

Preparando el terreno: ¿qué necesitas para empezar?

\n

Antes de sumergirnos en el código, asegurémonos de tener todo lo necesario. Necesitará:

\n
    \n
  • Go instalado (versión 1.21 o superior, para usar todas las capacidades modernas).
  • \n
  • Clave API de OpenAI. Puede obtenerla en la plataforma de OpenAI. Trátela como la contraseña de su tarjeta bancaria: ¡manténgala en secreto!
  • \n
  • Comprensión básica de solicitudes HTTP y estructuras de datos en Go.
  • \n
\n

Todo el código del artículo lo escribiremos en un solo archivo main.go para no complicar la estructura. ¡Allá vamos!

\n\n

Paso 1: Creamos un cliente HTTP y enviamos la primera solicitud

\n

El corazón de nuestra integración será el paquete estándar net/http. Es ligero, rápido y no requiere dependencias externas. Nuestra tarea es enviar una solicitud POST al endpoint https://api.openai.com/v1/chat/completions con el cuerpo y los encabezados correctos.

\n\n

Estructura de la solicitud

\n

La API de ChatGPT espera un JSON con un formato específico. Creemos estructuras de Go que coincidan exactamente con ese formato:

\n
package main\n\nimport (\n    "bytes"\n    "encoding/json"\n    "fmt"\n    "io"\n    "net/http"\n    "os"\n)\n\ntype ChatMessage struct {\n    Role    string `json:"role"`\n    Content string `json:"content"`\n}\n\ntype ChatRequest struct {\n    Model    string        `json:"model"`\n    Messages []ChatMessage `json:"messages"`\n}\n\ntype ChatResponse struct {\n    Choices []struct {\n        Message ChatMessage `json:"message"`\n    } `json:"choices"`\n}
\n

Observe las etiquetas json:"...". Garantizan que Go "empaquete" (serialice) correctamente nuestros datos en el JSON que OpenAI entenderá.

\n\n

Función de envío

\n

Ahora escribamos una función que se encargue de todo el "trabajo sucio": formar la solicitud, enviarla y analizar la respuesta.

\n
func askChatGPT(apiKey, prompt string) (string, error) {\n    reqBody := ChatRequest{\n        Model: "gpt-3.5-turbo",\n        Messages: []ChatMessage{\n            {Role: "user", Content: prompt},\n        },\n    }\n\n    jsonData, err := json.Marshal(reqBody)\n    if err != nil {\n        return "", fmt.Errorf("error de marshaling: %w", err)\n    }\n\n    request, err := http.NewRequest("POST", "https://api.openai.com/v1/chat/completions", bytes.NewBuffer(jsonData))\n    if err != nil {\n        return "", fmt.Errorf("error al crear la solicitud: %w", err)\n    }\n\n    request.Header.Set("Content-Type", "application/json")\n    request.Header.Set("Authorization", "Bearer "+apiKey)\n\n    client := &http.Client{}\n    response, err := client.Do(request)\n    if err != nil {\n        return "", fmt.Errorf("error al ejecutar la solicitud: %w", err)\n    }\n    defer response.Body.Close()\n\n    body, err := io.ReadAll(response.Body)\n    if err != nil {\n        return "", fmt.Errorf("error al leer la respuesta: %w", err)\n    }\n\n    // Verificamos el código de estado\n    if response.StatusCode != http.StatusOK {\n        return "", fmt.Errorf("la API devolvió un error: %s, cuerpo: %s", response.Status, string(body))\n    }\n\n    var chatResp ChatRes                

Blogs

Book Recommendations