前言——私有知识库作用简介
大模型私有知识库,作为大语言模型技术与企业、组织自有数据深度融合的创新知识管理及应用解决方案,能够为特定用户群体提供更为精准、专业且安全的知识服务。具体来讲,它是借助大语言模型搭建而成,专门为特定组织或个人定制的知识存储与检索系统。此系统会对组织内部的专业知识、业务数据、历史文档等各类信息进行深度整合与精细化处理,从而构建出独一无二的专属知识集合。依托大模型强大的语言理解与生成能力,用户能够在此基础上实现高效的知识查询与问答交互。
在本教程中,我们将为您详细介绍一种基于开源框架的私有知识库搭建方案。利用该方案,您可以在本地便捷地搭建起相应的私有知识库,大幅提升文本检索能力。
教程使用配置说明:C7通用型云主机
cpu 8核
内存 32G
优势
知识准确性:让模型访问定制的信息,从而提高回答的准确性和可靠性。
可解释性:检索过程可以明确指出回答所依据的信息来源,增强了回答的可解释性。
减少幻觉:降低了语言模型生成无事实依据内容(即“幻觉”)的可能性。
一、deepseek自部署
请参考在天翼云使用Ollama运行 DeepSeek的最佳实践-7b版-弹性云主机-最佳实践-AIGC实践 - 天翼云 --自定义部署DeepSeek。
二、私有知识仓库构建
1、 安装向量数据库
a)检查python环境是否存在,不存在可参考安装
# 检查是否存在python
python --version
# 安装python环境
apt install python3
b)安装向量数据库及与 ollama 交互的组件
# 安装 Chroma 向量数据库,基于langchain开源框架解析文本
pip install langchain_chroma
# 安装 Ollama 交互库
pip install langchain_ollama
# 安装 langchain_community 库
pip install langchain langchain_community
2、安装文本解析插件,这里以pdf进行示例
pip install pdfplumber
3、基于私有数据开展模型对话
图中使用的模型对话脚本如下,仅供参考:
from langchain_community.document_loaders import PDFPlumberLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_chroma import Chroma
from langchain_ollama import OllamaEmbeddings, ChatOllama
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables import RunnablePassthrough
# 加载 PDF 文档
file="DeepSeek.pdf"
loader = PDFPlumberLoader(file)
docs = loader.load()
# 分割文档,分割参数会影响推理准确性
text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=0)
all_splits = text_splitter.split_documents(docs)
# 创建向量存储
local_embeddings = OllamaEmbeddings(model="deepseek-r1:1.5b")
vectorstore = Chroma.from_documents(documents=all_splits, embedding=local_embeddings)
# 初始化模型
model = ChatOllama(
model="deepseek-r1:1.5b",
)
# 定义摘要提示模板
summary_prompt = ChatPromptTemplate.from_template(
"总结这些检索到的文档中的主要主题:{docs}"
)
# 将传入的文档转换成字符串的形式
def format_docs(docs):
return "\n\n".join(doc.page_content for doc in docs)
# 创建摘要链
summary_chain ={"docs": format_docs}| summary_prompt | model | StrOutputParser()
# 定义问题
question ="DeepSeek 项目的目的是什么?"
# 检索相关文档
docs = vectorstore.similarity_search(question)
# 生成摘要
summary = summary_chain.invoke(docs)
print("检索到的文档摘要:", summary)
# 定义提示模板
RAG_TEMPLATE ="""
你是一个问答助手。请使用以下检索到的上下文信息来回答问题。如果你不知道答案,请直接说不知道。答案最多使用三句话,并保持简洁。
<context>
{context}
</context>
回答以下问题:
{question}
"""
rag_prompt = ChatPromptTemplate.from_template(RAG_TEMPLATE)
# 获取检索器
retriever = vectorstore.as_retriever()
# 创建问答链
qa_chain = (
{"context": retriever | format_docs, "question": RunnablePassthrough()}
| rag_prompt
| model
| StrOutputParser()
)
# 运行问答链
answer = qa_chain.invoke(question)
print("问题的答案:", answer)
综上,您成功构建了一个定制化的私有知识库检索模型。
注意对应文本数据需要与运行脚本在同一目录