Сценарий Python не работает из командной строки, в отличие от его запуска из ipython.

Следующий код сообщает об ошибке при выполнении из командной строки, тогда как из ipython он выполняется нормально (построчно). Скрипт использует локально сохраненную модель HuggingFace, читает научную статью из файла PDF и отвечает на вопросы о статье.

      import os
os.environ["HUGGINGFACEHUB_API_TOKEN"] = 'hf-xxxxxx'

from langchain.embeddings import HuggingFaceEmbeddings
from langchain import HuggingFaceHub
from langchain.llms import HuggingFacePipeline
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM, pipeline, AutoModelForSeq2SeqLM

model_id = 'google/flan-t5-large'
tokenizer = AutoTokenizer.from_pretrained(model_id,max_length=1500)

model = AutoModelForSeq2SeqLM.from_pretrained(model_id)

pipe = pipeline("text2text-generation", model=model, tokenizer=tokenizer, max_length=1500)
llm = HuggingFacePipeline(pipeline=pipe)

from langchain.document_loaders import UnstructuredPDFLoader
from langchain.indexes import VectorstoreIndexCreator
from langchain.text_splitter import CharacterTextSplitter

pdf_folder_path = "/mnt/d/test/langchain/pdfs"
loaders = [UnstructuredPDFLoader(os.path.join(pdf_folder_path, fn)) for fn in os.listdir(pdf_folder_path)]

index = VectorstoreIndexCreator(
   embedding=HuggingFaceEmbeddings(),
   text_splitter=CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)).from_loaders(loaders)

from langchain.chains import RetrievalQA
chain = RetrievalQA.from_chain_type(llm=llm,
                                    chain_type="stuff",
                                    retriever=index.vectorstore.as_retriever(),
                                    input_key="question")

chain.run('What method was used in calculations?')

Вот ошибка при запуске из командной строки (с использованиемpython script.py):

      Token indices sequence length is longer than the specified maximum sequence length for this model (1142 > 512). Running this sequence through the model will result in indexing errors
Exception ignored in: <function DuckDB.__del__ at 0x7f0d0b1b1fc0>
Traceback (most recent call last):
  File "/home/popsi/.local/lib/python3.10/site-packages/chromadb/db/duckdb.py", line 355, in __del__
AttributeError: 'NoneType' object has no attribute 'info'

При выполнении из ipython я получаю предупреждение, аналогичное запуску из командной строки, но без ошибки в DuckDB:

      Token indices sequence length is longer than the specified maximum sequence length for this model (1142 > 512). Running this sequence through the model will result in indexing errors

и программа завершается правильно с правильными ответами.

Я считаю, что python (командная строка) и ipython могут зависеть от разных переменных среды или чего-то подобного, но я не могу найти в Интернете решение этой проблемы. Есть идеи?

РЕДАКТИРОВАТЬ: Когда я используюprint(chain.run('What method was used in calculations?'))вместо последней строки, указанной выше, тогда даже запуск из командной строки печатает ответ. Однако сообщение об ошибке Duckdb.py по-прежнему отображается в конце. Я не эксперт по Python, но полагаю, что__del__— деструктор объекта DuckDB, который вызывается в конце выполнения скрипта. Из ipython деструктор никогда не вызывается, поскольку программа никогда не завершается во время выполнения ipython. Это правильное рассуждение? Если это так, возможно, в DuckDB есть ошибка.

0 ответов

Другие вопросы по тегам