Meus 2 cents:

Quanto menor o modelo, (geralmente) menor a janela de tokens de input - entao, prompts curtos.

O ideal eh checar quantos tokens teu LLM permite no input.

Faca alguns testes e calcule prompt vs tokens. Um script que permite estimar os tokens de entrada:

Em LLMs pequenos, faca os prompts em ingles. Se for o caso, o usuario entra o prompt em pt-br, teu app traduz para ingles, aplica no LLM e traduz a resposta de volta ao pt-br (nem sempre eh necessario, precisa testar em varios cenarios)

Verifique a especialidade do LLM - pode ter sido treinado voltado para uma area especifica.

Tente ativar o Chain-of-thought (CoT) - exemplos

  • "Faca XXX. Primeiro, pense passo a passo e depois forneça a solução."
  • "Faca xxx. Pense passo a passo"
  • "Faca xxx. Explique o raciocínio por trás da resposta"
  • "Faca xxx. Liste os passos necessários para resolver este problema".

Decomponha tarefas complexas em prompts menores.

Utilize verbos especificos conforme a tarefa desejada:

  1. Lembrar Objetivo: Recuperar informações específicas da memória. Palavras-chave nos prompts: Liste, defina, identifique, nomeie, descreva, localize, recupere. Exemplo: "Liste os três principais exportadores de café do mundo."

  2. Compreender: Objetivo: Interpretar e resumir informações. Palavras-chave nos prompts: Explique, resuma, parafraseie, interprete, descreva, classifique, compare. Exemplo: "Explique o processo de fotossíntese em suas próprias palavras."

  3. Aplicar: Objetivo: Usar informações aprendidas em novas situações. Palavras-chave nos prompts: Aplique, demonstre, resolva, use, implemente, execute, calcule. Exemplo: "Aplique a teoria da oferta e demanda para explicar o aumento recente no preço da gasolina."

  4. Analisar: Objetivo: Dividir informações em partes componentes para entender a estrutura e as relações. Palavras-chave nos prompts: Analise, diferencie, compare, contraste, examine, categorize, investigue. Exemplo: "Analise o impacto da mídia social no comportamento político dos jovens."

  5. Avaliar: Objetivo: Fazer julgamentos com base em critérios e padrões. Palavras-chave nos prompts: Avalie, critique, justifique, defenda, argumente, recomende, priorize. Exemplo: "Avalie a eficácia das políticas governamentais para combater as mudanças climáticas."

  6. Criar (nível mais alto): Objetivo: Gerar novas ideias, produtos ou soluções. Palavras-chave nos prompts: Crie, projete, invente, desenvolva, formule, escreva, componha, proponha. Exemplo: "Crie um slogan de marketing para um novo carro elétrico."

E por fim: lembre-se que o LLM eh (grosso modo) apenas um autocompletar. Ele pega os tokens de entrada e a partir deles continua a entrada e tenta "advinhar" qual o proximo token que faca sentido.

O ideal - usar RAG/CAG: caso sua necessidade seja sobre um tema especifico - sempre que possivel recorra ao RAG/CAG para alimentar com os dados relevantes do assunto.

RAG: pesquisa em banco vetorial (R de Retrieval) previamente construido com DOCs relativos ao assunto e alimenta o input com os embeddings encontrados - assim o LLM usa estes dados na montagem da resposta. Problema: dependendo da quantidade de DOCs existe a necessidade de fazer o rankeamento para garantir que os embeddings sao os melhores para a montagem da resposta.

CAG: O mesmo que acima, mas sem pesquisa (C de cache), alimenta direto todos os embeddings dos DOCs disponiveis na janela de input para montar a resposta - muito mais eficiente, mas tem custo de memoria/processamento maior.

Que resposta maravilhosa, se me permite gastar mais alguns cents seu.

  • Como eu consigo fazer esse RAG ou CAG, eu preciso do python certo? Sabe de algum tutorial/vídeo de como fazer?
  • É melhor fazer naquele google notebook certo?
  • Eu consigo usar algum modelo do huggingface sem precisar do python? Pergunto se consigo usar diretamente em C (sim, tenho ideia do que estou fazendo com C)?
  • O fato de usar o transformer em python ou outra é considerado alguma limitação de consumo de recursos (por isso a pergunta sobre C)?
Simplificando: use o anythingLLM para comecar. Instale em um docker, configure e use a API dele de dentro da tua aplicacao para ser um wrapper para o LLM que voce precisa. A vantagem que o anythingLLM ja vem com tudo "pronto" - voce apenas configura o LLM default desejado (mas pode ter varios). Ai voce testa o que importa, ou seja, a aplicacao em si. Quando voce fizer tudo funcionar, se for o caso, ai usa o python/langchain/etc para acessar os LLMs. Na pratica ? Nao tenho mais acessado mais direto via python, uso o anythingLLM para tudo. Grosso modo, o anythingLLM eh um openroute.ai local e gratuito.
Então o anythingLLM seria tipo o ollama certo? É o que estou usando atualmente para testar os modelos. Porém por conta da limitação que te falei o resultado é bem paia, mas vou testar com as dicas que você me deu, muito obrigado por seu tempo!
Mais ou menos. O diagrama do que imaginei eh: aplicacao => api anythingLLM => modelo LLM (que poder ser ollama, api chatGPT, claude, etc) Hoje dentro da aplicacao voce usa as chamadas direto do ollama - funciona, mas fica engessado e voce tem de fazer tudo. A ideia: - Instala o anythingLLM em um docker (ele eh semelhante ao LMStudio), acesse via gui web - Dentro do anythingLLM via GUI voce configura os LLMs que deseja acessar (que pode inclusive ser o ollama, mas tambem podem ser outros) - O anythingLLM tem chat onde voce pode testar a conexao com o LLM - tudo ok ? entao agora eh conectar a aplicacao no anything. - Dentro da aplicacao, ao inves de chamar o langchain ou outras coisas, execute apenas a api do anythingLLM, dessa forma sua aplicacao via 'agnostica' quanto ao LLM utilizado. - Grosso modo, eh o que openrouter.ai faz: separa a aplicacao do LLM. - Se quiser tornar as coisas ainda mais interessantes, crie uma app em flask e faca esta aplicacao acessar o anythingLLM. E tua aplicacao acessa os endpoints deste flask. Assim: aplicacao => app flask so para direcionar => api anythingLLM => LLM desejado. - Vantagem ? Separar a aplicacao do LLM (fica agnostica). Se a qualquer momento quiser tirar o anythingLLM e testar direto o LLM desejado, eh so fazer no app em flask, sem mexer nenhuma linha na aplicacao de producao. - Por que criar tantas camadas ? O formato de conexao e uso dos LLMs esta mudando muito rapido - colocar um "wrapper" (flask) no meio permite estabilizar a aplicacao e mudar a forma de trabalho sem se preocupar (p.ex. acrescentar MCPs e agentes no meio do caminho). Ideia - aplicacao eh uma coisa, conexao com LLM eh outra.