Propósito

✔ Programação GLOBAL® - Quaisquer soluções e/ou desenvolvimento de aplicações pessoais, ou da empresa, que não constem neste Blog devem ser tratados como consultoria freelance. Queiram contatar-nos: brazilsalesforceeffectiveness@gmail.com | ESTE BLOG NÃO SE RESPONSABILIZA POR QUAISQUER DANOS PROVENIENTES DO USO DOS CÓDIGOS AQUI POSTADOS EM APLICAÇÕES PESSOAIS OU DE TERCEIROS.

Integrando GPT | Estendendo o Excel usando chamadas de API REST

Estendendo o Excel usando chamadas de API REST#ProgramaçãoGlobal #VBA #PowerBI #Excel

 Compre OS LIVROS DESTA SÉRIE 


Hoje, gostaria de dar uma breve visão sobre como você pode estender a funcionalidade do Excel usando APIs REST específicas. Isso nos permite usar funcionalidades e dados interessantes e complexos que são desenvolvidos e fornecidos na Internet por provedores altamente especializados.


REST API - o que é isso realmente?

APIs REST são serviços web que se comunicam via protocolos HTTP. Eles usam métodos padronizados como GET, POST, PUT e DELETE para transferir e manipular dados entre cliente e servidor. Vários formatos de dados, como JSON e XML, são suportados.


Existem APIs para todos os propósitos imagináveis, por exemplo: para fornecer dados meteorológicos para um determinado local ou para fornecer informações de valores mobiliários. Fornecer tais informações e a infraestrutura associada é complexo, razão pela qual seu uso geralmente está sujeito a uma taxa ou é limitado. A vantagem sobre fontes de informação disponíveis gratuitamente é a baixa barreira de uso e, muitas vezes, a maior qualidade e nível de detalhes dos dados. 


Para demonstrar tudo, estamos desenvolvendo dois casos de uso protótipos com base nos quais nossas próprias funções podem ser desenvolvidas. Para fazer isso, selecionamos APIs que têm uma baixa barreira de entrada (especialmente um nível gratuito ou custos baixos) e ainda oferecem benefícios reconhecíveis. 


Uma pequena dica: a documentação da API fornece não apenas a definição, mas também exemplos de solicitações e respostas para as fontes de dados correspondentes (geralmente chamadas de endpoints) e métodos. Os exemplos são formulados principalmente para as linguagens de programação comuns (Python, Java, C). LLMs como o ChatGPT são capazes de converter esses exemplos diretamente em código VBA correspondente e explicá-lo com alta precisão. Na minha opinião, uma abordagem legítima para aprender e, claro, economizar tempo. 


Caso de uso 1

O requisito é separar o nome de uma determinada pessoa (composto por nome e sobrenome em qualquer ordem) em "sobrenome, nome". Para fazer isso, criamos uma função do Excel no VBA. 


Essa separação é uma tarefa não trivial que ocorre na prática quando, por exemplo, formulários de coleta de dados em sites não fornecem campos separados para nome e sobrenome. 


Exemplos: 

"Max Müller" --> "Müller, Max"

"Stefan Johannes Meier" --> "Meier, Stefan Johannes"


Caso de uso 2

Queremos criar uma função do Excel que retorne uma resposta correspondente como uma string de um prompt fornecido usando um modelo de linguagem OpenAI. Então usamos o ChatGPT na célula do Excel.


Este caso de uso serve para ilustrar a conexão da API. Nesta forma, ele não tem nenhuma relevância prática real, mas pode servir como ponto de partida para seus próprios desenvolvimentos, incluindo complementos complexos de IA para Excel. Claro, tudo isso já existe, mas fazer você mesmo é muito melhor.


Nós dividimos os nomes

Suponha que temos uma lista de nomes e sobrenomes, cada um em uma célula. Para processamento posterior, exigimos a separação mais segura possível entre nome e sobrenome. É claro que as características específicas de cada país devem ser levadas em conta. Programar isso nós mesmos é uma tarefa complexa que não queremos assumir por vários motivos. Uma pesquisa mostra que há vários provedores de serviços web correspondentes que, entre outras coisas, resolvem essa tarefa para nós.


Como exemplo, selecionei o seguinte provedor: Namsor | Verificador de nomes para determinação de gênero, origem e etnia 


Há uma API fácil de usar e bem documentada com uma cota mensal gratuita (ideal para testes).


Uma olhada no site nos mostra que há especialistas trabalhando aqui que não apenas podem separar nomes, mas também oferecem muitos outros serviços relacionados a nomes (por exemplo, derivar gênero ou origem do primeiro nome). Mas queremos focar na divisão. 


