大模型实战 P21 LangChain之文档检索问答
前面课程给大家介绍了文档分割,也讲了问答的流程。接下来,就是把这两块结合起来,做一个完整的文档检索问答功能。
代码示例
1、创建文件
# langchian_12_retrieval.py from langchain.chat_models import ChatOpenAI from dotenv import load_dotenv load_dotenv() llm = ChatOpenAI(model='gpt-3.5-turbo-1106')
2、加载并分割文档
# 加载文档并分割 from langchain.text_splitter import RecursiveCharacterTextSplitter from langchain.document_loaders import PyMuPDFLoader loader = PyMuPDFLoader('./data/about.pdf') text_splitter = RecursiveCharacterTextSplitter( chunk_size=50, chunk_overlap=10 ) documents = loader.load_and_split(text_splitter) # print(len(documents))
3、召回相似片段
# 召回相似片段 from langchain.embeddings import OpenAIEmbeddings from langchain.vectorstores.faiss import FAISS embedding = OpenAIEmbeddings(model='text-embedding-ada-002') documents_db = FAISS.from_documents(documents, embedding) question = '陈华编程是什么?' retrieval_ducuments = documents_db.similarity_search(question, k=3)
4、基于召回片段回答问题
# 基于召回片段问答 from langchain.chains.question_answering import load_qa_chain chain = load_qa_chain(llm=llm, chain_type='stuff', verbose=True) result = chain.run(input_documents=retrieval_ducuments, question=question) print(result)
好的,基于文档检索问答的功能,就讲完了,但是还存在一个小问题,就是每次提交问题,都需要重新加载文档,然后向量化,这个流程是不太合理的。所以,下节课我们讲,把向量化之后的文档缓存下来,这样就不用每次都重新加载了。
本文链接:http://edu.ichenhua.cn/edu/note/700
版权声明:本文为「陈华编程」原创课程讲义,请给与知识创作者起码的尊重,未经许可不得传播或转售!