Executando verificação de segurança...
13

Como criar bons prompts para modelos pequenos ⁉️

Olá, gostaria do conhecimento de vocês.

Eu vou trabalhar com modelos realmente pequenos coisa 1b e no máximo 3b.

E para isso a depender do prompt a resposta é completamente alucinada e não importa a línguagem utilizada.

Enfim, vocês tem dicas (SÉRIO, VOCÊS TEM DICAS!!) ?

Construí uma iniciativa chamada maisfoco.life 🌱
Que diminui tua sobrecarga cognitiva em escolher em um mundo moderno inundado de opções e cheios de scoll infintos.

Receba recomendações diárias de filmes, livros e jogos via email/whatsapp, retome sua atenção de forma 100% gratuita!

Mais Foco 🌱, menos scroll, mais vida!
YT: Mais Foco 🌱
GIT: Mais Foco 🌱

Carregando publicação patrocinada...
7

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.

1

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)?
2

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.

1

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!

2

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.