O primeiro passo é se registrar para receber uma chave de API para autenticar nossas chamadas. Essa chave é então usada para verificar as cotas e atribuir informações de pagamento. Devemos manter esta chave segura. 


A documentação da API nos fornece todas as informações necessárias sobre a sintaxe das solicitações e o formato das respostas. Há duas variantes: além de simplesmente fornecer o nome, você também pode fornecer informações adicionais sobre a origem da pessoa (por exemplo, o país), o que pode tornar a busca por resultados mais fácil e precisa.


#split-name-batch


#split-name-geo-batch 


Por exemplo, a solicitação e a resposta para a segunda variante se parecem com isto:



curl --request POST \ 

--url https://v2.namsor.com/NamSorAPIv2/api2/json/parseNameGeoBatch \

--header 'X-API-KEY: your-api-key' \

--header 'Accept: application/json'

--header 'Content-Type: application/json' \

--data '{"personalNames":[{"id":"e630dda5-13b3-42c5-8f1d-648aa8a21c42","name":"Ricardo Darín","countryIso2":"AR"}]}' 



{

    "personalNames": [

        {

            "script": "LATIN",

            "id": "e630dda5-13b3-42c5-8f1d-648aa8a21c42",

            "name": "Ricardo Darín",

            "nameParserType": "FN1LN1",

            "nameParserTypeAlt": "FN1LN2",

            "firstLastName": {

                "script": null,

                "id": null,

                "firstName": "Ricardo",

                "lastName": "Darín"

            },

            "score": 3.447624982163207

        }

    ]

}


Construímos uma função VBA que faz o seguinte:


  • Passando uma string contendo nome e sobrenome em qualquer ordem.
  • passando opcionalmente uma string contendo o código do país no formato ISO (por exemplo, DE para Alemanha)
  • O corpo JSON da solicitação é gerado a partir dos parâmetros e da nossa chave de API. O id é irrelevante para nossos propósitos porque passamos apenas um nome por solicitação. 
  • Enviamos uma solicitação POST para a API usando o objeto XMLHTTP. Se bem-sucedido, o resultado será retornado como um objeto JSON na resposta. Nome e sobrenome são fornecidos em campos separados. 
  • Para nossa função, criamos a string de retorno no formato "Sobrenome, Nome". Isso torna possível obter nomes e sobrenomes claramente durante o pós-processamento, separando as strings por vírgulas. Outros formatos de retorno também são concebíveis. 
  • Observação: o Excel não fornece funcionalidade interna para analisar objetos JSON. Há soluções para isso. Para manter nosso caso de uso simples, extraímos os dois campos diretamente por meio de pesquisa de string na string JSON (ExtractSepName).


