自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

基于 DeepSeek R1 和 Ollama 開發(fā) RAG 系統(tǒng) 原創(chuàng)

發(fā)布于 2025-2-3 17:25
瀏覽
0收藏

今天,我們探討一下如何利用目前最受歡迎的開源推理工具 DeepSeek R1 和輕量級的本地AI模型執(zhí)行框架 Ollama,來構建一個功能強大的 RAG (Retrieval-Augmented Generation)系統(tǒng)。

1、DeepSeek R1:RAG 系統(tǒng)的卓越之選

DeepSeek R1,被譽為開啟 AI 推理新時代的開源先鋒,在構建 RAG 系統(tǒng)方面表現(xiàn)卓越,擁有眾多引人注目的優(yōu)勢,成為開發(fā)者不可或缺的利器。相較于OpenAI 的 o1 模型,DeepSeek R1 在性能上與之媲美,但成本卻大幅下降,僅占 o1 的 5%,這一經(jīng)濟性使得更廣泛的開發(fā)者和企業(yè)能夠輕松采用,推動了 RAG 技術的普及。

在信息檢索方面,DeepSeek R1 展現(xiàn)了其卓越的專注力。在生成答案的過程中,僅需引用3個文檔片段,便能精確提煉關鍵信息,有效排除了無關內容的干擾,顯著提高了檢索效率和回答的精確度。這一特性使得即便在處理大量文檔時,系統(tǒng)也能迅速鎖定關鍵內容,向用戶提供簡潔而高效的答案。

基于 DeepSeek R1 和 Ollama 開發(fā) RAG 系統(tǒng)-AI.x社區(qū)

面對復雜問題或不確定答案的情況,DeepSeek R1 的嚴格提示機制發(fā)揮了關鍵作用。與其他模型可能隨意生成答案不同,DeepSeek R1 在不確定時會坦白回答“我不知道”,這種嚴謹性有效防止了幻覺現(xiàn)象,確保了答案的真實性和可靠性,讓用戶獲得值得信賴的信息。

對于眾多開發(fā)者而言,數(shù)據(jù)安全和快速響應是極為重要的考量。DeepSeek R1 支持本地化運行,無需依賴云端 API,這不僅減少了網(wǎng)絡延遲帶來的問題,還使用戶能夠在本地環(huán)境中安全處理敏感數(shù)據(jù),無需擔心數(shù)據(jù)泄露的風險,為特定行業(yè)和場景的應用提供了強有力的支持。

2、Ollama:本地模型運行的理想框架

Ollama,作為一個輕量級框架,為本地運行 AI 大模型提供了一個便捷且高效的平臺,成為構建本地 RAG 系統(tǒng)的重要組成部分。它的推出,使得開發(fā)者能夠減少對云端計算資源的依賴,輕松在本地設備上部署和執(zhí)行模型,顯著降低了開發(fā)與部署的成本,并增強了系統(tǒng)的獨立性和數(shù)據(jù)隱私保護。

在 Ollama 上下載和安裝模型的過程異常簡便。以 DeepSeek R1 模型為例,開發(fā)者只需在終端輸入幾條簡單的命令即可完成。例如,要運行默認的7B模型,只需執(zhí)行“ollama run deepseek-r1”命令;而若想體驗適用于輕量級 RAG 應用場景的1.5B模型,則運行“ollama run deepseek-r1:1.5b”命令即可。這種簡便的操作流程,讓即便是技術背景較淺的開發(fā)者也能迅速掌握,開始 RAG 系統(tǒng)的開發(fā)工作。

Ollama 支持多種 AI 大模型,為開發(fā)者提供了廣泛的選擇余地。這些模型在性能、適用場景和資源需求上各有特點,開發(fā)者可以根據(jù)項目的具體需求,靈活選擇最合適的模型,以達到系統(tǒng)性能的最優(yōu)化和資源的有效配置。不論是追求更強的推理性能還是注重資源的高效使用,Ollama 都能迎合開發(fā)者的多元需求。

3、構建本地 RAG 系統(tǒng)的詳細步驟

第一步:導入必要的庫

