Adaptador para conectar AI LLM com fontes e dados de aterramento em tempo real
Listando as principais melhorias
Liberar | Data | Principais recursos |
---|---|---|
2.0.5 | 01 de abril de 2024 | Atualização importante: Suporta ClaudeAI além de OpenAI e GoogleAI. |
2.0.0 | 05 de janeiro de 2024 | Atualização importante: suporta GoogleAI além de OpenAI. |
1.3.0 | 16 de dezembro de 2023 | Prompts aprimorados para utilizar dados relevantes e gerar respostas relevantes. As respostas para todos os métodos agora fornecem informações de tempo de execução. |
1.2.9 | 03 de novembro de 2023 | (1) A configuração do agente pode especificar a chave de idioma (opcional). Quando definido, o LLM sempre pensa e responde no idioma especificado (independentemente do idioma de entrada). Nota : A qualidade da tradução pode não ser a ideal em alguns casos, portanto, é altamente recomendável realizar testes completos. (2) A resposta do método multifuncional inclui dados de aterramento usados pelo LLM para gerar uma resposta. Isso deve melhorar a confiabilidade. |
1.2.8 | 26 de outubro de 2023 | Técnica de solicitação de aprofundamento incorporada para melhorar a qualidade da resposta. |
1.2.2 | 18 de outubro de 2023 | Prompts e lógica do LLM aprimorados para determinação de API. |
1.1.1 | 09 de outubro de 2023 | Introduzidos prompts de LLM para incorporar um toque de IA constitucional para garantir que a entrada do usuário seja justa, responsável, respeitosa e humana. |
1.1.0 | 08 de outubro de 2023 | Introduzida a capacidade de construir contexto/memória para perguntas de acompanhamento. |
1.0.0 | 08 de outubro de 2023 | Lançamento inicial. |
Como modelos multimodais de inteligência artificial, os LLMs têm ampla aplicabilidade para geração de conteúdo com instruções mínimas. Técnicas de solicitação, como tiro zero ou poucos disparos, são populares entre os usuários comuns de aplicativos de bate-papo criados com base nesses LLMs. Dito isto, embora a qualidade da resposta seja excelente, até que ponto podemos confiar nela? Como sabemos que o modelo não está “inventando” (ou seja, alucinando) na hora?
Como resultado, fundamentar os LLMs fornecendo dados contextuais em combinação com técnicas de estímulo adequadas é muito importante. Usar prompts com informações fundamentadas como contexto para ajudar o LLM a gerar uma resposta melhor é uma prática amplamente seguida.
Uma dessas abordagens é a Geração Aumentada de Recuperação (RAG), que depende do armazenamento e da pesquisa de embeddings de texto fornecidos ao LLM junto com o prompt. No entanto, o RAG depende de informações estáticas convertidas em incorporações de texto e armazenando-as em bancos de dados gráficos (também conhecidos como bancos de dados vetoriais) para que informações relevantes possam ser recuperadas delas e aumentadas por meio de aterramento para gerar texto/resposta.
O padrão RAG pode levantar a questão de saber se os dados em tempo real podem ser usados juntamente com os LLMs para gerar respostas eficazes e confiáveis. A resposta simples é: “Claro, sim!” . Mas isso significa muito mais responsabilidades sobre os ombros dos desenvolvedores de aplicativos. O desenvolvedor precisa chamar a API para agrupar a resposta em um prompt para que o LLM gere uma resposta relevante. Mas será que chamar a mesma API repetidamente para cada pergunta funcionará? - Provavelmente não! Como podemos determinar dinamicamente qual API deve ser chamada e quais parâmetros devem ser passados com base na pergunta? Isso também parece uma capacidade para LLM.
É aí que o AI-Dapter (leia-se AI Adapter ) entra em ação. AI-Dapter acelera o processo de desenvolvimento de aplicativos baseado em LLM para desenvolvedores, permitindo que eles se concentrem apenas nos aplicativos enquanto transfere a carga das atividades seguintes para o LLM.
identificar os endpoints de API corretos de um repositório de API predefinido,
adquirir dados em tempo real dos endpoints de API identificados,
gerando uma resposta usando o modelo LLM de escolha.
A experiência do desenvolvedor é tremendamente aprimorada ao conectar a estrutura AI-Dapter ao código do aplicativo e usá-la perfeitamente como uma caixa preta para executar respostas baseadas em LLM às perguntas do usuário. Observe que essas próprias perguntas do usuário podem estar próximas de uma solicitação de disparo zero!
O trabalho real por trás desta caixa preta inclui:
a capacidade de integrar um modelo LLM de sua escolha com suas credenciais (Observação: atualmente, apenas modelos OpenAI GPT são suportados),
um mecanismo integrado que aproveita as entradas do usuário para realizar a identificação de -
Fontes de dados baseadas em API,
aquisição de dados em tempo real dessas APIs, e
geração de resposta baseada em dados em tempo real usando LLM.
Envie comentários ou solicitações de novos recursos por meio de Discussões do GitHub.
Envie seus problemas por meio do GitHub Issues.
Execute o seguinte na linha de comando para instalar o AI-Dapter para seu projeto NodeJS. Certifique-se de estar no diretório raiz do seu projeto.
npm instala o adaptador ai --save
Supondo que você tenha configurado um projeto NodeJS digitado, importe a classe AIDapter da seguinte maneira.
importar AIDapter de "ai-adapter";
Para inicializar o AI-Dapter, você deve passar alguns parâmetros obrigatórios e opcionais para completar a configuração. Um exemplo é mostrado abaixo, seguido pela documentação dos parâmetros suportados.
const ai = novo AIDapter({ "app_name": "<>" "provedor": "OpenAI", "nome_modelo": "gpt-3.5-turbo-16k", "ponto final": "https://api.openai.com/v1/chat/completions", "authentication": {"api_key": "< >","org_id": "< >" }, "temperatura": "< >"});
Lista de parâmetros suportados para inicializar a configuração.
Parâmetro | Obrigatório(M) / Opcional(O) | Propósito | Valores possíveis |
---|---|---|---|
app_name | M | Nome curto do aplicativo. | - |
provider | M | O fornecedor do modelo LLM. Nota : Atualmente, apenas modelos fornecidos diretamente pela OpenAI são suportados. | "OpenAI" |
model_name | Ó | Permite selecionar qualquer modelo lançado pelo fornecedor. Recomendamos o uso de modelos que permitem tamanhos de token grandes, como gpt-3.5-turbo-16k ou gemini-pro ou claude-3-haiku-20240307 . | - |
endpoint | Ó | O endpoint de onde o provedor atende o modelo LLM. Talvez seja necessário consultar a documentação específica do provedor. Por exemplo, o modelo de conclusão de bate-papo OpenAI é servido a partir do endpoint https://api.openai.com/v1/chat/completions , o modelo GoogleAI é servido a partir de https://generativelanguage.googleapis.com/v1/models/gemini-pro:generateContent O modelo https://generativelanguage.googleapis.com/v1/models/gemini-pro:generateContent e ClaudeAI é servido em https://api.anthropic.com/v1/messages . | - |
authentication | M | Forneça detalhes de autenticação conforme especificado pelo seu provedor. Por exemplo, como o OpenAI requer uma chave de API e um ID de organização, eles são fornecidos nos campos api_key e org_id , conforme mostrado no exemplo de inicialização acima. | - |
telemetry | Ó | Coleta de dados de telemetria. O padrão é verdadeiro. | verdadeiro/falso |
AI-Dapter permite que você personalize configurações específicas de agentes, como adicionar funções, personalidades, etc. Na mesma linha, você pode personalizar configurações de dados específicas, como controlar o número de registros de respostas de API em tempo real, passar contexto adicional ou informações de aterramento para simular acompanhamentos, etc.
As opções de agente e configuração são passadas como um único objeto, conforme a seguir. Consulte as seções apropriadas abaixo para procurar e ajustar esses valores de configuração.
deixe opções: AIDapterOptions = { "agentConfig": { "role": "assistente pessoal" }, "dataConfig": { "max_records": 7 }};
Abaixo estão os parâmetros de configuração do agente atualmente suportados. Adicione esses campos ao objeto agentConfig
.
Parâmetro | Obrigatório(M) / Opcional(O) | Propósito | Valores possíveis |
---|---|---|---|
role | M | Ajuda a orientar a abordagem do LLM às dúvidas dos usuários. Por exemplo, no papel de um sargento do exército, o LLM pode responder a perguntas sobre a hora atual como algo como "A hora atual é 08h01 EDT.", enquanto um comediante que sempre conta uma piada sobre minha pergunta pode responder algo como: "É hora de você comprar um relógio! Brincadeirinha, atualmente são 8h01 do dia 7 de outubro de 2023 no fuso horário do horário de verão do leste (EDT).". | - |
personality | Ó | Dá personalidade ao tom da resposta do LLM. | - |
language | Ó | O idioma no qual você deseja que o agente responda, independentemente do idioma em que a pergunta do usuário for feita. Padrão=Inglês. | - |
expert_at | Ó | Se o LLM assumir que eles são especialistas em qualquer área específica, como saúde ou motores automotivos, etc. | - |
max_words | Ó | Controle quanto tempo ou curto deve ser a resposta do LLM. O padrão é menos de 200 palavras. | Qualquer número entre 1 e 200 |
Abaixo estão os parâmetros de configuração de dados atualmente suportados. Adicione esses campos ao objeto dataConfig
.
Parâmetro | Obrigatório(M) / Opcional(O) | Propósito | Valores possíveis |
---|---|---|---|
max_records | M | Controla quantos registros principais de um conjunto de resultados obtido de uma chamada de API em tempo real devem ser vendidos. Este parâmetro é essencial para controlar o tamanho do token de entrada, pois os resultados da chamada de API são usados no aterramento. Observação : como apenas as X linhas superiores são retidas, é melhor fornecer terminais de API que incluam dados classificados em ordem decrescente. Padrão=10 | Qualquer número entre 1 e 10 |
additional_context | Ó | Contexto adicional pode ser fornecido quando são esperadas capacidades semelhantes a acompanhamento. (ver exemplos de 6.3. Geração de resposta LLM com aterramento de dados em tempo real). | Deve ser um array com a seguinte estrutura: [{ "question": "", "response_summary": "", "entities": { ... } }, { ... }] |
max_contexts | Ó | Mantém os contextos X mais recentes. AI-Dapter reterá os dois últimos elementos da matriz additional_context , assumindo que o contexto mais recente seja sempre anexado no final desta matriz. | 1 ou 2 |
AI-Dapter fornece três recursos como segue e, portanto, três métodos para acessar esses recursos.
Recomendação: Para obter a melhor experiência do desenvolvedor, consulte 6.3. Geração de resposta LLM com aterramento de dados em tempo real
AIDapter.getRealtimeSources(entrada: string, apiRepository: Types.APIRepository[]): Promessa
Use este método se seu objetivo for obter endpoints de API relevantes com base nas perguntas do usuário.
Parâmetro | Obrigatório(M) / Opcional(O) | Propósito | Tipo de dados |
---|---|---|---|
input | M | Pergunta do usuário | Texto |
apiRepository[] | M | Forneça um repositório de API completo que contenha detalhes sobre o endpoint da API (método, URL, cabeçalhos e dados), espaços reservados usados no endpoint da API junto com instruções de validação que o LLM usará. | Consulte 7. Repositório de API |
Campo | Propósito |
---|---|
api_endpoints[] | matriz de todos os endpoints de API identificados. |
provider | Indica qual provedor LLM foi usado. |
runtime | Para rastrear o tempo de resposta geral. Observe que isso dependerá do tempo de resposta da API do LLM. |
//Importa e inicializa AI-Dapterimport AIDapter de "ai-adapter";const ai = new AIDapter({ "provedor": "GoogleAI", "authentication": {"api_key": "<>" }});// Defina o repositório da API a partir de onde uma API apropriada será identificada, atualizada e retornada. // Observe que este exemplo fornece apenas um exemplo de um endpoint de API, mas como este é um array, você deve esperar fornecer vários tal API endpoints.const apiRepository = [ {"api_info": { "title": "Hora atual", "description": "Identifique a área e o local apropriados do fuso horário para um determinado local e obtenha a hora nesse local."},"api_endpoint": { "method": "GET", "url": "http://worldtimeapi.org/api/timezone/|area_location|", "headers": {"Content-Type": "application/json" }},"placeholders": [ {"placeholder": "|area_location|","validation_criteria": "Um exemplo de area_location é: América/Nova_Iorque ou Europa/Londres. Com base no local válido fornecido, determine o area_location apropriado." ,"default": "América/Nova_Iorque" }] }];// Este é o questionlet do usuário input = "que horas são em Mumbai?"// Agora chame o método getRealtimeSources() para obter uma API válida endpointsai.getRealtimeSources(input, apiRepository) .then((resp) => {console.log(resp);/* { "api_endpoints": [ { "api": { "método": "GET", "url": "https://worldtimeapi.org /api/timezone/Asia/Kolkata", "headers": { "Content-Type": "application/json" } }, "placeholders": [ { "placeholder": "[area_location]", "determinado": true } ], "status": "OK" } ], "provider": "GoogleAI", "runtime": "2 segundos" } */ }).catch((err) => console.log(JSON.stringify(err, null, 4)));
Observe que com base na cidade fornecida pelo usuário como Mumbai , o LLM determinou o valor apropriado para o espaço reservado area_location e retornou um endpoint de API atualizado.
AIDapter.getDataFromRealtimeSource(entrada: string, apiRepository: Types.APIRepository[], dataConfig?: Types.DataConfig | indefinido): Promessa
Use este método se seu objetivo for obter dados de endpoints de API relevantes com base nas perguntas do usuário.
Parâmetro | Obrigatório(M) / Opcional(O) | Propósito | Tipo de dados |
---|---|---|---|
input | M | Pergunta do usuário | Texto |
apiRepository[] | M | Matriz de informações de API, endpoints (método, URL, cabeçalhos e dados) e espaços reservados. | Consulte 7. Repositório de API |
dataConfig | Ó | Parâmetros de configuração para controlar dados obtidos de chamadas de API. | Consulte 5.2. Configuração de dados |
Campo | Propósito |
---|---|
api_results[] | Matriz de respostas de todas as chamadas de API. |
provider | Indica qual provedor LLM foi usado. |
runtime | Para rastrear o tempo de resposta geral. Observe que isso dependerá do tempo de resposta da API do LLM. |
//Importa e inicializa AI-Dapterimport AIDapter de "ai-adapter";const ai = new AIDapter({ "provedor": "GoogleAI", "authentication": {"api_key": "<>" }});// Defina o repositório da API a partir de onde uma API apropriada será identificada, atualizada e retornada. // Observe que este exemplo fornece apenas um exemplo de um endpoint de API, mas como este é um array, você deve esperar fornecer vários tal API endpoints.const apiRepository = [ {"api_info": { "title": "Hora atual", "description": "Identifique a área e o local apropriados do fuso horário para um determinado local e obtenha a hora nesse local."},"api_endpoint": { "method": "GET", "url": "http://worldtimeapi.org/api/timezone/|area_location|", "headers": {"Content-Type": "application/json" }},"placeholders": [ {"placeholder": "|area_location|","validation_criteria": "Um exemplo de area_location é: América/Nova_Iorque ou Europa/Londres. Com base no local válido fornecido, determine o area_location apropriado." ,"default": "América/Nova_Iorque" }] }];// Este é o questionlet do usuário input = "que horas são em Mumbai?"// Data configurationlet dataConfig = { "max_records": 3 }// Agora chame o método getDataFromRealtimeSource() para obter dados chamando todos os relevantes Endpoints de API baseados no usuário questionai.getDataFromRealtimeSource(question, apiRepository, dataConfig) .then((resp) => {console.log(resp);/* { "api_results": [ { "api_sources": "worldtimeapi.org", "data": { "abbreviation": "IST", "client_ip ": "50.126.214.61", "datahora": "2024-01-05T22:48:30.316887+05:30", "dia_da_semana": 5, "dia_do_ano": 5, "dst": falso, "dst_from": nulo, "dst_offset": 0, "dst_until": null, "raw_offset": 19800, "fuso horário": "Ásia/Calcutá", "unixtime": 1704475110, "utc_datetime": "2024-01-05T17:18:30.316887+00:00", "utc_offset": "+05:30", "week_number": 1 } } ], "provedor": "GoogleAI", "tempo de execução": "4 segundos" } */ }).catch((err) => console.log(JSON.stringify(err, null, 4)));
Resposta da chamada da API. Esses dados podem ser usados para aterramento LLM.
AIDapter.getLLMResponseFromRealtimeSources(entrada: string, apiRepository: Types.APIRepository[], opções?: AIDapterOptions | indefinido): Promessa
Use este método se seu objetivo for obter respostas LLM com base nas perguntas dos usuários. Isso inclui identificar endpoints de API relevantes, chamar as APIs identificadas e usar isso no prompt do LLM para receber a resposta do LLM.
Recomendação: Use este método para obter aceleração máxima no processo de desenvolvimento de seu aplicativo.
Parâmetro | Obrigatório(M) / Opcional(O) | Propósito | Tipo de dados |
---|---|---|---|
input | M | Pergunta do usuário | Texto |
apiRepository[] | M | Matriz de informações de API, endpoints (método, URL, cabeçalhos e dados) e espaços reservados. | Consulte 7. Repositório de API |
options | Ó | Configuração de agente e dados | Consulte 5. Opções de configuração de agente e dados |
Campo | Propósito |
---|---|
ai_response | Resposta gerada pelo LLM. |
ai_status | Ajuda a determinar se a resposta foi baseada na disponibilidade de todos os elementos de dados necessários para fazer chamadas de API bem-sucedidas. Valores possíveis: OK, ACOMPANHAMENTO ou INCOMPLETO |
ai_context | Contém um breve resumo da resposta e uma lista de entidades. A ideia por trás deste campo é para casos de uso que envolvam conversas de acompanhamento. O objeto inteiro pode ser passado como additional_content nas opções dataConfig quando perguntas de acompanhamento forem enviadas. |
provider | Indica qual provedor LLM foi usado. |
runtime | Para rastrear o tempo de resposta geral. Observe que isso dependerá do tempo de resposta da API do LLM. |
//Importa e inicializa AI-Dapterimport AIDapter de "ai-adapter";const ai = new AIDapter({ "provedor": "GoogleAI", "authentication": {"api_key": "<>" }});// Defina o repositório da API a partir de onde uma API apropriada será identificada, atualizada e retornada. // Observe que este exemplo fornece apenas um exemplo de endpoint de API, mas como se trata de uma matriz, você deve fornecer vários tal API endpoints.const apiRepository = [ {"api_info": { "title": "Hora atual", "description": "Identifique a área e o local apropriados do fuso horário para um determinado local e obtenha a hora nesse local."},"api_endpoint": { "method": "GET", "url": "http://worldtimeapi.org/api/timezone/|area_location|", "headers": {"Content-Type": "application/json" }},"placeholders": [ {"placeholder": "|area_location|","validation_criteria": "Um exemplo de area_location é: América/Nova_Iorque ou Europa/Londres. Com base no local válido fornecido, determine o area_location apropriado." ,"default": "América/Nova_Iorque" }] }];// Este é o questionlet do usuário input = "que horas são em Mumbai?"// Opções do AI-Dapter que fornecem opções combinadas de configuração do agente e do Data Configurationlet: AIDapterOptions = { "agentConfig": { "role": "comediante que sempre conta uma piada sobre minha pergunta" }, "dataConfig": { "max_records": 7 }};// Agora chame o método getLLMResponseFromRealtimeSources() para obter uma resposta LLM à pergunta do usuário.// A resposta LLM é baseada em um prompt que usa dados em tempo real para aterramento. ai.getLLMResponseFromRealtimeSources(pergunta, apiRepository, opções) .then((resp) => {console.log(resp);/* { "ai_response": "Na vibrante cidade de Mumbai, onde os sonhos de Bollywood voam e o aroma da comida de rua enche o ar, atualmente são 22: 50 nesta fabulosa sexta-feira, 5 de janeiro de 2024. Então, quer você esteja bebendo chai no Portal da Índia ou curtindo as batidas em uma boate local, lembre-se, o tempo espera por ninguém, nem mesmo para as maiores estrelas de Bollywood!", "ai_status": "OK", "ai_context": { "questions": "que horas são em Mumbai Qual é a data atual em Mumbai?", "entidades? ": [], "dados": [ { "abreviatura": "IST", "client_ip": "50.126.214.61", "datetime": "2024-01-05T22:50:51.261990+05:30", "dia_da_semana": 5, "dia_do_ano": 5, "dst": falso, "dst_from": nulo, "dst_offset": 0, "dst_until": null, "raw_offset": 19800, "fuso horário": "Ásia/Calcutá", "unixtime": 1704475251, "utc_datetime": "2024-01-05T17:20:51.261990+00:00", "utc_offset": "+05:30", "week_number": 1 } ] , "fontes": [ "worldtimeapi.org" ] }, "provider": "GoogleAI", "runtime": "6 segundos" } */ }).catch((err) => console.log(JSON.stringify(err, null, 4)));
Observe que a pergunta do usuário é usada primeiro para identificar a API relevante do repositório de API fornecido. Este método também chama as APIs identificadas, coleta suas respostas para fundamentar o prompt final do LLM e retorna a resposta gerada.
Além disso, observe que a resposta contém o conteúdo gerado pelo LLM no campo ai_response
e o contexto no campo ai_context
. Todo o contexto pode ser passado como dataConfig.additional_context
junto com perguntas de acompanhamento.
Um exemplo mostra como o contexto pode ser transmitido para permitir conversas de acompanhamento.
// Conforme mostrado no exemplo anterior, ai_context contém as seguintes informações:// --------------------------------- --------------------------------------------// resp.ai_context: {// "questions": "que horas são em Mumbai? Qual é a data atual em Mumbai?",// "entities": [],// "data": [// {// "abbreviation": "IST",// "ip_cliente": "50.126.214.61",// "datetime": "2024-01-05T22:50:51.261990+05:30",// "dia_da_semana": 5,// "dia_do_ano": 5,// "dst": falso,// "dst_from": nulo, // "dst_offset": 0, // "dst_until": nulo, // "raw_offset": 19800,// "fuso horário": "Ásia/Calcutá",// "unixtime": 1704475251,// "utc_datetime": "2024-01-05T17:20:51.261990+00:00",// "utc_offset": "+05:30",// "week_number": 1// }// ],// "sources": [// "worldtimeapi.org"// ]// }// ---------------- -------------------------------------------------- -----------// Anexe o contexto acima em dataConfig.additional_context ...if(options.dataConfig[additional_context]){