3
respostas

Erro ao executar o módulo SimpleSequentialChain

Olá,

   Estou na seguinte aula e não estou conseguindo executar minha cadeia usando SimpleSequentialChain. Notem que não estou utilizando o módulo LLMChain porque, pela documentação, está depreciado - então encurtei as cadeias individuais como recomenda a doc. Ainda assim, não sei se fiz algo errado ou se é algo da biblioteca.

  • Imagem do erro

Captura de tela - Erro

  • Imagem da documentação dizendo sobre LLMChain estar depreciado

Documentacao de LangChain - LLMChain

  NOTA:

   Abaixo, podem verificar as versões das bibliotecas que estou utilizando:

  • Não incluí python-dotenv porque estou utilizando a variável ambeinte OPENAI_API_KEY no sistema

 

openai==1.30.4
langchain==0.2.1
langchain-openai==0.1.8
3 respostas

Boa tarde,

O modelo está depreciado, você pode usar a sintaxe:

from os import environ as env
from dotenv import load_dotenv
from langchain_openai import AzureChatOpenAI
from langchain.prompts import ChatPromptTemplate
from langchain_core.runnables import chain
from langchain_core.output_parsers import StrOutputParser
from langchain.globals import set_debug
load_dotenv()
# set_debug(value = True)

llm = AzureChatOpenAI(
    azure_deployment = 'deploy-gpt4'
    ,api_key = env['AZURE_OPENAI_KEY']
    ,api_version = env['OPENAI_API_VERSION']
    ,openai_api_type = env['OPENAI_API_TYPE']
    ,azure_endpoint = env['AZURE_OPENAI_ENDPOINT']
    ,model = 'gpt-35-turbo'
    ,max_tokens = 200
    ,temperature = 0
    
)

prompt1 = ChatPromptTemplate.from_template(
    'Como criar uma classe na linguagem {lang}'
)


prompt2 = ChatPromptTemplate.from_template(
    'explique o {code}.'

)





@chain
def customChain(text):
    chain1 = prompt1 | llm | StrOutputParser()
    chain2 = prompt2 | llm | StrOutputParser()
    parse = chain1.invoke({'lang': text})
    return chain2.invoke({"code": parse})

res = customChain.invoke("Python")

print(res)

Eu estou usando o azureOpenAI, mas você pode substituir para a OPENAI

Boa tarde, Wilson. Muito obrigada!

Implementei sua solução e consegui fazer funcionar sem erro. Porém, uma coisa que notei é que, aparentemente, estou recebendo apenas o output final (sem saber, por exemplo, qual cidade foi recomendada de fato).

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Abaixo, podemos ver (no painel LangSmith) que passou corretamente pelas correntes individuais - mas, como eu disse, está mostrando somente a saída da última corrente:

  • Primeira corrente para sugerir cidades:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

  • Segunda corrente para recomendar restaurantes, com base no output anterior:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

  • Última corrente, pedindo as sugestões de atividades com base em todas as saídas anteriores:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Como vocês podem ver, no meu código está aparecendo apenas a saída final de recomendação, sem nenhuma informação de onde seria. Por baixo dos panos, está realmente usando a cidade recomendada (Florianópolis, nesse caso), mas o usuário final não faria ideia - sem contar que a UX seria terrível pela forma de resposta não ser tão conversacional.

Voltando rapidamente pra dizer que consegui fazer o truque dos ajustes de prompts, hehehe. Com isso, consegui modelar para responder o mais próximo do que estou buscando :)

PS.: Não confirmei o endereço que foi enviado, mas imagino que para garantir essa informação correta em algum ambiente fechado, basta um link com dados internos. Uma RAG talvez poderia ajudar :)

Insira aqui a descrição dessa imagem para ajudar na acessibilidade