Проблема с галлюцинаторными выходами в системе RAG с использованием LangChain и Chroma VectorstorePython

Программы на Python
Ответить
Anonymous
 Проблема с галлюцинаторными выходами в системе RAG с использованием LangChain и Chroma Vectorstore

Сообщение Anonymous »

Я работаю над системой расширенной поисковой генерации (RAG), где я ввожу простой PDF-файл и ожидаю структурированных выходных данных, таких как название, резюме, год публикации и авторы исследовательской работы. При тестировании системы я столкнулся с проблемой:
Первый запуск: выходные данные были правильными и ожидаемыми.
Последующие запуски: выходные данные начали галлюцинировать и отклоняться от ожидаемых результатов. Структура остается прежней.
Это озадачивает, и я пытаюсь понять, почему это может происходить и как это решить. Ниже приведены подробности моей реализации:
Вопрос:
Почему система может галлюцинировать при повторных запусках, несмотря на то, что изначально выдает правильные выходные данные?
Как я могу отладить и исправить Эта проблема необходима для обеспечения согласованных и точных результатов при каждом запуске?
Будем очень признательны за любую информацию о потенциальных проблемах с фрагментированием, обработкой векторного хранилища или конфигурацией цепочки RAG.
Контекст кода :
  • Разделение PDF-файла на части
    Чтобы предварительно обработать PDF-файл, я использовал PyPDFLoader от LangChain и разделил текст на фрагменты для векторизации. Вот как я гарантирую уникальную идентификацию каждого фрагмента, чтобы избежать дублирования в базе данных векторов Chroma:
import uuid

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:
from langchain_core.pydantic_v1 import BaseModel, Field

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
Ответить

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

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

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

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

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