Первый запуск: выходные данные были правильными и ожидаемыми.
Последующие запуски: выходные данные начали галлюцинировать и отклоняться от ожидаемых результатов. Структура остается прежней.
Это озадачивает, и я пытаюсь понять, почему это может происходить и как это решить. Ниже приведены подробности моей реализации:
Вопрос:
Почему система может галлюцинировать при повторных запусках, несмотря на то, что изначально выдает правильные выходные данные?
Как я могу отладить и исправить Эта проблема необходима для обеспечения согласованных и точных результатов при каждом запуске?
Будем очень признательны за любую информацию о потенциальных проблемах с фрагментированием, обработкой векторного хранилища или конфигурацией цепочки RAG.
Контекст кода :
- Разделение PDF-файла на части
Чтобы предварительно обработать PDF-файл, я использовал PyPDFLoader от LangChain и разделил текст на фрагменты для векторизации. Вот как я гарантирую уникальную идентификацию каждого фрагмента, чтобы избежать дублирования в базе данных векторов Chroma:
def create_vectorstore(chunks, embedding_function, vectorstore_path):
# Generate unique IDs based on content
ids = [str(uuid.uuid5(uuid.NAMESPACE_DNS, doc.page_content)) for doc in chunks]
# Filter out duplicate chunks
unique_ids = set()
unique_chunks = []
for chunk, id in zip(chunks, ids):
if id not in unique_ids:
unique_ids.add(id)
unique_chunks.append(chunk)
# Create the Chroma vector database
vectorstore = Chroma.from_documents(
documents=unique_chunks,
ids=list(unique_ids),
embedding=embedding_function,
persist_directory=vectorstore_path
)
vectorstore.persist()
return vectorstore
- Шаблон структурированного вывода для цепочки RAG
Система ожидает структурированные выходные данные, определенные следующей моделью Pydantic:
class AnswerWithSources(BaseModel):
"""An answer to the question, with sources and reasoning."""
answer: str = Field(description="Answer to question")
sources: str = Field(description="Full direct text chunk from the context used to answer the question")
reasoning: str = Field(description="Explain the reasoning of the answer based on the sources")
class ExtractedInfo(BaseModel):
"""Extracted information about the research article"""
paper_title: AnswerWithSources
paper_summary: AnswerWithSources
publication_year: AnswerWithSources
paper_authors: AnswerWithSources
Я вызываю цепочку RAG следующим образом:
rag_chain = (
{"context": retriever | format_docs, "question": RunnablePassthrough()}
| prompt_template
| llm.with_structured_output(ExtractedInfo, strict=True)
)
rag_chain.invoke("Give me the title, summary, publication date, authors of the research paper.")
Подробнее здесь: https://stackoverflow.com/questions/792 ... ma-vectors
Мобильная версия