5分钟搭建个人AI知识库,支持PDF与网页问答
概述
本教程将指导您利用现有工具在5分钟内搭建一个个人AI知识库,支持PDF文件和网页内容的智能问答。无需编程基础,只需按照以下步骤操作即可。
准备工作
您需要一个OpenAI API密钥(或其他大语言模型API)和一个向量数据库服务。本教程使用LangChain和ChromaDB作为示例。
所需工具
- Python 3.8以上环境
- OpenAI API密钥
- pip包管理器
第一步:安装依赖
打开终端,执行以下命令安装所需Python库:
pip install langchain openai chromadb pypdf2 tiktoken第二步:编写核心代码
创建一个Python文件,例如ai_knowledge_base.py,并输入以下代码:
from langchain.document_loaders import PyPDFLoader, WebBaseLoaderfrom langchain.text_splitter import RecursiveCharacterTextSplitterfrom langchain.embeddings import OpenAIEmbeddingsfrom langchain.vectorstores import Chromafrom langchain.chains import RetrievalQAfrom langchain.llms import OpenAIimport osos.environ["OPENAI_API_KEY"] = "your-api-key"def load_pdf(file_path): loader = PyPDFLoader(file_path) documents = loader.load() return documentsdef load_web(url): loader = WebBaseLoader(url) documents = loader.load() return documentsdef create_knowledge_base(documents): text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200) texts = text_splitter.split_documents(documents) embeddings = OpenAIEmbeddings() vectorstore = Chroma.from_documents(texts, embeddings) return vectorstoredef ask_question(vectorstore, question): qa = RetrievalQA.from_chain_type(llm=OpenAI(), chain_type="stuff", retriever=vectorstore.as_retriever()) answer = qa.run(question) return answer注意:将your-api-key替换为您的OpenAI API密钥。
第三步:运行与测试
在同一个文件中添加以下测试代码:
if __name__ == "__main__": # 加载PDF文件 pdf_docs = load_pdf("example.pdf") # 加载网页 web_docs = load_web("https://example.com") # 合并文档 all_docs = pdf_docs + web_docs # 创建知识库 vectorstore = create_knowledge_base(all_docs) # 提问 question = "文章的主要内容是什么?" answer = ask_question(vectorstore, question) print(answer)执行脚本:
python ai_knowledge_base.py您将看到AI基于PDF和网页内容给出的答案。
第四步:扩展与优化
您可以添加更多功能:
- 支持更多文件格式:使用
UnstructuredFileLoader加载Word、PPT等。 - 添加对话记忆:使用
ConversationBufferMemory实现多轮对话。 - 构建Web界面:使用Streamlit或Gradio快速创建前端。
使用Streamlit的示例
pip install streamlit创建一个app.py文件:
import streamlit as stfrom ai_knowledge_base import *st.title("个人AI知识库")
st.sidebar.header("上传文件")
uploaded_file = st.sidebar.file_uploader("选择PDF文件", type="pdf")
url = st.sidebar.text_input("输入网页URL")
if st.sidebar.button("构建知识库"):
docs = []
if uploaded_file:
with open("temp.pdf", "wb") as f:
f.write(uploaded_file.getbuffer())
docs += load_pdf("temp.pdf")
if url:
docs += load_web(url)
if docs:
vectorstore = create_knowledge_base(docs)
st.session_state.vectorstore = vectorstore
st.success("知识库构建完成!")
question = st.text_input("输入您的问题")
if question and "vectorstore" in st.session_state:
answer = ask_question(st.session_state.vectorstore, question)
st.write(answer)运行命令:streamlit run app.py
总结
通过以上步骤,您已经成功搭建了一个支持PDF和网页问答的个人AI知识库。整个过程不超过5分钟,且无需复杂配置。您可以根据需要扩展功能,如添加更多文档源、优化答案质量等。
提示:使用自己的API密钥时请妥善保管,避免泄露。