什么是 RAG ?

贅述一下基本概念,檢索增強(qiáng)生成(Retrieval-Augmented Generation,簡(jiǎn)稱(chēng) RAG)是一種結(jié)合信息檢索和生成式 AI 的技術(shù)架構(gòu)。RAG 通過(guò)從外部知識(shí)庫(kù)(如文檔、數(shù)據(jù)庫(kù))中檢索相關(guān)信息,并將其作為上下文輸入給 LLM(大型語(yǔ)言模型),從而提高回答的準(zhǔn)確性,減少幻覺(jué)問(wèn)題。

我們的目標(biāo)是在本地運(yùn)行一個(gè) RAG 系統(tǒng),能夠處理 PDF 文檔,保障數(shù)據(jù)隱私,并能高效回答與文檔內(nèi)容相關(guān)的問(wèn)題。當(dāng)然,通過(guò)修改代碼,我們也可以實(shí)現(xiàn)處理其他類(lèi)型的數(shù)據(jù)。

所需技術(shù)棧

本文使用了多個(gè)開(kāi)源工具和框架

使用過(guò)程

1、安裝必要的工具

首先,確保你已經(jīng)安裝了 Python 3.8+,然后安裝 Ollama:

curl -fsSL https://ollama.com/install.sh | sh

然后在命令行中使用下面的命令下載 DeepSeek-R1 模型和 mxbai-embed-large 詞向量模型

ollama pull deepseek/deepseek-r1
ollama pull mxbai-embed-large

2、設(shè)置 Python 項(xiàng)目環(huán)境

克隆 GitHub 倉(cāng)庫(kù)并安裝依賴(lài):

git clone https://github.com/paquino11/chatpdf-rag-deepseek-r1
cd chatpdf-rag-deepseek-r1
python -m venv venv
source venv/bin/activate # Windows 用戶(hù)使用 venv\Scripts\activate pip install -r requirements.txt

提示:如果遇到類(lèi)似的錯(cuò)誤提示
note: This error originates from a subprocess, and is likely not a problem with pip.
ERROR: Failed building wheel for pyarrow
可以使用下面的命令升級(jí)pip后嘗試

python3 -m pip install --upgrade pip

3、運(yùn)行應(yīng)用

按照步驟2操作完成后,我們就可以啟動(dòng)項(xiàng)目了,啟動(dòng)命令

streamlit run app.py

因?yàn)槲沂褂玫哪P秃痛a中使用的模型不一致,所以這里我首先要修改一下模型名稱(chēng),打開(kāi)項(xiàng)目源碼文件rag.py,修改模型名稱(chēng)為deepseek-r1:1.5b,同理我們也可以修改embedding模型:

def __init__(self, llm_model: str = "deepseek-r1:1.5b", embedding_model: str = "mxbai-embed-large"):

啟動(dòng)結(jié)果

啟動(dòng)后,一般會(huì)自動(dòng)打開(kāi)瀏覽器頁(yè)面,如果沒(méi)有自動(dòng)打開(kāi)瀏覽器,也可以手動(dòng)訪(fǎng)問(wèn):http://localhost:8501

應(yīng)用功能介紹

支持用戶(hù)上傳 PDF 文檔,系統(tǒng)會(huì)自動(dòng)解析并向量化存儲(chǔ)。

用戶(hù)輸入問(wèn)題,系統(tǒng)會(huì)從向量數(shù)據(jù)庫(kù)中檢索相關(guān)段落,并結(jié)合 LLM 生成回答。

所有處理過(guò)程均在本地完成,數(shù)據(jù)不會(huì)上傳到云端,確保敏感信息安全。

源碼解析

我們簡(jiǎn)單分析一下源碼,其核心代碼rag.py解析如下

1、初始化 ChatPDF 類(lèi)

def __init__(self, llm_model: str = "deepseek-r1:latest", embedding_model: str = "mxbai-embed-large"):

2、文檔攝取(Ingest)

def ingest(self, pdf_file_path: str):

3、問(wèn)答(Ask)

def ask(self, query: str, k: int = 5, score_threshold: float = 0.2):

本文章轉(zhuǎn)載微信公眾號(hào)@AI牛碼

上一篇:

Istio 使用 GatewayAPI實(shí)現(xiàn)流量管理

下一篇:

深度學(xué)習(xí)入門(mén):萬(wàn)字長(zhǎng)文帶你回顧RCNN,帶你了解Fast RCNN到Faster RCNN
#你可能也喜歡這些API文章!

我們有何不同?

API服務(wù)商零注冊(cè)

多API并行試用

數(shù)據(jù)驅(qū)動(dòng)選型,提升決策效率

查看全部API→
??

熱門(mén)場(chǎng)景實(shí)測(cè),選對(duì)API

#AI文本生成大模型API

對(duì)比大模型API的內(nèi)容創(chuàng)意新穎性、情感共鳴力、商業(yè)轉(zhuǎn)化潛力

25個(gè)渠道
一鍵對(duì)比試用API 限時(shí)免費(fèi)

#AI深度推理大模型API

對(duì)比大模型API的邏輯推理準(zhǔn)確性、分析深度、可視化建議合理性

10個(gè)渠道
一鍵對(duì)比試用API 限時(shí)免費(fèi)