BlackTDN :: A Arte (e Desafio) de Dialogar com a IA: Mais Inteligência, Menos "Burrice"?
_Créditos das imagens: ChatGPT (DALL·E) ** A Arte (e Desafio) de Dialogar com a IA: Mais Inteligência, Menos "Burrice"? Recentemente, me deparei com um exemplo fascinante da capacidade das IAs generativas: um prompt detalhado que resultou na criação de um jogo 3D de labirinto com um soldado (você pode ver a versão em português do prompt/projeto aqui: [naldodj-3DMazeGameWithSoldier](https://raw.githubusercontent.com/naldodj/naldodj-3DMazeGameWithSoldier/refs/heads/main/README.md), baseado no original de [@nobody_qwert no X](https://x.com/nobody_qwert/status/1893584330095509843)). O resultado é impressionante, mas o que realmente me chamou a atenção foi a **complexidade e o detalhamento do prompt** necessário para chegar lá. Isso ilustra perfeitamente um ponto crucial: fazer a IA gerar *exatamente* o que queremos, seja código complexo ou texto coeso e específico, não é trivial. Exige clareza, precisão, antecipação de ambiguidades e, muitas vezes, várias iterações. É a chamad...
Naldo parabéns pelo blog, queria te mandar um e-mail não encontrei em nenhum lugar.
ResponderExcluirQuero tirar uma dúvida que não tem a ver com esse post, é a seguinte:
Qual a diferença em usar a função ASCAN do advpl ou procurar o que eu quero utilizando laço FOR?
Essa função tem alguma mágica, é mais rápida?
Jackson,
ExcluirNas aulas que ministro costumo mostrar, usando AdvPL, uma simulação do funcionamento das funções aEval e aSort... Vou montar um exemplo da aScan e publicar.
Mas uma afirmativa é certa: Utilize aScan, vai rodar em C++, no server, muito mais rápida do que um laço For/Next.
Como exemplo:
#include "rwmake.ch"
#include "protheus.ch"
#xtranslate MsgOut([]) => (ConOut([]),MsgBox([]))
//-----------------------------------------------------------------------------
//BlackTDN :: Simulando aSort e aEval
//-----------------------------------------------------------------------------
User Function aOrdena()
Local aArray := {10,9,7,4,3,2,5,6,78,89,0,43,2,4,65}
Local aCopy := aClone(aArray)
Local cMsg := ""
Local cCRLF := CRLF
//-----------------------------------------------------------------------------
//Usando a funcao padrao
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
//Função aEval() : http://tdn.totvs.com/display/tec/AEVal
//-----------------------------------------------------------------------------
aEval(aArray,{|nValor|cMsg+=Str(nValor)+cCRLF})
MsgOut(cMsg,OemToAnsi("Eval|aSort Padrão: Resultado Não Ordenado"),"INFO")
cMsg := ""
//-----------------------------------------------------------------------------
//Função aSort() : http://tdn.totvs.com/pages/viewpage.action?pageId=23889126
//-----------------------------------------------------------------------------
aSort(aArray,NIL,NIL,{|nMenor,nMaior|nMenornMaior})
aEval(aArray,{|nValor|cMsg+=Str(nValor)+cCRLF})
MsgOut(cMsg,OemToAnsi("Eval|aSort Padrão: Resultado Ordem Decrescente"),"INFO")
cMsg := ""
//-----------------------------------------------------------------------------
//Usando a funcao customizada
//-----------------------------------------------------------------------------
aSize(aArray,0)
__aEval(aCopy,{|e|aAdd(aArray,e)})
__aEval(aArray,{|nValor|cMsg+=Str(nValor)+cCRLF})
MsgOut(cMsg,OemToAnsi("Eval|aSort Padrão: Resultado Não Ordenado"),"INFO")
cMsg := ""
__aSort(aArray,NIL,NIL,{|nMenor,nMaior|nMenornMaior})
__aEval(aArray,{|nValor|cMsg+=Str(nValor)+cCRLF})
MsgOut(cMsg,OemToAnsi("__aEval|__aSort Customizadas : Resultado Ordem Decrescente"),"INFO")
cMsg := ""
Return(NIL)
//-----------------------------------------------------------------------------
//Simulando aSort padrao
//-----------------------------------------------------------------------------
Static Function __aSort(aArray,nStart,nCount,bEval)
Local nD
Local nJ
Local uTmp
DEFAULT nStart := 1
DEFAULT nCount := Len( aArray )
For nD := nStart To nCount
For nJ := nD To nCount
IF Eval(bEval,aArray[nJ],aArray[nD])
uTmp := aArray[nD]
aArray[nD] := aArray[nJ]
aArray[nJ] := uTmp
EndIF
Next nJ
Next nI
Return(aArray)
//-----------------------------------------------------------------------------
//Simulando aEval padrao
//-----------------------------------------------------------------------------
Static Function __aEval(aArray,bEval,nStart,nCount)
Local nD
Local nJ
DEFAULT nStart := 1
DEFAULT nCount := Len(aArray)
nJ := nCount
For nD := nStart To nJ
//Função Eval() :: http://tdn.totvs.com.br/pages/viewpage.action?pageId=24346635
Eval(bEval,aArray[nD],nD)
Next nD
Return(aArray)
Beleza Naldo obrigado!
ResponderExcluirVocê poderia montar um post com dicas sobre essas funções que são mais rápidas hein.. hehe
Valeu abs!