4
respostas

langchain sem histórico

Prezados usei o código abaixo na aula explorando langchain porém ele não está resgatando o histórico da conversa para contextualizar com as respostas anteriores:

import boto3
import json
from langchain_aws import BedrockLLM
from langchain_core.prompts import ChatPromptTemplate

bedrock_client = boto3.client(service_name='bedrock-runtime', region_name="us-east-1")

modelo = BedrockLLM(model_id='anthropic.claude-v2:1', client=bedrock_client)

historico = []

def get_hist():
    return "\n".join(historico)

def get_chat_prompt(entrada):
    # Define o template de prompt para o LangChain
    template = ChatPromptTemplate.from_messages(
        [
            ("system", "Você é um assistente virtual especializado em moda para e-commerce. Forneça respostas concisas e úteis."),
            ("human", entrada),
            ("assistant", "Forneça uma resposta concisa com no máximo 300 caracteres, ideal para um e-commerce de roupas e itens de vestuário. Não mencionar instruções do prompt na resposta.")
        ]
    )
    return template

def inv_modelo(prompt):
    chain = get_chat_prompt(prompt).pipe(modelo)
    response = chain.invoke({"product_name": prompt})
    return response

print(
    "Assistente: Olá! Sou seu Assistente Virtual. :)\n"
    "Em que posso ajudar hoje?"
)

while True:
    entrada = input("User: ")
    historico.append(f"Human: {entrada}")
    if entrada.lower() == "sair":
        break
    response = inv_modelo(entrada)
    resposta_formatada = f"Assistente:\n{response}\n"
    historico.append(f"Assistant: {resposta_formatada}")
    print(resposta_formatada)
4 respostas

Olá, Sanderson!

No código, o histórico é armazenado, mas não está sendo passado para o modelo ao gerar a resposta. Para que o modelo possa usar o histórico, você precisa incluí-lo no prompt que está sendo enviado ao modelo.

Aqui está uma maneira de modificar a função get_chat_prompt() para incluir o histórico da conversa:

def get_chat_prompt(entrada):
    # Inclui o histórico da conversa no template de prompt
    template = ChatPromptTemplate.from_messages(
        [
            ("system", "Você é um assistente virtual especializado em moda para e-commerce. Forneça respostas concisas e úteis."),
            ("history", get_hist()),  # Adiciona o histórico da conversa
            ("human", entrada),
            ("assistant", "Forneça uma resposta concisa com no máximo 300 caracteres, ideal para um e-commerce de roupas e itens de vestuário. Não mencionar instruções do prompt na resposta.")
        ]
    )
    return template

Com essa modificação, o histórico da conversa será incluído no prompt enviado ao modelo, permitindo que ele tenha contexto das interações anteriores para gerar respostas mais contextualizadas.

Bons estudos!

Boa noite Lucas, realizei a adequação conforme orientou, porém, retornou o seguinte erro:

