基于DeepSeek和Chroma构建个性化知识库的最佳实践 加载 PDF 文档 file"DeepSeek.pdf" loader PDFPlumberLoader(file) docs loader.load() 分割文档,分割参数会影响推理准确性 textsplitter RecursiveCharacterTextSplitter(chunksize500, chunkoverlap0) allsplits textsplitter.splitdocuments(docs) 创建向量存储 localembeddings OllamaEmbeddings(model"deepseekr1:1.5b") vectorstore Chroma.fromdocuments(documentsallsplits, embeddinglocalembeddings) 初始化模型 model ChatOllama( model"deepseekr1:1.5b", ) 定义摘要提示模板 summaryprompt ChatPromptTemplate.fromtemplate( "总结这些检索到的文档中的主要主题:{docs}" ) 将传入的文档转换成字符串的形式 def formatdocs(docs): return "nn".join(doc.pagecontent for doc in docs) 创建摘要链 summarychain {"docs": formatdocs} summaryprompt model StrOutputParser() 定义问题 question "DeepSeek 项目的目的是什么?" 检索相关文档 docs vectorstore.similaritysearch(question) 生成摘要 summary summarychain.invoke(docs) print("检索到的文档摘要:", summary) 定义提示模板 RAGTEMPLATE """ 你是一个问答助手。请使用以下检索到的上下文信息来回答问题。如果你不知道答案,请直接说不知道。答案最多使用三句话,并保持简洁。 {context} 回答以下问题: {question} """ ragprompt ChatPromptTemplate.fromtemplate(RAGTEMPLATE) 获取检索器 retriever vectorstore.asretriever() 创建问答链 qachain ( {"context": retriever formatdocs, "question": RunnablePassthrough()} ragprompt model StrOutputParser() )