如何用LangChain获取向量数据库查询结果的信息来源?
解决LangChain查询时获取信息来源的问题
核心问题出在你导入数据时没有给documents对象添加包含来源信息的元数据,导致查询时无法返回来源。以下是具体解决步骤:
1. 给文档添加元数据
在创建LangChain的Document对象时,必须传入metadata参数,把来源信息(URL、文档ID等)存进去。示例代码:
from langchain.docstore.document import Document # 假设你有原始文本和对应的来源列表 raw_texts = ["企业简介内容...", "产品介绍内容..."] sources = ["www.site.com/about", "document_156"] # 构建带元数据的Document对象列表 documents = [] for text, source in zip(raw_texts, sources): doc = Document( page_content=text, metadata={"source": source} # 这里存入来源信息 ) documents.append(doc)
2. 重新导入向量数据库
用上面带元数据的documents对象重新执行你的导入代码:
db = ElasticVectorSearch.from_documents( documents, embeddings, elasticsearch_url="http://localhost:9200", index_name="elastic-index", )
3. 查询时获取来源信息
执行similarity_search后,每个返回结果的metadata字段里就会包含你存入的来源信息,直接提取即可:
results = db.similarity_search("你的查询内容") for result in results: print(f"内容:{result.page_content}") print(f"来源:{result.metadata.get('source', '未知来源')}") print("---")
注意事项
- 如果你的原始数据是从文件/网页批量导入的,确保在加载阶段就把来源信息提取出来并加入
metadata - 元数据字段名可以自定义,比如用
url、doc_id等,只要保持前后一致即可
内容的提问来源于stack exchange,提问作者CAB
相关产品推荐
相关产品推荐

