Saltar a contenido

Cambiar entre diferentes tipos de proveedores de AI

Esta guía te ayudará a configurar y cambiar entre distintos proveedores de AI (como Gemini, Claude y OpenAI) en tu aplicación. Asegúrate de seguir los pasos detallados para una correcta implementación.

Requisitos previos

Advertencia

Antes de ejecutar el código, asegúrate de instalar las dependencias necesarias:

pnpm install @elimeleth/vct-layers@latest

Además, verifica que el archivo .env contenga las API Keys correspondientes a los proveedores de AI que planeas utilizar.

Configuración del proveedor de AI desde el Router

Puedes seleccionar el tipo de proveedor de AI que deseas utilizar directamente desde el router. Los proveedores disponibles son:

  • Gemini
  • OpenAI (legacy)
  • Claude

El sistema está diseñado para manejar el historial de mensajes basado en roles, lo que significa que el historial se recupera automáticamente desde la base de datos.

Ejemplo de configuración

const router = new GlobalRouter({
    assistant: {
        type: "openai_legacy", // Elige entre: "gemini" | "openai_legacy" | "claude"
        functions, // Funciones de JavaScript personalizadas
        tools, // Schemas basados en el tipo de proveedor seleccionado
    }
});

Configuración del flujo de trabajo

A continuación, se muestra cómo configurar el flujo de trabajo utilizando el proveedor de AI seleccionado. El sistema detecta automáticamente el tipo de proveedor configurado en el router y se adapta a su modalidad de API, lo que permite cambiar entre proveedores sin realizar grandes modificaciones en el código.

Ejemplo de flujo de trabajo

import { helpers, Workflow } from "@elimeleth/vct-flow";
import { FactoryLayer } from "@elimeleth/vct-layers";
import { prompt } from "~/assistant/prompt";

export default new Workflow("any")
    .addAction(async (ctx, methods) => {
        try {
            FactoryLayer.layer({
                /*
                    Configuración para convertir audios a texto.
                */
                audio_config: {
                    message: "Dame un momento para escucharte",
                    callback: async (ctx) => {
                        const path = await helpers.convertOpusToMp3(ctx.file_dir_path);
                        ctx.body = await helpers.sendToOpenaiWhisper(path);

                        return [{ role: "user", content: ctx.body }];
                    }
                },
                request: {
                    instructions: prompt, // Instrucciones personalizadas para el asistente
                    history_length: 16 // Número de mensajes recuperados de la base de datos (user/assistant)
                },
            })(ctx, methods);
        } catch (error) {
            console.error(error?.message); // Manejo de errores
        }
    });

Explicación del código

  1. Selección del proveedor de AI :

  2. El tipo de proveedor se configura en el router (type: "openai_legacy"). Esto permite cambiar fácilmente entre Gemini, OpenAI y Claude sin modificar el flujo de trabajo principal.

  3. Conversión de audio a texto :

  4. La configuración audio_config se encarga de convertir archivos de audio (en formato Opus) a texto utilizando OpenAI Whisper. El texto resultante se envía como un mensaje del usuario.

  5. Historial de mensajes :

  6. El sistema recupera automáticamente el historial de mensajes desde la base de datos, con una longitud configurable (history_length: 16).

  7. Instrucciones personalizadas :

  8. El campo instructions permite definir un prompt personalizado para guiar las respuestas del asistente.

  9. Manejo de errores :

  10. Se incluye un bloque try-catch para capturar y registrar errores durante la ejecución.

Consideraciones adicionales

  • Flexibilidad : Gracias a la arquitectura modular, puedes cambiar entre proveedores de AI sin alterar significativamente el código base.
  • Escalabilidad : El sistema está diseñado para manejar múltiples proveedores y funcionalidades adicionales, como la conversión de audio a texto.
  • Mantenimiento : Asegúrate de mantener actualizadas las dependencias y las API Keys en el archivo .env.