nar*_*ssa 2 python openai-api langchain chromadb py-langchain
import os
from langchain.llms import OpenAI
import bs4
import langchain
from langchain import hub
from langchain.document_loaders import UnstructuredFileLoader
from langchain.embeddings import OpenAIEmbeddings
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.vectorstores import Chroma
os.environ["OPENAI_API_KEY"] = "KEY"
loader = UnstructuredFileLoader(
'path_to_file'
)
docs = loader.load()
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=1000, chunk_overlap=200, add_start_index=True
)
all_splits = text_splitter.split_documents(docs)
vectorstore = Chroma.from_documents(documents=all_splits, embedding=OpenAIEmbeddings())
retriever = vectorstore.as_retriever(search_type="similarity", search_kwargs={"k": 6})
retrieved_docs = retriever.get_relevant_documents(
"What is X?"
)
Run Code Online (Sandbox Code Playgroud)
这将返回:
[Document(page_content="...", metadata={'source': 'path_to_text', 'start_index': 16932}),
Document(page_content="...", metadata={'source': 'path_to_text', 'start_index': 16932}),
Document(page_content="...", metadata={'source': 'path_to_text', 'start_index': 16932}),
Document(page_content="...", metadata={'source': 'path_to_text', 'start_index': 16932}),
Document(page_content="...", metadata={'source': 'path_to_text', 'start_index': 16932}),
Document(page_content="...", metadata={'source': 'path_to_text', 'start_index': 16932})]
Run Code Online (Sandbox Code Playgroud)
这看起来都是同一份文件。
当我第一次在 Google Colab/Jupyter Notebook 中运行这段代码时,它返回了不同的文档......当我运行更多时,它开始返回相同的文档。让我觉得这是一个数据库问题,每次运行时都会将相同的条目插入数据库中。
如何返回 6 份不同的唯一文档?
问题在这里:
Chroma.from_documents(documents=all_splits, embedding=OpenAIEmbeddings())
Run Code Online (Sandbox Code Playgroud)
每次执行该文件时,都会将相同的文档插入数据库中。
如果您从同一文件插入,则可以注释掉该部分代码。或者您可以使用EmbeddingsRedundantFilter检测相似的向量
通过比较嵌入来删除冗余文档的过滤器。
| 归档时间: |
|
| 查看次数: |
746 次 |
| 最近记录: |