Adaptador para conectar AI LLM con fuentes y datos de conexión a tierra en tiempo real
Listado de mejoras importantes
Liberar | Fecha | Características clave |
---|---|---|
2.0.5 | 01 de abril de 2024 | Actualización importante: admite ClaudeAI además de OpenAI y GoogleAI. |
2.0.0 | 05 de enero de 2024 | Actualización importante: admite GoogleAI además de OpenAI. |
1.3.0 | 16 de diciembre de 2023 | Mensajes mejorados para utilizar datos relevantes y generar respuestas relevantes. Las respuestas de todos los métodos ahora proporcionan información sobre el tiempo de ejecución. |
1.2.9 | 03 de noviembre de 2023 | (1) La configuración del agente puede especificar la clave de idioma (opcional). Cuando se establece esto, LLM siempre piensa y responde en el idioma especificado (independientemente del idioma de entrada). Nota : Es posible que la calidad de la traducción no sea óptima en algunos casos, por lo que se recomienda encarecidamente realizar pruebas exhaustivas. (2) La respuesta del método todo en uno incluye datos de conexión a tierra utilizados por LLM para generar una respuesta. Esto debería mejorar la confiabilidad. |
1.2.8 | 26 de octubre de 2023 | Se incorporó una técnica de estimulación profunda para mejorar la calidad de la respuesta. |
1.2.2 | 18 de octubre de 2023 | Lógica y mensajes de LLM mejorados para la determinación de API. |
1.1.1 | 09 de octubre de 2023 | Se introdujeron indicaciones de LLM para incorporar una versión de IA constitucional para garantizar que la aportación del usuario sea justa, responsable, respetuosa y humana. |
1.1.0 | 08 de octubre de 2023 | Se introdujo la capacidad de crear contexto/memoria para preguntas de seguimiento. |
1.0.0 | 08 de octubre de 2023 | Lanzamiento inicial. |
Como modelos de inteligencia artificial multimodal, los LLM tienen una amplia aplicabilidad para generar contenido con instrucciones mínimas. Las técnicas de indicación como zero-shot o pocos-shot son populares entre los usuarios cotidianos de aplicaciones de chat creadas sobre este tipo de LLM. Dicho esto, aunque la calidad de la respuesta es excelente, ¿cuánto podemos confiar en ella? ¿Cómo sabemos que el modelo no se está "inventando" (es decir, alucinando) sobre la marcha?
Como resultado, es muy importante fundamentar los LLM proporcionando datos contextuales en combinación con técnicas de orientación adecuadas. El uso de indicaciones con información fundamentada como contexto para ayudar a LLM a generar una mejor respuesta es una práctica ampliamente seguida.
Uno de esos enfoques es la generación aumentada de recuperación (RAG), que se basa en almacenar y buscar incrustaciones de texto proporcionadas a LLM junto con el mensaje. Sin embargo, RAG se basa en información estática convertida en incrustaciones de texto y almacenándolas en bases de datos de gráficos (también conocidas como bases de datos vectoriales) para que se pueda recuperar información relevante y aumentarla mediante conexión a tierra para generar texto/respuesta.
El patrón RAG podría plantear la cuestión de si los datos en tiempo real se pueden utilizar junto con los LLM para generar respuestas efectivas y confiables. La respuesta sencilla es: "¡Por supuesto que sí!". . Pero eso significa muchas más responsabilidades sobre los desarrolladores de aplicaciones. El desarrollador debe llamar a la API para incluir la respuesta en un mensaje para que LLM genere una respuesta relevante. Pero, ¿funcionará llamar a la misma API una y otra vez para cada pregunta? - ¡Lo más probable es que no! ¿Cómo podemos determinar dinámicamente qué API se debe llamar y qué parámetros se deben pasar según la pregunta? Eso también suena como una capacidad para LLM.
Ahí es donde entra en juego AI-Dapter (léase AI Adapter ). AI-Dapter acelera el proceso de desarrollo de aplicaciones basado en LLM para los desarrolladores, permitiéndoles centrarse solo en las aplicaciones mientras descarga la carga de las siguientes actividades a LLM.
identificar los puntos finales de API correctos desde un repositorio de API predefinido,
adquirir datos en tiempo real de los puntos finales API identificados,
generar una respuesta utilizando el modelo LLM de elección.
La experiencia del desarrollador mejora enormemente al conectar el marco AI-Dapter dentro del código de la aplicación y usarlo sin problemas como una caja negra para realizar respuestas basadas en LLM a las preguntas de los usuarios. Tenga en cuenta que estas preguntas de los usuarios pueden estar cerca de ser un mensaje de respuesta cero.
El trabajo real detrás de esta caja negra incluye:
la capacidad de integrar un modelo LLM de su elección con sus credenciales (Nota: actualmente, solo se admiten modelos OpenAI GPT),
un motor integrado que aprovecha las entradas del usuario para realizar la identificación de:
Fuentes de datos basadas en API,
adquisición de datos en tiempo real de esas API, y
generación de respuesta basada en datos en tiempo real utilizando LLM.
Envíe comentarios o solicitudes de nuevas funciones a través de Discusiones de GitHub.
Envíe sus problemas a través de Problemas de GitHub.
Ejecute lo siguiente en la línea de comando para instalar AI-Dapter para su proyecto NodeJS. Asegúrese de estar dentro del directorio raíz de su proyecto.
npm instala ai-dapter --save
Suponiendo que haya configurado un proyecto NodeJS mecanografiado, importe la clase AIDapter de la siguiente manera.
importar AIDapter desde "ai-adapter";
Para inicializar AI-Dapter, debe pasar algunos parámetros obligatorios y opcionales para completar la configuración. A continuación se muestra un ejemplo, seguido de la documentación de los parámetros admitidos.
constante ai = nuevo AIDapter({ "app_name": "<>" "proveedor": "OpenAI", "nombre_modelo": "gpt-3.5-turbo-16k", "punto final": "https://api.openai.com/v1/chat/completions", "authentication": {"api_key": "< >","org_id": "< >" }, "temperatura": "< >"});
Lista de parámetros admitidos para inicializar la configuración.
Parámetro | Obligatorio(M) / Opcional(O) | Objetivo | Valores posibles |
---|---|---|---|
app_name | METRO | Nombre corto de la aplicación. | - |
provider | METRO | El proveedor del modelo LLM. Nota : Actualmente, solo se admiten los modelos proporcionados directamente por OpenAI. | "AI abierta" |
model_name | oh | Le permite seleccionar cualquier modelo lanzado por el proveedor. Recomendamos utilizar modelos que permitan tokens de gran tamaño, como gpt-3.5-turbo-16k o gemini-pro o claude-3-haiku-20240307 . | - |
endpoint | oh | El punto final desde donde el proveedor atiende el modelo LLM. Es posible que deba consultar la documentación específica del proveedor. Por ejemplo, el modelo de finalización de chat de OpenAI se proporciona desde el punto final https://api.openai.com/v1/chat/completions , el modelo de GoogleAI se proporciona desde https://generativelanguage.googleapis.com/v1/models/gemini-pro:generateContent El modelo https://generativelanguage.googleapis.com/v1/models/gemini-pro:generateContent y ClaudeAI se ofrece desde https://api.anthropic.com/v1/messages . | - |
authentication | METRO | Proporcione los detalles de autenticación según lo especificado por su proveedor. Por ejemplo, dado que OpenAI requiere una clave API y un ID de organización, estos se proporcionan en los campos api_key y org_id , como se muestra en el ejemplo de inicialización anterior. | - |
telemetry | oh | Recogida de datos de telemetría. El valor predeterminado es verdadero. | verdadero/falso |
AI-Dapter le permite personalizar configuraciones de agentes específicas, como agregar roles, personalidades, etc. En la misma línea, puede personalizar configuraciones de datos particulares, como controlar la cantidad de registros de respuestas API en tiempo real, pasar contexto adicional o información de puesta a tierra para simular seguimientos, etc.
El agente y las opciones de configuración se pasan como un único objeto de la siguiente manera. Consulte las secciones correspondientes a continuación para buscar y ajustar estos valores de configuración.
dejar opciones: AIDapterOptions = { "agentConfig": { "rol": "asistente personal" }, "dataConfig": { "max_records": 7 }};
A continuación se muestran los parámetros de configuración del agente actualmente admitidos. Agregue estos campos bajo el objeto agentConfig
.
Parámetro | Obligatorio(M) / Opcional(O) | Objetivo | Valores posibles |
---|---|---|---|
role | METRO | Ayuda a guiar el enfoque de LLM ante las preguntas de los usuarios. Por ejemplo, en el papel de un sargento del ejército, LLM puede responder a una pregunta sobre la hora actual como algo así como "La hora actual es las 08:01 a. m. EDT", mientras que un comediante que siempre cuenta un chiste de una sola línea sobre mi pregunta puede responder algo como: "¡Es hora de que consigas un reloj! Es broma, actualmente son las 8:01 a. m. del 7 de octubre de 2023 en la zona horaria del horario de verano del este (EDT)". | - |
personality | oh | Da personalidad al tono de la respuesta de LLM. | - |
language | oh | El idioma en el que desea que el agente responda independientemente del idioma en el que se haga la pregunta del usuario. Predeterminado=inglés. | - |
expert_at | oh | Si LLM debe asumir que son expertos en algún área específica, como salud o motores de automóviles, etc. | - |
max_words | oh | Controle qué tan larga o corta debe ser la respuesta de LLM. El valor predeterminado es menos de 200 palabras. | Cualquier número entre 1 y 200 |
A continuación se muestran los parámetros de configuración de datos actualmente admitidos. Agregue estos campos bajo el objeto dataConfig
.
Parámetro | Obligatorio(M) / Opcional(O) | Objetivo | Valores posibles |
---|---|---|---|
max_records | METRO | Controla cuántos registros principales de un conjunto de resultados obtenidos de una llamada API en tiempo real deben venderse. Este parámetro es esencial para controlar el tamaño del token de entrada, ya que los resultados de la llamada API se utilizan en la conexión a tierra. Nota : debido a que solo se conservan las X filas superiores, es mejor proporcionar puntos finales de API que incluyan datos ordenados en orden descendente. Predeterminado=10 | Cualquier número entre 1 y 10 |
additional_context | oh | Se puede proporcionar contexto adicional cuando se esperan capacidades similares a las de seguimiento. (ver ejemplos de 6.3. Generación de respuesta LLM con datos de puesta a tierra en tiempo real). | Debe ser una matriz con la estructura siguiente: [{ "question": "", "response_summary": "", "entities": { ... } }, { ... }] |
max_contexts | oh | Conserva los contextos X más recientes. AI-Dapter conservará los dos últimos elementos de la matriz additional_context , asumiendo que el contexto más reciente siempre se agrega al final de esta matriz. | 1 o 2 |
AI-Dapter proporciona tres capacidades de la siguiente manera y, por lo tanto, tres métodos para acceder a estas capacidades.
Recomendación: para obtener la mejor experiencia de desarrollador, consulte 6.3. Generación de respuesta LLM con datos de puesta a tierra en tiempo real.
AIDapter.getRealtimeSources(entrada: cadena, apiRepository: Types.APIRepository[]): Promesa
Utilice este método si su objetivo es obtener puntos finales de API relevantes en función de las preguntas de los usuarios.
Parámetro | Obligatorio(M) / Opcional(O) | Objetivo | Tipo de datos |
---|---|---|---|
input | METRO | Pregunta de usuario | Texto |
apiRepository[] | METRO | Proporcione un repositorio de API completo que contenga detalles sobre el punto final de la API (método, URL, encabezados y datos), marcadores de posición utilizados en el punto final de la API junto con instrucciones de validación que utilizará LLM. | Ver 7. Repositorio API |
Campo | Objetivo |
---|---|
api_endpoints[] | conjunto de todos los puntos finales de API identificados. |
provider | Indica qué proveedor de LLM se utilizó. |
runtime | Para realizar un seguimiento del tiempo de respuesta general. Tenga en cuenta que esto dependerá del tiempo de respuesta de la API de LLM. |
// Importar e inicializar AI-Dapterimport AIDapter desde "ai-adapter";const ai = new AIDapter({ "proveedor": "GoogleAI", "authentication": {"api_key": "<>" }});// Defina el repositorio de API desde donde se identificará, actualizará y devolverá una API adecuada.// Tenga en cuenta que este ejemplo proporciona solo un ejemplo de un punto final de API, pero dado que se trata de una matriz, debe esperar proporcionar múltiples tales API endpoints.const apiRepository = [ {"api_info": { "title": "Hora actual", "description": "Identificar el área de zona horaria apropiada y la ubicación para una ubicación determinada y obtener la hora en esa ubicación."},"api_endpoint": { "method": "GET", "url": "http://worldtimeapi.org/api/timezone/|area_location|", "headers": {"Content-Type": "application/json" }},"placeholders": [ {"placeholder": "|area_location|","validation_criteria": "Un ejemplo de ubicación_área es: América/Nueva_York o Europa/Londres. Según la ubicación válida proporcionada, determine la ubicación_área adecuada.","default": "América/ Nueva_York" }] }];// Esta es la pregunta del usuario input = "¿qué hora es en Mumbai?"// Ahora llame al método getRealtimeSources() para obtener endpoints API válidosai.getRealtimeSources(input, apiRepository) .then((resp) => {console.log(resp);/* { "api_endpoints": [ { "api": { "method": "GET", "url": "https://worldtimeapi.org /api/timezone/Asia/Kolkata", "headers": { "Content-Type": "application/json" } }, "placeholders": [ { "placeholder": "[area_location]", "determinado": verdadero } ], "status": "OK" } ], "proveedor": "GoogleAI", "runtime": "2 segundos" } */ }).catch((err) => console.log(JSON.stringify(err, null, 4)));
Tenga en cuenta que, según la ciudad proporcionada por el usuario como Mumbai , LLM determinó el valor apropiado para el marcador de posición area_location y devolvió un punto final de API actualizado.
AIDapter.getDataFromRealtimeSource (entrada: cadena, apiRepository: Types.APIRepository[], dataConfig?: Types.DataConfig | indefinido): Promesa
Utilice este método si su objetivo es obtener datos de puntos finales de API relevantes en función de las preguntas de los usuarios.
Parámetro | Obligatorio(M) / Opcional(O) | Objetivo | Tipo de datos |
---|---|---|---|
input | METRO | Pregunta de usuario | Texto |
apiRepository[] | METRO | Conjunto de información de API, puntos finales (método, URL, encabezados y datos) y marcadores de posición. | Ver 7. Repositorio API |
dataConfig | oh | Parámetros de configuración para controlar los datos obtenidos de las llamadas API. | Ver 5.2. Configuración de datos |
Campo | Objetivo |
---|---|
api_results[] | Matriz de respuestas de todas las llamadas API. |
provider | Indica qué proveedor de LLM se utilizó. |
runtime | Para realizar un seguimiento del tiempo de respuesta general. Tenga en cuenta que esto dependerá del tiempo de respuesta de la API de LLM. |
// Importar e inicializar AI-Dapterimport AIDapter desde "ai-adapter";const ai = new AIDapter({ "proveedor": "GoogleAI", "authentication": {"api_key": "<>" }});// Defina el repositorio de API desde donde se identificará, actualizará y devolverá una API adecuada.// Tenga en cuenta que este ejemplo proporciona solo un ejemplo de un punto final de API, pero dado que se trata de una matriz, debe esperar proporcionar múltiples tales API endpoints.const apiRepository = [ {"api_info": { "title": "Hora actual", "description": "Identificar el área de zona horaria apropiada y la ubicación para una ubicación determinada y obtener la hora en esa ubicación."},"api_endpoint": { "method": "GET", "url": "http://worldtimeapi.org/api/timezone/|area_location|", "headers": {"Content-Type": "application/json" }},"placeholders": [ {"placeholder": "|area_location|","validation_criteria": "Un ejemplo de ubicación_área es: América/Nueva_York o Europa/Londres. Según la ubicación válida proporcionada, determine la ubicación_área adecuada.","default": "América/ Nueva_York" }] }];// Este es el cuestionario del usuario input = "¿qué hora es en Mumbai?"// Configuración de datos dataConfig = { "max_records": 3 }// Ahora llame al método getDataFromRealtimeSource() para obtener datos llamando a todos los relevantes Puntos finales de API basados en la pregunta del usuarioai.getDataFromRealtimeSource(question, apiRepository, dataConfig) .then((resp) => {console.log(resp);/* { "api_results": [ { "api_sources": "worldtimeapi.org", "data": { "abreviatura": "IST", "client_ip ": "50.126.214.61", "fechahora": "2024-01-05T22:48:30.316887+05:30", "día_de_semana": 5, "día_del_año": 5, "dst": falso, "dst_from": nulo, "dst_offset": 0, "dst_until": null, "raw_offset": 19800, "timezone": "Asia/Kolkata", "unixtime": 1704475110, "utc_datetime": "2024-01-05T17:18:30.316887+00:00", "utc_offset": "+05:30", "week_number": 1 } } ], "proveedor": "GoogleAI", "tiempo de ejecución": "4 segundos" } */ }).catch((err) => console.log(JSON.stringify(err, null, 4)));
Respuesta de la llamada API. Estos datos se pueden utilizar para la puesta a tierra del LLM.
AIDapter.getLLMResponseFromRealtimeSources(entrada: cadena, apiRepository: Types.APIRepository[], ¿opciones?: AIDapterOptions | indefinido): Promesa
Utilice este método si su objetivo es obtener respuestas de LLM basadas en las preguntas de los usuarios. Esto incluye identificar puntos finales de API relevantes, llamar a las API identificadas y usarlas en el mensaje de LLM para recibir la respuesta de LLM.
Recomendación: utilice este método para lograr la máxima aceleración en el proceso de desarrollo de su aplicación.
Parámetro | Obligatorio(M) / Opcional(O) | Objetivo | Tipo de datos |
---|---|---|---|
input | METRO | Pregunta de usuario | Texto |
apiRepository[] | METRO | Conjunto de información de API, puntos finales (método, URL, encabezados y datos) y marcadores de posición. | Ver 7. Repositorio API |
options | oh | Configuración de agentes y datos | Ver 5. Opciones de configuración de datos y agentes |
Campo | Objetivo |
---|---|
ai_response | Respuesta generada por LLM. |
ai_status | Ayuda a determinar si la respuesta se basó en la disponibilidad de todos los elementos de datos necesarios para realizar llamadas API exitosas. Valores posibles: OK, SEGUIMIENTO o INCOMPLETO |
ai_context | Contiene un breve resumen de respuesta y una lista de entidades. La idea detrás de este campo es para casos de uso que impliquen conversaciones de seguimiento. El objeto completo se puede pasar como additional_content dentro de las opciones dataConfig cuando se deben enviar preguntas de seguimiento. |
provider | Indica qué proveedor de LLM se utilizó. |
runtime | Para realizar un seguimiento del tiempo de respuesta general. Tenga en cuenta que esto dependerá del tiempo de respuesta de la API de LLM. |
// Importar e inicializar AI-Dapterimport AIDapter desde "ai-adapter";const ai = new AIDapter({ "proveedor": "GoogleAI", "authentication": {"api_key": "<>" }});// Defina el repositorio de API desde donde se identificará, actualizará y devolverá una API adecuada.// Tenga en cuenta que este ejemplo proporciona solo un ejemplo de un punto final de API, pero dado que se trata de una matriz, debe esperar proporcionar múltiples tales API endpoints.const apiRepository = [ {"api_info": { "title": "Hora actual", "description": "Identificar el área de zona horaria apropiada y la ubicación para una ubicación determinada y obtener la hora en esa ubicación."},"api_endpoint": { "method": "GET", "url": "http://worldtimeapi.org/api/timezone/|area_location|", "headers": {"Content-Type": "application/json" }},"placeholders": [ {"placeholder": "|area_location|","validation_criteria": "Un ejemplo de ubicación_área es: América/Nueva_York o Europa/Londres. Según la ubicación válida proporcionada, determine la ubicación_área adecuada.","default": "América/ Nueva_York" }] }];// Este es el cuestionario del usuario input = "¿qué hora es en Mumbai?"// Opciones de AI-Dapter que brindan opciones combinadas de configuración del agente y configuración de datos: AIDapterOptions = { "agentConfig": { "role": "comediante que siempre cuenta un chiste sobre mi pregunta" }, "dataConfig": { "max_records": 7 }};// Ahora llame al método getLLMResponseFromRealtimeSources() para obtener una respuesta de LLM a la pregunta del usuario.// La respuesta de LLM se basa en un mensaje que utiliza datos en tiempo real para la conexión a tierra. ai.getLLMResponseFromRealtimeSources(pregunta, apiRepository, opciones) .then((resp) => {console.log(resp);/* { "ai_response": "En la vibrante ciudad de Mumbai, donde los sueños de Bollywood toman vuelo y el aroma de la comida callejera llena el aire, actualmente son las 22: 50 en este fabuloso viernes, 5 de enero de 2024. Entonces, ya sea que estés bebiendo chai en la Puerta de la India o disfrutando del ritmo en un club de baile local, recuerda, el tiempo ¡no espera a nadie, ni siquiera a las estrellas más importantes de Bollywood!", "ai_status": "OK", "ai_context": { "questions": "¿qué hora es en Mumbai? ¿Cuál es la fecha actual en Mumbai?", "entidades": [], "datos": [ { "abreviatura": "IST", "client_ip": "50.126.214.61", "fecha y hora": "2024-01-05T22:50:51.261990+05:30", "día_de_semana": 5, "día_del_año": 5, "dst": falso, "dst_from": nulo, "dst_offset": 0, "dst_until": null, "raw_offset": 19800, "timezone": "Asia/Kolkata", "unixtime": 1704475251, "utc_datetime": "2024-01-05T17:20:51.261990+00:00", "utc_offset": "+05:30", "week_number": 1 } ], "sources": [ "worldtimeapi.org " ] }, "proveedor": "GoogleAI", "tiempo de ejecución": "6 segundos" } */ }).catch((err) => console.log(JSON.stringify(err, null, 4)));
Tenga en cuenta que la pregunta del usuario se utiliza primero para identificar la API relevante del repositorio de API proporcionado. Este método también llama a las API identificadas, recopila sus respuestas para basar el mensaje final de LLM y devuelve la respuesta generada.
Además, tenga en cuenta que la respuesta contiene el contenido generado por LLM dentro del campo ai_response
y el contexto dentro del campo ai_context
. El contexto completo se puede pasar como dataConfig.additional_context
junto con las preguntas de seguimiento.
Un ejemplo muestra cómo se puede pasar el contexto para permitir conversaciones de seguimiento.
// Como se muestra en el ejemplo anterior, ai_context contiene la siguiente información:// --------------------------------- --------------------------------------------// resp.ai_context: {// "questions": "¿qué hora es en Mumbai? ¿Cuál es la fecha actual en Mumbai?",// "entities": [],// "data": [// {// "abbreviation": "IST",// "client_ip": "50.126.214.61",// "fecha y hora": "2024-01-05T22:50:51.261990+05:30",// "día_de_semana": 5,// "día_del_año": 5,// "dst": false,// "dst_from": nulo,// "dst_offset": 0,// "dst_until": nulo,// "raw_offset": 19800,// "timezone": "Asia/Kolkata",// "unixtime": 1704475251,// "utc_datetime": "2024-01-05T17:20:51.261990+00:00",// "utc_offset": "+05: 30",// "número_semana": 1// }// ],// "fuentes": [// "worldtimeapi.org"// ]// }// ---------------------------------- -------------------------------------// Añade el contexto anterior a dataConfig.additional_context ...if(opciones.dataConfig[additional_context]){