1
resposta

[Sugestão] A resposta da LLM varia de Acordo com o Modelo usado

Olá!

Nessa aula, nós podemos ver que as cadeias utilizadas foram feitas no seguinte formato:

chain_1 = prompt_model_cidade | model | parser_destine
chain_2 = prompt_model_restaurante | model | parser_restaurante
chain_3 = prompt_cultural | model | StrOutputParser()

main_chain = (chain_1 | chain_2 | chain_3)

Porém, é importante notar que o formato de saída de cada LLM varia de acordo com o modelo.

O que quero dizer aqui é que se chain_1 me retorna um objeto com formato diferente, é preciso filtrar essa informação antes de passar para a próxima cadeia.

Trazendo um exemplo prático, temos:

Em aula, vemos o modelo gpt-3.5-turbo sendo usado, e vemos também que seu retorno para a primeira cadeia é algo parecido com:

{
    "cidade": "Rio de Janeiro",
    "restaurantes": "1. Aprazível \n2. Miam Miam"
  }
}

Todavia, usando um modelo diferente via LM Studio, temos outro resultado:

  • Modelo: google/gemma-3-1b
  • Retorno:
{
  "properties": {
    "cidade": {
      "default": "Praia do Sol",
      "title": "Praia do Sol",
      "type": "string"
    },
    "restaurantes": {
      "default": "Restaurantes populares em Praia do Sol",
      "title": "Restaurantes",
      "type": "string"
    }
  }
}

Com isso, o código quebraria, pois a segunda cadeia não receberia a propriedade "cidade" vindo do resultado da primeira cadeia.

Sendo assim, uma possível solução seria retirar esse valor e retorná-lo para a próxima cadeia. Uma maneira que encontrei de fazer isso a partir do retorno do modelo usado no exemplo foi usando uma RunnableLambda e acoplando-a à cadeia principal.

Segue o exemplo:

chain_1 = prompt_model_cidade | model | parser_destine
chain_2 = prompt_model_restaurante | model | parser_restaurante
chain_3 = prompt_cultural | model | StrOutputParser()

extract_cidade = RunnableLambda(
    lambda payload: {"cidade": payload["properties"]["cidade"]["default"]}
)

main_chain = (chain_1 | extract_cidade | chain_2 | extract_cidade | chain_3)

Outra maneira possível seria adicionar extract_cidade no início de cada outra cadeia que precisa desse atributo.

Acredito que a forma que o código é escrito deve ser de acordo com o modelo usado, e esse fator é algo a ser levado em consideração em projetos maiores.

Espero ter ajudado!

1 resposta

Ei! Tudo bem, Ricardo?

Você trouxe um ponto muito relevante sobre a variação do formato de saída entre modelos diferentes e como isso impacta diretamente a composição das cadeias no LCEL. A solução ficou clara, prática e bem alinhada a cenários reais de projeto, quando não estamos usando apenas modelos da OpenAI.

Esse tipo de observação ajuda bastante quem está começando a trabalhar com múltiplos modelos e evita dores de cabeça em pipelines maiores.

Agradeço por compartilhar e parabéns pela análise!

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!