?在構建 RAG 系統(tǒng)時,需要利用一系列強大的庫來執(zhí)行不同的功能。LangChain 庫在文檔處理和檢索方面表現(xiàn)卓越,它提供了眾多的工具和接口,能夠簡化文檔的加載、文本的分段、嵌入的生成以及檢索等復雜流程;而 Streamlit 庫則專注于創(chuàng)建易于使用的 Web 界面,使用戶能夠輕松地與系統(tǒng)互動,提交問題并接收答案。同時,構建過程中還涉及到 PDFPlumberLoader,它用于高效地從 PDF 文件中抽取文本;SemanticChunker 則用于智能地將文本劃分為有意義的語義單元;HuggingFaceEmbeddings 用于生成文本的向量表示;FAISS 用于構建可搜索的向量數(shù)據(jù)庫;以及 Ollama,它用于與本地運行的 DeepSeek R1 模型進行交互。這些庫的集成,為系統(tǒng)的后續(xù)構建打下了堅實的基礎。

import streamlit as st  
from langchain_community.document_loaders import PDFPlumberLoader  
from langchain_experimental.text_splitter import SemanticChunker  
from langchain_community.embeddings import HuggingFaceEmbeddings  
from langchain_community.vectorstores import FAISS  
from langchain_community.llms import Ollama

第二步:上傳與處理 PDF 文件

通過 Streamlit 提供的文件上傳功能,用戶能夠輕松地挑選并上傳本地 PDF 文件。文件上傳成功后,系統(tǒng)會將其內容暫存為“temp.pdf”的臨時文件,以備后續(xù)操作使用。隨后,利用 PDFPlumberLoader 庫,可以迅速且精確地從 PDF 文件中提取文本,免去了開發(fā)者手動執(zhí)行復雜文本解析的麻煩(ParseStudio:通過統(tǒng)一語法簡化 PDF 文檔解析流程)。這一步驟既高效又精確,保障了系統(tǒng)能夠全面地獲取文檔信息,為后續(xù)的文本處理和分析提供了穩(wěn)定的數(shù)據(jù)基礎。

# Streamlit file uploader  
uploaded_file = st.file_uploader("Upload a PDF file", type="pdf")  


if uploaded_file:  
    # Save PDF temporarily  
    with open("temp.pdf", "wb") as f:  
        f.write(uploaded_file.getvalue())  


    # Load PDF text  
    loader = PDFPlumberLoader("temp.pdf")  
    docs = loader.load()

第三步:策略性分割文件

將提取的文本劃分為適當?shù)恼Z義單元是提升檢索效率和回答準確性的關鍵所在。(檢索增強生成(RAG)的創(chuàng)新性分塊策略)。使用 SemanticChunker 配合 HuggingFaceEmbeddings,可以根據(jù)文本的語義內容智能地進行分割。這種方法不僅關注文本的篇幅,更重要的是它能夠將語義上相關的內容歸入同一單元,從而在檢索和生成回答階段,使模型能夠更深入地理解上下文,給出更加邏輯性和語義連貫的回應。例如,在處理技術文檔時,這種方法能夠將涉及同一技術概念的段落集中在一起,便于模型精確地獲取和利用這些信息。

# Split text into semantic chunks  
text_splitter = SemanticChunker(HuggingFaceEmbeddings())  
documents = text_splitter.split_documents(docs)

第四步:創(chuàng)建可搜索的知識庫

為了達到快速且精確的檢索目的,我們需要為分割后的文本塊創(chuàng)建向量嵌入(在構建非英語RAG系統(tǒng)時,嵌入的重要性不言而喻),并將這些嵌入存儲于 FAISS 索引中。向量嵌入能夠將文本內容轉換成計算機易于操作的數(shù)值向量,從而提高文本相似度計算的效率。HuggingFaceEmbeddings 提供了強大的嵌入生成能力,能夠產(chǎn)出高質量的向量表示。FAISS 則是一個高效的向量搜索數(shù)據(jù)庫,它支持高速的相似性查詢,能夠在龐大的向量集合中迅速定位到與查詢向量最匹配的文本塊。通過設置檢索參數(shù)為“k=3”,系統(tǒng)在執(zhí)行搜索時會返回三個最相關的文本塊,這與 DeepSeek R1 模型專注于精確檢索的特性相契合,確保了系統(tǒng)能夠迅速捕捉到關鍵信息,為生成精準的回答提供了堅實的后盾。

# Generate embeddings  
embeddings = HuggingFaceEmbeddings()  
vector_store = FAISS.from_documents(documents, embeddings)  


# Connect retriever  
retriever = vector_store.as_retriever(search_kwargs={"k": 3})  # Fetch top 3 chunks

