基于DeepSeek和Chroma構建個性化知識庫的最佳實踐
更新時間 2025-03-05 15:31:16
最近更新時間: 2025-03-05 15:31:16
分享文章
前言——私有知識庫作用簡介
大模型私有知識庫,作為大語言模型技術與企業、組織自有數據深度融合的創新知識管理及應用解決方案,能夠為特定用戶群體提供更為精準、專業且安全的知識服務。具體來講,它是借助大語言模型搭建而成,專門為特定組織或個人定制的知識存儲與檢索系統。此系統會對組織內部的專業知識、業務數據、歷史文檔等各類信息進行深度整合與精細化處理,從而構建出獨一無二的專屬知識集合。依托大模型強大的語言理解與生成能力,用戶能夠在此基礎上實現高效的知識查詢與問答交互。
在本教程中,我們將為您詳細介紹一種基于開源框架的私有知識庫搭建方案。利用該方案,您可以在本地便捷地搭建起相應的私有知識庫,大幅提升文本檢索能力。
教程使用配置說明: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)
綜上,您成功構建了一個定制化的私有知識庫檢索模型。
注意對應文本數據需要與運行腳本在同一目錄
返回DeepSeek專題導航。