O objetivo desta funcionalidade é simplificar a integração com modelos de AI e permitir que as respostas sejam geradas de forma mais flexível e centralizada, através da plataforma Cegid Pulse.
Funcionamento em Web
Requisitos
Para utilizar esta funcionalidade, é necessário cumprir os seguintes requisitos:
Cegid PHC Evolution
Plano Advanced ou superior
Módulo Cegid Pulse
A função de implementador PromptFunction permite obter respostas geradas por modelos de Inteligência Artificial do Cegid Pulse. Esta função pode ser utilizada em diferentes cenários, como por exemplo:
Geração automática de textos
Tradução de conteúdos
Resumo de informação
Geração de emails
Análise ou interpretação de dados
A função pode ser utilizada em vários contextos da aplicação, incluindo:
Eventos
Opções de utilizador
Código personalizado
A função foi adicionada ao editor de código, disponível em alguns ecrãs da aplicação. A função encontra-se no separador Funções, enquanto o respetivo exemplo de utilização está disponível no separador Exemplos. Esta organização permite tenha um acesso rápido tanto à função como a exemplos práticos da sua utilização.
Parâmetros da função
A função PromptFunction é composta pelos seguintes parâmetros:
1. UserQuestion
Tipo: String
Define a pergunta ou pedido enviado ao modelo de Inteligência Artificial
Este parâmetro corresponde à instrução principal utilizada para gerar a resposta
Exemplo: Escreve um email para um cliente a agradecer a sua preferência.
2. ContextDescription
Tipo: String
Define o contexto ou instruções adicionais que ajudam o modelo de Inteligência Artificial a gerar uma resposta mais adequada
Este parâmetro pode ser utilizado para orientar o estilo, formato ou comportamento da resposta
Exemplos de utilização: Responde em português europeu
3. ContextData
Tipo: DataTable
Define dados estruturados que podem ser utilizados como contexto adicional na geração da resposta
Estes dados são enviados para o modelo para permitir análises ou respostas baseadas em informação estruturada
Exemplo de utilização: Utilizar uma DataTable com informação de clientes, documentos ou outros dados da aplicação para apoiar a geração da resposta.
4. Culture
Tipo: String
Parâmetro opcional
Define a cultura utilizada para gerar a resposta
Caso não seja definida, é utilizada por defeito a cultura da sessão atual
Exemplo: pt-PT
Para garantir compatibilidade com implementações existentes, a função GetGenAIAnswer continua disponível. As implementações que utilizam esta função continuam a funcionar sem necessidade de alterações. Internamente, esta função passa agora a utilizar a PromptFunction, sendo considerados apenas os parâmetros necessários para esta nova abordagem. Todos os restantes parâmetros anteriormente utilizados deixam de ter efeito.
No Cegid Pulse Studio, é possível utilizar diferentes modelos de Inteligência Artificial, nomeadamente Abacus e OpenAI, cada um com características específicas. O modelo Abacus apresenta melhor desempenho em cenários que envolvem análise e interpretação de dados numéricos. Por defeito, o comportamento da função PromptFunction depende dos parâmetros enviados:
Quando os parâmetros Pergunta, Contexto e Dataset são todos preenchidos, o pedido é processado pelo modelo Abacus.
Caso contrário, se apenas alguns destes parâmetros forem utilizados, o pedido é processado pelo modelo OpenAI.
Funcionamento em Desktop
Requisitos de utilização
Para utilizar esta funcionalidade, é necessário cumprir os seguintes requisitos:
Cegid PHC Evolution
Plano Advanced ou superior
Módulo Cegid Pulse
A função de implementador PromptFunction permite obter respostas geradas por modelos de Inteligência Artificial do Cegid Pulse. Esta função pode ser utilizada em diferentes cenários, como por exemplo:
Geração automática de textos
Tradução de conteúdos
Resumo de informação
Geração de emails
Análise ou interpretação de dados
Parâmetros da função
A função PromptFunction é composta pelos seguintes parâmetros:
1. Pergunta
Tipo: Caracter
Define a pergunta ou pedido enviado ao modelo de Inteligência Artificial
Este parâmetro corresponde à instrução principal que será utilizada para gerar a resposta
Exemplo: Escreve um email para um cliente a agradecer a sua preferência.
2. Contexto
Tipo: Caracter
Define o contexto ou instruções adicionais que ajudam o modelo de Inteligência Artificial a gerar uma resposta mais adequada
Este parâmetro pode ser utilizado para orientar o estilo ou formato da resposta
Exemplo de utilização: Responde em português europeu
3. Dataset
Tipo: Caracter
Define os dados que podem ser utilizados como contexto adicional na geração da resposta
O dataset pode ser passado de duas formas: através de um cursor ou através de texto estruturado em formato CSV
Exemplo: CL (neste caso, será utilizado o dataset da tabela Clientes)
4. Idioma
Tipo: Caracter
Parâmetro opcional
Define o idioma em que a resposta deve ser gerada
Se este parâmetro não for definido, o sistema segue a seguinte ordem:
1. idioma configurado na ficha do utilizador
2. idioma definido no sistema
Exemplo: pt-PT
Durante a execução da função podem ocorrer as seguintes mensagens:
Falta de requisitos: Caso o módulo Cegid Pulse não esteja ativo, é apresentada a mensagem: "Não tem os requisitos necessários para utilizar esta funcionalidade."
“Erro na execução da Prompt Function”: Caso ocorra um erro durante a execução da função:
"Ocorreu um erro ao executar a Prompt Function Cegid Pulse. Contacte o administrador de sistema."
No Cegid Pulse Studio, é possível utilizar diferentes modelos de Inteligência Artificial, nomeadamente Abacus e OpenAI, cada um com características específicas. O modelo Abacus apresenta melhor desempenho em cenários que envolvem análise e interpretação de dados numéricos. Por defeito, o comportamento da função PromptFunction depende dos parâmetros enviados:
Quando os parâmetros Pergunta, Contexto e Dataset são todos preenchidos, o pedido é processado pelo modelo Abacus.
Caso contrário, se apenas alguns destes parâmetros forem utilizados, o pedido é processado pelo modelo OpenAI.
Exemplo
O exemplo seguinte demonstra a utilização da função PromptFunction para gerar automaticamente o corpo de um email em formato HTML a partir das faturas em aberto de um cliente.
local lbOk, lcSql, lcFileDir, lcContextData, lcContextDescription local lcUserQuestion, lcRespostaPulse, lnSucess
lcRespostaPulse = "" lcContextDescription = "" lcContextData = "" lcUserQuestion = "" lcfiledir = "" lnSucess = 0 lbOk = .f.
* Verificar se o e-mail está preenchido na ficha do cliente if used("cl") and !eof("cl") and empty(cl.email) msg("É necessário preencher o e-mail na ficha do cliente.") return lbOk endif
* Mensagem informativa actform("A enviar e-mail ao cliente...")
* Query para obter as faturas por regularizar do cliente lcSql = " select ft.nmdoc as Serie, ft.fno as Numero, ft.fdata as DataEmissao, ft.pdata as DataVencimento, ft.etotal as Total, sum((cc.edeb-cc.edebf)-(cc.ecred-cc.ecredf)) as TotalDivida " lcSql = lcSql + " from cc inner join ft on cc.no=ft.no and cc.estab=ft.estab and cc.ftstamp = ft.ftstamp " lcSql = lcSql + " where ft.fno > 0 and cc.no ="+astr(cl.no)+" and cc.estab= "+astr(cl.estab) lcSql = lcSql + " And (case when cc.moeda=´EURO´ Or cc.moeda=space(11) then abs((cc.edeb-cc.edebf)-(cc.ecred-cc.ecredf)) else " lcSql = lcSql + " abs((cc.debm-cc.debfm)-(cc.credm-cc.credfm)) end) > (case when cc.moeda =´EURO´ Or cc.moeda =space(11) then 0.010000 Else 0 end) " lcSql = lcSql + " and cc.origem<>´RD´ and cc.origem<>´CH´ " lcSql = lcSql + " group by ft.nmdoc, ft.fno, ft.fdata, ft.pdata, ft.etotal " lcSql = lcSql + " order by ft.fdata desc, ft.nmdoc, ft.fno "
* Obter o cursor das faturas por regularizar e transformar em formato CSV if u_sqlexec(lcSql, "cr_regdocs") and !eof("cr_regdocs") lcFileDir = tmp_dir + "cr_regdocs" + ".csv" lbOk = listtocsv("cr_regdocs") if lbOk lcContextData = filetostr(lcFileDir) delete file (lcFileDir) endif endif fecha("cr_regdocs")
* Caso não existam faturas em aberto if not lbOk deactform() msg("Não existem faturas por regularizar do cliente "+ alltrim(cl.nome) +".") return lbOk endif
* Definir o contexto para a fonte de dados (CSV) text to lcContextDescription textmerge noshow Contexto: Os dados fornecidos representam as últimas 5 faturas emitidas ao cliente que ainda se encontram por regularizar. A empresa que emitiu esses documentos é Cegid PHC com NIF 502199326.
O cliente tem os seguintes dados: - Nome: <> - NIF: <>
Os dados adicionais são fornecidos em formato CSV (separador ponto e vírgula) e cada linha representa uma fatura em aberto.
As colunas do CSV seguem a seguinte estrutura: 1. Serie – Série da fatura 2. Numero – Número da fatura 3. DataEmissao – Data de emissão da fatura (formato DD.MM.YYYY) 4. DataVencimento – Data limite de pagamento (formato DD.MM.YYYY) 5. Total – Valor total da fatura com IVA incluído 6. TotalDivida – Valor total em dívida da fatura
O objetivo é utilizar estes dados para comunicar com o cliente de forma profissional e clara. endtext
* Definir a pergunta/pedido para o Cegid Pulse text to lcUserQuestion textmerge noshow Com base no contexto e no CSV fornecido, cria o corpo de um e-mail HTML moderno e profissional.
Regras obrigatórias: - Devolver exclusivamente HTML puro (sem Markdown). - Utilizar apenas CSS inline. - Criar um layout moderno com container centralizado. - Incluir um resumo com número de faturas e total em dívida. - Apresentar uma tabela com os dados das faturas. - Destacar visualmente os valores em dívida. - Utilizar um tom profissional e institucional. - No final adicionar uma assinatura profissional da empresa. endtext
* Obter a resposta do Cegid Pulse lcRespostaPulse = PromptFunction(lcUserQuestion, lcContextDescription, lcContextData)
if empty(lcRespostaPulse) deactform() msg("Não foi possível obter a resposta do Cegid Pulse. Tente novamente mais tarde.") return .f. endif
* Remover possíveis caracteres inválidos lcRespostaPulse = STRTRAN(lcRespostaPulse, "```html", "") lcRespostaPulse = STRTRAN(lcRespostaPulse, "```", "")
* Enviar e-mail em formato HTML para o cliente lnSucess = u_sendmailhtml(alltrim(cl.email), ; "Regularização de Faturas em Aberto – Cegid PHC", ; lcRespostaPulse,"",.f.,.t.)
deactform()
if lnSucess=0 msg("E-mail enviado com sucesso.") else msg("Ocorreu um erro ao enviar o e-mail. Verifique análise interna.") endifCompatibilidade com funções GenAI
Para garantir compatibilidade com implementações existentes, a função GetGenaiAnswer continua disponível. As implementações que utilizam esta função continuam a funcionar, contudo alguns parâmetros anteriormente utilizados deixam se aplicar dado que a configuração da geração de respostas passa a ser gerida através do Cegid Pulse.
Id: define o local de onde é chamada a função e preenche o campo Id de contexto no ecrã Log de atividade das consultas GenAI;
DatasetTitle: define o título da listagem de dados;
Temperatura: define o tipo de resposta (Objetiva, Neutra ou Criativa);
TemperaturaDec: define o nível de criatividade da resposta;
Tamanho: define o tamanho da resposta (Curta, Média ou Longa);
Modelo: define o modelo (Legado, Padrão ou Especial).
As seguintes funções não estão disponíveis:
ShowGenAi
GetPromptToCopy
Sempre que estas funções forem executadas será apresentada a seguinte mensagem: "Esta funcionalidade já não se encontra disponível".