Introduction
Source citation helps you know where the information in your AI answers comes from. It makes the answers trustworthy and easy to check.
from langchain.chains import RetrievalQA from langchain.llms import OpenAI from langchain.vectorstores import FAISS from langchain.embeddings.openai import OpenAIEmbeddings retriever = FAISS.load_local("my_faiss_index", OpenAIEmbeddings()) qa = RetrievalQA.from_chain_type( llm=OpenAI(), chain_type="stuff", retriever=retriever, return_source_documents=True ) result = qa({"query": "What is the capital of France?"}) print(result['result']) print(result['source_documents'])
qa = RetrievalQA.from_chain_type(
llm=OpenAI(),
chain_type="stuff",
retriever=retriever,
return_source_documents=True
)
result = qa({"query": "Explain photosynthesis."})
print(result['result'])
print([doc.metadata for doc in result['source_documents']])result = qa({'query': "Who wrote Hamlet?"})
print(result['result'])
for doc in result['source_documents']:
print(doc.page_content)
print(doc.metadata)from langchain.chains import RetrievalQA from langchain.llms import OpenAI from langchain.vectorstores import FAISS from langchain.embeddings.openai import OpenAIEmbeddings # Load embeddings and FAISS index embeddings = OpenAIEmbeddings() retriever = FAISS.load_local("faiss_index", embeddings) # Create QA chain with source documents returned qa = RetrievalQA.from_chain_type( llm=OpenAI(temperature=0), chain_type="stuff", retriever=retriever, return_source_documents=True ) # Ask a question query = "What is the tallest mountain in the world?" result = qa({'query': query}) # Print answer print("Answer:", result['result']) # Print source citations print("Sources:") for i, doc in enumerate(result['source_documents'], 1): print(f"Source {i} metadata:", doc.metadata) print(f"Source {i} content snippet:", doc.page_content[:100], "...")
True to receive source documents in RetrievalQA?return_source_documents.print(sources[0].metadata['source']) output if return_source_documents=True?
qa = RetrievalQA.from_chain_type(llm=llm, retriever=retriever, return_source_documents=True)
result = qa({"query": "What is AI?"})
sources = result['source_documents']
print(sources[0].metadata['source'])metadata['source'] prints the origin of the first document, not the answer or full content.return_source_documents=True but get a KeyError when accessing result['source_documents']. What is the likely cause?run method returns only the answer string, not a dict with sources.qa({'query': '...'}) which returns a dict including source_documents.qa({'query': question}) returns a dict with answer and source documents.source_documents to show each source's metadata and a snippet of content for clear citation.Pass the test and this pattern moves unknown