之前讲过大模型应用架构图,现在从实际应用场景代码出发,讲解如何从大文本例如文档doc,pdf文本等文本进行QA
一.核心要点:
1.embedding model
2.语义相似性检索
二.解决方案:
1.openai的embedding向量化文档
2.milvus向量数据库存储向量数据并且相似性检索
三.步骤如下:
1.安装需要的环境包(数据库客户端,langchain,openai等)
pip install --upgrade pymilvus langchain openai tiktoken
2.引入全局变量变量
from os import environ
MILVUS_HOST = "localhost" #向量数据库主机
MILVUS_PORT = "19530" ##向量数据库端口
OPENAI_API_KEY = "sk-******" # example: "sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 自己申请的openai申请key,token使用量使用tiktoken计算
environ["OPENAI_API_KEY"] = OPENAI_API_KEY
3.准备数据阶段
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.vectorstores import Milvus
from langchain.document_loaders import WebBaseLoader
from langchain.text_splitter import CharacterTextSplitter
#引入webload加载一篇网络文章
loader = WebBaseLoader([
"https://milvus.io/docs/overview.md",
])
docs = loader.load()
#按照1024大小切分
text_splitter = CharacterTextSplitter(chunk_size=1024, chunk_overlap=0)
docs = text_splitter.split_documents(docs)
4.向量化步骤3的数据
#使用openai的text-embedding-ada-002
embeddings = OpenAIEmbeddings(model="text-embedding-ada-002")
#向量化存储到mivlus向量数据库里
vector_store = Milvus.from_documents(
docs,
embedding=embeddings,
connection_args={"host": MILVUS_HOST, "port": MILVUS_PORT}
)
5.开启相似性检索查询样例
query = "What is milvus?"
#根据语义相似度最高topk返回
docs = vector_store.similarity_search(query)
print(docs)
6.集成langchain进行qa
#引入相关langchain的包
from langchain.chains.qa_with_sources import load_qa_with_sources_chain
from langchain.llms import OpenAI
#采用mr进行
chain = load_qa_with_sources_chain(OpenAI(temperature=0), chain_type="map_reduce", return_intermediate_steps=True)
query = "What is Milvus?"
chain({"input_documents": docs, "question": query}, return_only_outputs=True)
本文暂时没有评论,来添加一个吧(●'◡'●)