Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

1
resposta

[Dúvida] Resposta vindo errada

Olá, minha resposta está vindo completamente diferente das aulas, primeiramente eu utilizei o modelo model_name='llama-3.3-70b-versatile'

Pois o modelo utilizado na aula é antigo e não roda.

from langchain_core.prompts import MessagesPlaceholder
from langchain_core.messages import ToolMessage
from langchain_core.runnables import RunnablePassthrough
from operator import itemgetter
from langchain_core.output_parsers import StrOutputParser

system = f"""Você tem acesso a um dataframe pandas `df`. \
Aqui está a saída de `df.head().to_markdown()`:

\`\`\`
{df.head().to_markdown()}
\`\`\`

Dada uma pergunta do usuário, escreva o código Python para respondê-la. \
Não presuma que você tem acesso a nenhuma biblioteca além das bibliotecas Python integradas e pandas.\
Responda em português à pergunta quando tiver informações suficientes para respondê-la."""


prompt = ChatPromptTemplate.from_messages([("system", system), ("human", "{question}"),
                                           MessagesPlaceholder("chat_history", optional=True)])


def _get_chat_history(x: dict) -> list:
  """Analise a saída da cadeia até este ponto em uma lista de mensagens do histórico
  de bate-papo para inserir no prompt"""
  ai_msg = x["ai_msg"]
  tool_call_id = x["ai_msg"].additional_kwargs["tool_calls"][0]["id"]
  tool_msg = ToolMessage(tool_call_id=tool_call_id, content=str(x["tool_output"]))
  return [ai_msg, tool_msg]

  cadeia = (
    RunnablePassthrough.assign(ai_msg=prompt | llm_com_ferramenta)
    .assign(tool_output=itemgetter("ai_msg") | parser | ferramenta_python)
    .assign(chat_history=_get_chat_history)
    .assign(response=prompt | llm | StrOutputParser())
    .pick(["tool_output", "response"])
)

deu como resposta:

<>:19: SyntaxWarning: invalid escape sequence '\`'
<>:17: SyntaxWarning: invalid escape sequence '\`'
<>:19: SyntaxWarning: invalid escape sequence '\`'
<>:17: SyntaxWarning: invalid escape sequence '\`'
/tmp/ipykernel_966/184883069.py:19: SyntaxWarning: invalid escape sequence '\`'
  prompt = ChatPromptTemplate.from_messages([("system", system), ("human", "{question}"),
/tmp/ipykernel_966/184883069.py:17: SyntaxWarning: invalid escape sequence '\`'
resposta = cadeia.invoke({"question": "Qual é a média do tempo de entrega para cada tipo de clima?"})
print(resposta['response'])

deu como resposta:

A média do tempo de entrega para cada tipo de clima é a seguinte:
- Chuvoso: 165 minutos
- Ensolarado: 112,5 minutos
- Nublado: 150 minutos
- Tempestade: 130 minutos

Poderiam me ajudar?

1 resposta

Olá, Barbara!

há dois pontos que merecem atenção. O primeiro são os avisos SyntaxWarning: invalid escape sequence '\'. Eles costumam aparecer porque as crases ( ``` ) foram escapadas com ` dentro da string. Como é apenas um aviso, ele não interfere no resultado da resposta do agente. Você pode remover as barras invertidas ou utilizar uma *raw string* (r"""..."""`) para evitar esses avisos.

Já em relação aos valores retornados, isso pode acontecer porque você está utilizando o modelo llama-3.3-70b-versatile, enquanto a aula foi gravada com outro modelo. Modelos diferentes podem gerar chamadas de ferramenta, código Python e até respostas finais diferentes, mesmo recebendo o mesmo prompt. O mais importante é verificar se o cálculo está correto. Uma boa forma de confirmar é executar diretamente no DataFrame algo como:

df.groupby("Clima")["Tempo de Entrega"].mean()

Se os valores coincidirem com os que o agente retornou, então o comportamento está correto, apenas diferente do apresentado na aula por conta da troca do modelo. Caso os resultados sejam diferentes, compartilhe também a saída desse comando e, se possível, o df.head(), para que possamos comparar os dados utilizados e identificar a origem da diferença.