Конвейер RAG с использованием Haystack — ошибка при внедрении PipelinePython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Конвейер RAG с использованием Haystack — ошибка при внедрении Pipeline

Сообщение Anonymous »

Я пытаюсь запустить конвейер RAG с использованием Haystack (и Milvus) на своем экземпляре кластера с использованием Python (3.10.12).

Показаны импортированные и соответствующие пакеты, которые у меня есть в этой среде. в конце этого вопроса.
мой код:
  • встраивание модели и функции генератора:

Код: Выделить всё

@component
def model_embedder(self, documents,cache_dir=cache_dir):
tokenizer = AutoTokenizer.from_pretrained(mymodel, cache_dir=cache_dir)
model = AutoModelForSeq2SeqLM.from_pretrained(mymodel, cache_dir=cache_dir)

embeddings = []
for doc in documents:
inputs = tokenizer(doc.content, padding="max_length", truncation=True, return_tensors="pt")
with torch.no_grad():
output = model(**inputs)
embedding = output.pooler_output.squeeze(0).cpu().numpy()
embeddings.append(embedding)

for doc, embedding in zip(documents, embeddings):
doc.embedding = embedding
return documents

@component
def model_generator(self, query, context=None, generation_kwargs={}, cache_dir=cache_dir):
tokenizer = AutoTokenizer.from_pretrained(mymodel, cache_dir=cache_dir)
model = AutoModelForSeq2SeqLM.from_pretrained(mymodel, cache_dir=cache_dir)

inputs = tokenizer(query, context=context, padding="max_length", truncation=True, return_tensors="pt")
with torch.no_grad():
output = model.generate(**inputs, **generation_kwargs)
return tokenizer.decode(output[0], skip_special_tokens=True)
  • Конвейер RAG:

Код: Выделить всё

rag_pipeline = Pipeline()
rag_pipeline.add_component("converter", MarkdownToDocument())
rag_pipeline.add_component(
"splitter", DocumentSplitter(split_by="sentence", split_length=2)
)
rag_pipeline.add_component("embedder", model_embedder)
rag_pipeline.add_component(document_store)
rag_pipeline.add_component(
"retriever", MilvusEmbeddingRetriever(document_store=document_store, top_k=3)
)
rag_pipeline.add_component("writer", DocumentWriter(document_store))
rag_pipeline.add_component("prompt_builder", PromptBuilder(template=prompt_template))
rag_pipeline.add_component(
"generator",
model_generator,
)

rag_pipeline.connect("converter.documents", "splitter.documents")
rag_pipeline.connect("splitter.documents", "embedder.documents")
rag_pipeline.connect("embedder", "writer")
rag_pipeline.connect("text_embedder.embedding", "retriever.query_embedding")
rag_pipeline.connect("retriever.documents", "prompt_builder.documents")
rag_pipeline.connect("prompt_builder", "generator")

rag_pipeline.draw('./rag_pipeline.png')

Если я декорирую @comComponent, я получаю следующую ошибку:

Код: Выделить всё

---------------------------------------------------------------------------
ComponentError                            Traceback (most recent call last)
Cell In[11], line 2
1 @component
----> 2 def model_embedder(self, documents,cache_dir=cache_dir):
4     tokenizer = AutoTokenizer.from_pretrained(mymodel, cache_dir=cache_dir)

File /.../rag_env/lib/python3.10/site-packages/haystack/core/component/component.py:517, in _Component.__call__(self, cls, is_greedy)
513     return self._component(cls, is_greedy=is_greedy)
515 if cls:
516     # Decorator is called without parens
--> 517     return wrap(cls)
519 # Decorator is called with parens
520 return wrap

File /.../rag_env/lib/python3.10/site-packages/haystack/core/component/component.py:513, in _Component.__call__..wrap(cls)
512 def wrap(cls):
--> 513     return self._component(cls, is_greedy=is_greedy)