Function SeparateName(name As String, Optional countryIso2 As String) As String

    Dim http As Object

    Dim apiKey As String

    Dim url As String

    Dim postData As String

    Dim response As String

    Dim parsedJson As Object

    Dim firstName As String

    Dim lastName As String

    

    ' Set your API key here

    apiKey = "YOUR API KEY COMES HERE"

    

    ' Set the URL for the API

    If countryIso2 = "" Then

        url = "https://v2.namsor.com/NamSorAPIv2/api2/json/parseNameBatch"

    Else

        url = "https://v2.namsor.com/NamSorAPIv2/api2/json/parseNameGeoBatch"

    End If

    

    ' Create the JSON data for the POST request

    If countryIso2 = "" Then

        postData = "{""personalNames"":[{""name"":""" & name & """}]}"

    Else

        postData = "{""personalNames"":[{""name"":""" & name & """,""countryIso2"":""" & countryIso2 & """}]}"

    End If

    

    ' Create the HTTP object

    Set http = CreateObject("MSXML2.XMLHTTP")

    

    ' Open the connection

    http.Open "POST", url, False

    

    ' Set the required headers

    http.setRequestHeader "X-API-KEY", apiKey

    http.setRequestHeader "Accept", "application/json"

    http.setRequestHeader "Content-Type", "application/json"

    

    ' Send the request with the JSON data

    http.send postData

    

    ' Get the response text

    response = http.responseText

    

    If http.Status < 400 Then

        SeparateName = ExtractSepName(response)

    Else

        SeparateName = "???"

    End If

    

End Function


Private Function ExtractSepName(response As String) As String

    Dim ipos1 As Integer, ipos2 As Integer

    Dim string1 As String, string2 As String

    

    string1 = """lastName"":"""

    string2 = """firstName"":"""

    

    ipos1 = InStr(1, response, string1) + Len(string1)

    ipos2 = InStr(ipos1 + 1, response, """")

    

    ExtractSepName = Mid(response, ipos1, ipos2 - ipos1)

    

    ipos1 = InStr(1, response, string2) + Len(string2)

    ipos2 = InStr(ipos1 + 1, response, """")

    

    ExtractSepName = ExtractSepName & ", " & Mid(response, ipos1, ipos2 - ipos1)


End Function 


No Excel agora você pode usar facilmente esta função:




Isso nos dá uma base para outras soluções.


ChatGPT na célula do Excel

Abaixo, aplicamos o mesmo princípio para chamar serviços da API OpenAI. O caso de uso é de natureza bastante teórica, mas pode servir de base para aplicações úteis.


Preparação :


Precisamos de uma chave de API para a API. Sempre há uma taxa para usar o software, mas os custos são administráveis ​​(especialmente para aplicativos de teste) e um bom investimento para seus próprios experimentos. O faturamento é essencialmente baseado no número de tokens gerados. O modelo LLM utilizado também desempenha um papel na precificação. O site oferece boas informações sobre os custos habituais para visualizações típicas. 

O processo é explicado muito bem no site da OpenAI . Depois de inserir suas informações de pagamento, você pode gerar uma chave de API (e mantê-la segura). 


Queremos usar o endpoint text-generation , que (semelhante ao ChatGPT) gera uma resposta a partir de um prompt. Incorporamos isso em uma função VBA para que o prompt possa ser passado e recebamos a resposta do LLM como resultado da função. Para o nosso caso usamos o modelo gpt-4o-mini .   


Observação: neste caso de uso, analisamos o objeto JSON retornado com o conversor JSON gratuito ( link ). 


O código para nossa função VBA se parece com isso. Não entrarei em detalhes sobre a conversão do objeto JSON no final; o conversor mencionado acima cuida disso.


Function CallOpenAI(prompt As String) As String

    Dim http As Object

    Dim url As String

    Dim apiKey As String

    Dim response As String

    Dim jsonResponse As Object

    Dim jsonRequest As Object

    Dim messages As Object

    

    ' Set your API key here

    apiKey = "YOUR API KEY GOES HERE"


    ' Initialize the request

    Set http = CreateObject("MSXML2.XMLHTTP")

    url = "https://api.openai.com/v1/chat/completions"

    

    ' Create the JSON request body

    Set jsonRequest = CreateObject("Scripting.Dictionary")

    jsonRequest.Add "model", "gpt-4o-mini"

    

    ' Create the messages array

    Set messages = CreateObject("Scripting.Dictionary")

    messages.Add "role", "user"

    messages.Add "content", prompt

    

    Dim messagesArray As Object

    Set messagesArray = CreateObject("Scripting.Dictionary")

    messagesArray.Add "messages", Array(messages)

    

    jsonRequest.Add "messages", messagesArray("messages")

    

    ' Convert the JSON request to a string

    Dim jsonRequestString As String

    jsonRequestString = ConvertToJson(jsonRequest)

    

    ' Send the HTTP POST request

    With http

        .Open "POST", url, False

        .setRequestHeader "Content-Type", "application/json"

        .setRequestHeader "Authorization", "Bearer " & apiKey

        .send jsonRequestString

        response = .responseText

    End With

    

    ' Parse the JSON response

    Set jsonResponse = JsonConverter.ParseJson(response)

    

    ' Output the result

    CallOpenAI = jsonResponse("choices")(1)("message")("content")

End Function 


É isso. Isso nos permite recuperar uma resposta do modelo no Excel simplesmente especificando um prompt.


Sim, a API, é claro, oferece muito mais possibilidades, diferentes modelos, parâmetros de ajuste, etc. 



APIs REST comuns também podem ser usadas no VBA por meio de chamadas simples. A sintaxe da chamada e, especialmente, a estrutura dos dados de solicitação e resposta estão incluídas na documentação da API e podem ser facilmente transferidas para a lógica do VBA.


Ao se deparar com tarefas que parecem complexas, é sempre uma boa ideia verificar se há um serviço web que pode ser chamado via API e executar a tarefa.


Por favor, avise-me se você tiver alguma sugestão ou acréscimo.



👉 Siga André Bernardes no LinkedinClique aqui e contate-me via What's App.

Comente e compartilhe este artigo!

brazilsalesforceeffectiveness@gmail.com


 Série de Livros nut Project 

DONUT PROJECT: VBA - Projetos e Códigos de Visual Basic for Applications (Visual Basic For Apllication)eBook - DONUT PROJECT 2024 - Volume 03 - Funções Financeiras - André Luiz Bernardes eBook - DONUT PROJECT 2024 - Volume 02 - Conectando Banco de Dados - André Luiz Bernardes eBook - DONUT PROJECT 2024 - Volume 01 - André Luiz Bernardes

Nenhum comentário:

Postar um comentário

diHITT - Notícias