5
respostas

ModuleNotFoundError: No module named 'llama_index.core.query_engine.query_pipeline'

Fazendo a aula sobre query pipeline do llama-index e estou tendo o seguinte problema:
ModuleNotFoundError: No module named 'llama_index.core.query_engine.query_pipeline'

Acredito que seja um problema de versão, onde a versão atual não conta mais com o modulo query_pipeline, gostaria de saber como criar o pipeline como ensinado na aula sem esse modulo.

Link da aula:
https://cursos.alura.com.br/course/llamaIndex-analisando-dados-pandas/task/174866

5 respostas

Você está certo, o erro acontece porque o módulo query_pipeline foi movido nas versões mais recentes do LlamaIndex.

Agora o import correto é:

from llama_index.core.query_pipeline import QueryPipeline as QP, Link, InputComponent

Ou seja, remova o .query_engine do caminho.

Se ainda assim não funcionar, confirme sua versão instalada:

pip show llama-index
  • No curso provavelmente foi usada uma versão mais antiga.
  • Se quiser reproduzir exatamente como na aula, instale a versão compatível:
pip install llama-index==0.9.48
  • Se preferir manter a versão atual, use o import ajustado que mostrei acima.

A primeira solução também não foi resolutiva ela segue apresentando o mesmo problema:

ModuleNotFoundError                       Traceback (most recent call last)
/tmp/ipython-input-3749414147.py in <cell line: 0>()
----> 1 from llama_index.core.query_pipeline import QueryPipeline as QP, Link, InputComponent

ModuleNotFoundError: No module named 'llama_index.core.query_pipeline'

E a solução de utilizar uma versão deprecated é mais uma alternativa pra seguir a aula do que aprendizagem da ferramenta em si, pois se por ventura eu vier a utiliza-la será com uma versão atual, gostaria de aprender a trabalhar com pipeline na versão atual.

Agradeço pela ajuda, mas sigo com a duvida de como trabalhar com o query pipeline na versão atual.

Consegui até fazer ele me mostrar o resultado semelhante a da professora, mas o código parece péssimo:

from llama_index.core import PromptTemplate
from llama_index.experimental.query_engine.pandas import PandasInstructionParser

def descricao_colunas(df):
    descricao = '\n'.join([f"`{col}`:{str(df[col].dtype)}" for col in df.columns])
    return 'Aqui estão os detalhes das colunas do DataFrame:\n' + descricao

# Instruções para orientar o modelo
instruction_str = (
    "1. Converta a consulta para código Python executável usando Pandas.\n"
    "2. A linha final do código deve ser uma expressão Python que possa ser chamada com a função `eval()`.\n"
    "3. O código deve representar uma solução para a consulta.\n"
    "4. IMPRIMA APENAS A EXPRESSÃO.\n"
    "5. Não coloque a expressão entre aspas.\n")

# Prompts
pandas_prompt_str = (
    "Você está trabalhando com um dataframe do pandas em Python chamado `df`.\n"
    "{colunas_detalhes}\n\n"
    "Este é o resultado de `print(df.head())`:\n"
    "{df_str}\n\n"
    "Siga estas instruções:\n"
    "{instruction_str}\n"
    "Consulta: {query_str}\n\n"
    "Expressão:"
)

response_synthesis_prompt_str = (
   "Dada uma pergunta de entrada, atue como analista de dados e elabore uma resposta a partir dos resultados da consulta.\n"
   "Responda de forma natural, sem introduções como 'A resposta é:' ou algo semelhante.\n"
   "Consulta: {query_str}\n\n"
   "Instruções do Pandas (opcional):\n{pandas_instructions}\n\n"
   "Saída do Pandas: {pandas_output}\n\n"
   "Resposta:"
   "Ao final, exibir o código usado para gerar a resposta, no formato: O código utilizado foi {pandas_instructions}"
)