File /.../rag_env/lib/python3.10/site-packages/haystack/core/component/component.py:464, in _Component._component(self, cls, is_greedy)
462 # Check for required methods and fail as soon as possible
463 if not hasattr(cls, "run"):
--> 464     raise ComponentError(f"{cls.__name__} must have a 'run()' method. See the docs for more information.")
466 def copy_class_namespace(namespace):
...
469
470     Simply copy the whole namespace from the decorated class.
471     """

ComponentError: model_embedder must have a 'run()' method.  See the docs for more information.
И если я не использую декоратор @comComponent (и удаляю self из обеих функций), эти функции компилируются, но затем, когда я запускаю rag_pipeline< /code> код, я получаю следующую ошибку:

Код: Выделить всё

---------------------------------------------------------------------------
PipelineValidationError                   Traceback (most recent call last)
Cell In[13], line 6
2 rag_pipeline.add_component("converter", MarkdownToDocument())
3 rag_pipeline.add_component(
4     "splitter", DocumentSplitter(split_by="sentence", split_length=2)
5 )
----> 6 rag_pipeline.add_component("embedder", model_embedder)
7 rag_pipeline.add_component(document_store)
8 rag_pipeline.add_component(
9     "retriever", MilvusEmbeddingRetriever(document_store=document_store, top_k=3)
10 )

File /.../rag_env/lib/python3.10/site-packages/haystack/core/pipeline/base.py:313, in PipelineBase.add_component(self, name, instance)
311 # Component instances must be components
312 if not isinstance(instance, Component):
--> 313     raise PipelineValidationError(
314         f"'{type(instance)}' doesn't seem to be a component. Is this class decorated with @component?"
315     )
317 if getattr(instance, "__haystack_added_to_pipeline__", None):
318     msg = (
319         "Component has already been added in another Pipeline. Components can't be shared between Pipelines. "
320         "Create a new instance instead."
321     )

PipelineValidationError: '' doesn't seem to be a component. Is this class decorated with @component?
Я использую следующие варианты импорта:

Код: Выделить всё

import os
import urllib.request

from haystack import Pipeline
from haystack.components.converters import MarkdownToDocument

from haystack.components.preprocessors import DocumentSplitter
from haystack.components.writers import DocumentWriter

from milvus_haystack import MilvusDocumentStore
from milvus_haystack.milvus_embedding_retriever import MilvusEmbeddingRetriever

from haystack.components.builders import PromptBuilder

import mdit_plain
from haystack import component

import huggingface_hub
from transformers import AutoModelForSeq2SeqLM, AutoTokenizer
import torch
Поскольку я подозреваю, что могут быть какие-то проблемы (/несовместимость) с библиотеками Haystack, которые я использую, я показываю здесь все библиотеки и версии, связанные с Haystack, которые у меня есть в текущей среде:< /p>

Код: Выделить всё

Package                      Version
---------------------------- --------------
farm-haystack                1.26.3
haystack                     0.42
haystack-ai                  2.5.1
haystack-experimental        0.2.0
milvus-haystack              0.0.10
Я буду рад получить любые предложения или помощь, как решить проблему и запустить конвейер RAG.

Подробнее здесь: https://stackoverflow.com/questions/790 ... e-embedder
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Конвейер RAG с использованием Haystack — ошибка при внедрении Pipeline
    Anonymous » » в форуме Python
    0 Ответы
    19 Просмотры
    Последнее сообщение Anonymous
  • Modulenotfounderror: нет модуля с именем 'haystack.document_store.elasticsearch'; 'Haystack.document_store' не является
    Anonymous » » в форуме Python
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • RAG с Haystack: компилируется, но возвращает пустые ответы
    Anonymous » » в форуме Python
    0 Ответы
    19 Просмотры
    Последнее сообщение Anonymous
  • RAG с Haystack: компилируется, но возвращает пустые ответы
    Anonymous » » в форуме Python
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • Как визуализировать прозрачное пространство с помощью mlab.pipeline.volume() с помощью поля mlab.pipeline.scalar()?
    Anonymous » » в форуме Python
    0 Ответы
    79 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»