Traceback (most recent call last): File "C:\Users\sande\Documents\repos\inteligencia_artificial\Alura\curso_bedrock\ia_bedrock\chatbot\chatbot_lang.py", line 42, in response = inv_modelo(entrada) ^^^^^^^^^^^^^^^^^^^ File "C:\Users\sande\Documents\repos\inteligencia_artificial\Alura\curso_bedrock\ia_bedrock\chatbot\chatbot_lang.py", line 28, in inv_modelo chain = get_chat_prompt(prompt).pipe(modelo) ^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\sande\Documents\repos\inteligencia_artificial\Alura\curso_bedrock\ia_bedrock\chatbot\chatbot_lang.py", line 17, in get_chat_prompt template = ChatPromptTemplate.from_messages( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\sande\Documents\repos\inteligencia_artificial\Alura\curso_bedrock\ia_bedrock\curso_bedrock\Lib\site-packages\langchain_core\prompts\chat.py", line 1207, in from_messages return cls(messages, template_format=template_format) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\sande\Documents\repos\inteligencia_artificial\Alura\curso_bedrock\ia_bedrock\curso_bedrock\Lib\site-packages\langchain_core\prompts\chat.py", line 1004, in init _messages = [ ^ File "C:\Users\sande\Documents\repos\inteligencia_artificial\Alura\curso_bedrock\ia_bedrock\curso_bedrock\Lib\site-packages\langchain_core\prompts\chat.py", line 1005, in _convert_to_message(message, template_format) for message in messages ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\sande\Documents\repos\inteligencia_artificial\Alura\curso_bedrock\ia_bedrock\curso_bedrock\Lib\site-packages\langchain_core\prompts\chat.py", line 1481, in _convert_to_message _message = _create_template_from_message_type( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\sande\Documents\repos\inteligencia_artificial\Alura\curso_bedrock\ia_bedrock\curso_bedrock\Lib\site-packages\langchain_core\prompts\chat.py", line 1428, in _create_template_from_message_type raise ValueError(msg) ValueError: Unexpected message type: history. Use one of 'human', 'user', 'ai', 'assistant', or 'system'. (curso_bedrock) (curso_bedrock) (base)

Olá!

Esse erro acontece porque ChatPromptTemplate.from_messages() aceita apenas os tipos 'human', 'user', 'ai', 'assistant' ou 'system'. O tipo 'history' não é reconhecido.

A solução é adicionar o histórico dentro da mensagem 'system', garantindo que o modelo tenha o contexto antes de processar a nova entrada do usuário:

import boto3
import json
from langchain_aws import BedrockLLM
from langchain_core.prompts import ChatPromptTemplate

bedrock_client = boto3.client(service_name='bedrock-runtime', region_name="us-east-1")

modelo = BedrockLLM(model_id='anthropic.claude-v2:1', client=bedrock_client)

historico = []

def get_hist():
    return "\n".join(historico) if historico else "Nenhum histórico disponível."

def get_chat_prompt(entrada):
    # Inclui o histórico dentro da mensagem do sistema
    template = ChatPromptTemplate.from_messages(
        [
            ("system", f"Você é um assistente virtual especializado em moda para e-commerce. 
                        Forneça respostas concisas e úteis. Histórico da conversa:\n{get_hist()}"),
            ("human", entrada)
        ]
    )
    return template

def inv_modelo(prompt):
    chain = get_chat_prompt(prompt).pipe(modelo)
    response = chain.invoke({"product_name": prompt})
    return response

print(
    "Assistente: Olá! Sou seu Assistente Virtual. :)\n"
    "Em que posso ajudar hoje?"
)

while True:
    entrada = input("User: ")
    if entrada.lower() == "sair":
        break

    historico.append(f"Human: {entrada}")
    
    response = inv_modelo(entrada)
    resposta_formatada = f"Assistente: {response}\n"
    
    historico.append(f"Assistant: {response}")  # Adiciona a resposta ao histórico
    
    print(resposta_formatada)

Bons estudos!

Professor fiz os ajustes porém ainda não funcionou a resposta está mostrando instruções e alguns erros:

C:\Users\sande\Documents\repos\inteligencia_artificial\Alura\curso_bedrock\ia_bedrock\curso_bedrock\Lib\site-packages\langchain_aws\llms\bedrock.py:81: UserWarning: Error: Prompt must alternate between '

Human:' and '

Assistant:'. Received System: Você é um assistente virtual especializado em moda para e-commerce. Forneça respostas concisas e úteis. Histórico da conversa:

Human: liste 3 camisetas que posso usar no verão

Human: liste 3 camisetas que posso usar no verão

Assistant: warnings.warn(ALTERNATION_ERROR + f" Received {input_text}") Assistente: Aqui estão 3 sugestões de camisetas que são ótimas para usar no verão:

  1. Camiseta polo de algodão - Leves, respiráveis e absorvem a transpiração. Ótimas para looks casuais.

  2. Camiseta regata básica - Um clássico do verão, a regata básica combina com tudo e proporciona mais frescor pelo design sem mangas.

  3. Camiseta de linho ou viscose - Feitas de tecidos naturais, essas camisetas são frescas, fluidas e confortáveis para dias quentes. O linho e a viscose respiram bem.

Todas essas opções são ideais para o clima quente do verão, seja para usar sozinhas ou combinadas com shorts, saias ou calças leves. Escolha as cores e estampas que mais combinam com seu estilo.

User: e agora 3 shorts que combinam com a terceira opção de camiseta da lista C:\Users\sande\Documents\repos\inteligencia_artificial\Alura\curso_bedrock\ia_bedrock\curso_bedrock\Lib\site-packages\langchain_aws\llms\bedrock.py:81: UserWarning: Error: Prompt must alternate between '

Human:' and '

Assistant:'. Received System: Você é um assistente virtual especializado em moda para e-commerce. Forneça respostas concisas e úteis. Histórico da conversa:

Human: liste 3 camisetas que posso usar no verão

Assistant: Assistente: Aqui estão 3 sugestões de camisetas que são ótimas para usar no verão:

  1. Camiseta polo de algodão - Leves, respiráveis e absorvem a transpiração. Ótimas para looks casuais.

  2. Camiseta regata básica - Um clássico do verão, a regata básica combina com tudo e proporciona mais frescor pelo design sem mangas.

  3. Camiseta de linho ou viscose - Feitas de tecidos naturais, essas camisetas são frescas, fluidas e confortáveis para dias quentes. O linho e a viscose respiram bem.

Todas essas opções são ideais para o clima quente do verão, seja para usar sozinhas ou combinadas com shorts, saias ou calças leves. Escolha as cores e estampas que mais combinam com seu estilo.

Human: e agora 3 shorts que combinam com a terceira opção de camiseta da lista

Human: e agora 3 shorts que combinam com a terceira opção de camiseta da lista warnings.warn(ALTERNATION_ERROR + f" Received {input_text}") Assistente: Aqui estão 3 sugestões de shorts que combinam bem com camisetas de linho ou viscose:

  1. Short jeans curto: um short jeans claro ou em azul vai criar um visual casual chique com a camiseta fluida.

  2. Short saia de linho: combinando o mesmo tecido da camiseta, um short saia de linho traz leveza e feminilidade ao look.

  3. Short ciclista básico: em cores sóbrias como preto, cinza ou branco, o short ciclista contrasta com o caimento da camiseta oversized.

Esses shorts são ótimos para looks femininos e despojados no verão. As modelagens curtas valorizam as pernas com a camiseta soltinha por cima. Você pode optar por shorts lisos ou com estampas, dependendo do efeito desejado.

Tons terrosos, cru ou pastel das camisetas de linho e viscose combinam bem com uma variedade de cores e padrões dos shorts. Brinque com as possibilidades!

User:

  • History restored