# Componentes
pandas_prompt = PromptTemplate(pandas_prompt_str).partial_format(
    instruction_str=instruction_str, colunas_detalhes=descricao_colunas(df), df_str=df.head(5)
)
pandas_output_parser = PandasInstructionParser(df)
response_synthesis_prompt = PromptTemplate(response_synthesis_prompt_str)
llm = Groq(model='llama3-70b-8192', api_key=key)

# RECRIANDO O COMPORTAMENTO DO QUERYPIPELINE ANTIGO
def run_pipeline(query_str: str, verbose: bool = True):    
    # Input Component
    if verbose:
        print("Running module input with input:")
        print(f"\nquery_str: {query_str}\n")   
        formatted_pandas_prompt = pandas_prompt.format(query_str=query_str)
        print("Running module llm1 with input:")
        print(f"\nmessages: {formatted_pandas_prompt}\n")    
        pandas_code_response = llm.complete(formatted_pandas_prompt).text
        print("Running module pandas_output_parser with input:")
        print(f"\ninput: {pandas_code_response}\n")    
        pandas_result = pandas_output_parser.parse(pandas_code_response)
        pandas_result_str = str(pandas_result)
        print("Running module response_synthesis_prompt with input:")
        print(f"\nquery_str: {query_str}")
        print(f"pandas_instructions: {pandas_code_response}")
        print(f"pandas_output: {pandas_result_str}\n")    
        formatted_synthesis_prompt = response_synthesis_prompt.format(
            query_str=query_str,
            pandas_instructions=pandas_code_response,
            pandas_output=pandas_result_str
        )
        print("Running module llm2 with input:")
        print(f"\nmessages: {formatted_synthesis_prompt}\n")
    
    final_response = llm.complete(formatted_synthesis_prompt)
    
    return final_response.text

# EXECUTAR EXATAMENTE COMO NO ORIGINAL
response = run_pipeline('Qual é a média gasta por cada tipo de cliente?')
print("\n" + "="*50)
print("RESPOSTA FINAL:")
print(response)

Ei! Tudo bem, pessoal?

Renato, poderia, por gentileza, compartilhar o seu notebook com o código completo? Dessa forma, consigo testar exatamente no ambiente do seu projeto e encontrar uma solução mais adequada.

Rodei o notebook teste por aqui e não obtive erros, compartilharei o link com você e se sinta à vontade para comparar com o seu código também:

Fico no aguardo, abraço e bons estudos!

Bom dia Nathalia, tudo certo e contigo?

https://colab.research.google.com/drive/1a-piQmOnMrx_kxEYjKkrHGEiZG7SlHmD?usp=sharing

Esse é o meu notebook atual, ele tá um pouco zoado por conta dos testes que eu estava fazendo, apaguei os lixos e deixei mais semelhante a aula.

Tentei executar o teu e tive o mesmo erro:
```

ModuleNotFoundError Traceback (most recent call last)
/tmp/ipython-input-1182791081.py in <cell line: 0>()
----> 1 from llama_index.core.query_pipeline import (QueryPipeline as QP, Link, InputComponent)

ModuleNotFoundError: No module named 'llama_index.core.query_pipeline'



Qual versão do Llama-index você usa? Pergunto pois até a IA do Colab reconheceu que o query_pipeline foi descontinuado, assim como dito na documentação do Llama-index:  https://docs.llamaindex.ai/en/stable/module_guides/querying/pipeline/usage_pattern/

Outra duvida, você utiliza o Colab?

Ei, Renato!

Obrigada pelo retorno. Também utilizo o Colab e, ao executar o código para o seu teste, confirmei que o erro é o mesmo.

Realmente, ele foi removido das versões mais recentes dollama_index. Segundo a documentação ele foi descontinuado e é recomendo o uso do workflows. Sobre isso, já informei a equipe responsável para que eles fiquem cientes.
Dado o contexto, recomendo que você continue utilizando seu código que recriou. Refatorei ele para torná-lo mais legível e fácil de manter.

Deixo abaixo a versão ajustada e veja se faz sentido para você:

Continue se dedicando aos estudos e qualquer dúvida, compartilhe.

Caso este post tenha lhe ajudado, por favor, marcar como solucionado!