Из моих проверок я подумал, что это может быть связано с несовместимостью моделей внедрения и llm, поэтому я изменена на модель внедрения, основанную на той же модели, что и моя модель llm (обе основаны на мистрале).
Код: Выделить всё
mymodel = "occiglot/occiglot-7b-eu5-instruct" # llm model
# embedding_model = "Alibaba-NLP/gte-Qwen2-7B-instruct" # old embedding model
embedding_model = "intfloat/e5-mistral-7b-instruct"
Код: Выделить всё
from haystack import Pipeline
from haystack.components.builders import PromptBuilder
from haystack.components.embedders import SentenceTransformersTextEmbedder
from haystack.components.embedders import SentenceTransformersDocumentEmbedder
from haystack.components.generators import HuggingFaceLocalGenerator
Код: Выделить всё
embedder = SentenceTransformersDocumentEmbedder(model=embedding_model)
text_embedder = SentenceTransformersTextEmbedder(model=embedding_model)
generator = HuggingFaceLocalGenerator(model=mymodel)
Код: Выделить всё
question
Код: Выделить всё
indexing_pipeline = Pipeline()
indexing_pipeline.add_component("converter", MarkdownToDocument())
indexing_pipeline.add_component("splitter", DocumentSplitter(split_by="sentence", split_length=2))
indexing_pipeline.add_component("embedder", embedder)
indexing_pipeline.add_component("writer", DocumentWriter(document_store))
indexing_pipeline.connect("converter.documents", "splitter.documents")
indexing_pipeline.connect("splitter.documents", "embedder.documents")
indexing_pipeline.connect("embedder", "writer")
Код: Выделить всё
query_pipeline = Pipeline()
query_pipeline.add_component("text_embedder", text_embedder)
query_pipeline.add_component("retriever", MilvusEmbeddingRetriever(document_store=document_store, top_k=3))
query_pipeline.add_component("prompt_builder", PromptBuilder(template=prompt_template))
query_pipeline.add_component("generator", generator)
query_pipeline.connect("text_embedder.embedding", "retriever.query_embedding")
query_pipeline.connect("retriever.documents", "prompt_builder.documents")
query_pipeline.connect("prompt_builder", "generator")
Код: Выделить всё
.run()
Код: Выделить всё
indexing_pipeline.run({
"converter": {"sources": [file_path]},
})
results = query_pipeline.run({
"text_embedder": {"text": question},
})
print("RAG answer:", results["generator"]["replies"][0])
Кроме того, при загрузке средства внедрения отображается следующая строка: В словарь добавлены специальные токены, убедитесь, что соответствующие встраивания слов точно настроены или обучены.
Я не уверен, связана ли проблема с моделями, которые я выбрал? или в моем конвейере (может быть, проблемы с внедрением документа и текста вместе?)
Я рад получить любой совет, помочь с этим.
РЕДАКТИРОВАТЬ 1. Следуя предложениям @Stefano-Fiorucci, внесены следующие изменения:
- разделен конвейер для индексации и запроса (см. код выше) ).
- вот код подсказки, может быть, проблема здесь? :
Код: Выделить всё
prompt_template = """Answer the following query based on the provided context. If the context does
not include an answer, reply with 'I don't know'.\n
Query: {{query}}
Documents:
{% for doc in documents %}
{{ doc.content }}
{% endfor %}
Answer:
"""
- проверено также с помощью Alibaba-NLP/gte-large-en-v1.5
полный вывод результатов (т. е. query_pipeline.run( {"text_embedder": {"text": вопрос},})) — это:
Код: Выделить всё
{'generator': {'replies': ['\n']}}
Подробнее здесь: https://stackoverflow.com/questions/790 ... -responses