第五步:配置 DeepSeek R1 模型

當運用 DeepSeek R1 模型時,首先需要通過 Ollama 來初始化一個擁有 1.5B參數(shù)的模型實例(關于 DeepSeek-R1 的蒸餾模型及如何利用 Ollama 在本地運行 DeepSeek-R1)。接下來,需要精心構建一個提示模板,該模板的作用是指導模型生成回答。這個提示模板清晰地界定了模型回答的準則:必須基于所提供的上下文信息來作答;在答案不確定的情況下,應當回答“我不知道”;并且將回答限制在四句話以內。這樣的提示模板有助于確保模型給出的回答既精確又簡明,防止了無關信息的混入和長篇累牘的回答,從而提升了用戶的體驗。通過設置這樣的提示模板,可以確保模型在生成回答時緊密跟隨文檔內容,最大限度地發(fā)揮 RAG 系統(tǒng)的長處。

llm = Ollama(model="deepseek-r1:1.5b")  # Our 1.5B parameter model  


# Craft the prompt template  
prompt = """  
1. Use ONLY the context below.  
2. If unsure, say "I don’t know".  
3. Keep answers under 4 sentences.  


Context: {context}  


Question: {question}  


Answer:  
"""  
QA_CHAIN_PROMPT = PromptTemplate.from_template(prompt)

第六步:組裝 RAG 鏈

將文檔上傳、文本分割、檢索以及模型回答等多個步驟融合為一,構建出一個連貫的 RAG 流程。利用 LLMChain和StuffDocumentsChain 的結合,將檢索到的文檔塊與提示模板相融合,使得模型能夠依據(jù)上下文生成相應的回答。RetrievalQA 則將檢索與回答環(huán)節(jié)緊密結合,打造出最終的 RAG 處理管道。這種架構設計使得系統(tǒng)能夠自動執(zhí)行從接收用戶提問、檢索相關文檔塊到生成回答的一系列任務,實現(xiàn)了信息處理的高度自動化和智能化,為用戶帶來了順暢的問答互動。

# Chain 1: Generate answers  
llm_chain = LLMChain(llm=llm, prompt=QA_CHAIN_PROMPT)  


# Chain 2: Combine document chunks  
document_prompt = PromptTemplate(  
    template="Context:\ncontent:{page_content}\nsource:{source}",  
    input_variables=["page_content", "source"]  
)  


# Final RAG pipeline  
qa = RetrievalQA(  
    combine_documents_chain=StuffDocumentsChain(  
        llm_chain=llm_chain,  
        document_prompt=document_prompt  
    ),  
    retriever=retriever  
)

第七步:啟動 Web 界面

借助 Streamlit 搭建的 Web 界面,用戶可以直接在輸入框中輸入問題,與系統(tǒng)進行交互。當用戶提交問題后,系統(tǒng)會迅速檢索匹配的文本塊,并將其輸入到 DeepSeek R1 模型中進行分析和生成回答?;卮鸾Y果會實時顯示在頁面上,讓用戶能夠快速獲取所需信息。在用戶等待回答的過程中,Streamlit 的加載提示功能會顯示 “Thinking...”,告知用戶系統(tǒng)正在處理請求,提升了用戶體驗的友好性和交互性。通過這個 Web 界面,RAG 系統(tǒng)變得更加易用,即使是非技術人員也能輕松使用,大大拓寬了系統(tǒng)的應用范圍。?

# Streamlit UI  
user_input = st.text_input("Ask your PDF a question:")  


if user_input:  
    with st.spinner("Thinking..."):  
        response = qa(user_input)["result"]  
        st.write(response)

利用 DeepSeek R1和 Ollama 來構建 RAG 系統(tǒng),為開發(fā)者帶來了一種高效、經(jīng)濟且安全穩(wěn)定的解決方案。通過詳盡的操作指南和技術資源,開發(fā)者可以迅速構建出符合自己需求的智能問答系統(tǒng),從而充分發(fā)掘文檔數(shù)據(jù)中的潛在價值。


本文轉載自公眾號玄姐聊AGI  作者:玄姐

原文鏈接:??https://mp.weixin.qq.com/s/tK877T8rS0PYNHNCSVvUwA??

?著作權歸作者所有,如需轉載,請注明出處,否則將追究法律責任
標簽
收藏
回復
舉報
回復
相關推薦