Milvus(opens in a new tab) 是一个存储、索引和管理由深度神经网络和其他机器学习(ML)模型生成的大规模嵌入向量的数据库。
1.文档分割
from langchain.document_loaders import PyPDFLoader
'''
pdf
'''
loader = PyPDFLoader("D:\py\LangChaindao\操作系统原理.pdf")
docs = loader.load()
# 将文档拆分成更小的块
text_splitter = CharacterTextSplitter(chunk_size=1024, chunk_overlap=0)
docs = text_splitter.split_documents(docs)
from langchain.document_loaders import WebBaseLoader
'''
网页1
'''
loader = WebBaseLoader([
#"https://zhuanlan.zhihu.com/p/105945721",
# "https://www.zhihu.com/question/382955637",
"https://baike.baidu.com/item/%e6%93%8d%e4%bd%9c%e7%b3%bb%e7%bb%9f/192"
])
docs = loader.load()
# 将文档拆分成更小的块
text_splitter = CharacterTextSplitter(chunk_size=1024, chunk_overlap=0)
docs = text_splitter.split_documents(docs)
2.使用嵌入 向量化存储+查找
目标是从我们的长文本中选择相关的块,但是我们要提取哪些块?最流行的方法是基于比较向量嵌入来提取相似的文本。
使用 OpenAIEmbeddings
def fun(docs):
# 设置一个嵌入模型,将文档块转换为向量嵌入。
embeddings = OpenAIEmbeddings(engine="text-embedding-ada-002")
# print(embeddings)
# 设置用于保存矢量嵌入的矢量存储。这里我们使用Milvus作为向量存储。
Milvus.from_documents(
docs,
embedding=embeddings,
connection_args={"host": HOST, "port": PORT}
)
3.问答 向量化查询与返回topK
embeddings = OpenAIEmbeddings(engine="text-embedding-ada-002")
vector_store = Milvus.from_documents(
"",
embedding=embeddings,
connection_args={"host": HOST, "port": PORT}
)
query = "操作系统的发展历程?"
docs = vector_store.similarity_search(query)
print(docs)
topK
related_docs_with_score = vector_store.similarity_search_with_score(query,k=self.top_k)
4 .相关文档 以提示词的方式给openai 然后结合回答
chain = load_qa_with_sources_chain(AzureOpenAI(deployment_name=model, model_name="gpt-35-turbo", temperature=0),
chain_type="map_reduce", return_intermediate_steps=True)
query = "操作系统的发展历程?"
# 包括intermediate_steps和output_text。前者指示搜索期间引用的文档,后者是问题的最终答案
data = chain({"input_documents": docs, "question": query}, return_only_outputs=False)
print(data)
来源:
1.[LangChain 🦜️🔗 中文网]https://www.langchain.com.cn/modules/indexes/vectorstores/examples/milvus
2.[用 LangChain 和 Milvus 从零搭建 LLM 应用]https://zhuanlan.zhihu.com/p/644603736