目錄
- 前言
- 一.大語言模型(LLM)
- 1. 什么是LLM?
- 2. LLM 的能力與特點
- 二、增強檢索生成(RAG)
- 三. 什么是 LangChain?
- 1. LangChain 的核心功能
- 2. LangChain 的優勢
- 3. LangChain 的應用場景
- 4. 總結
- 四.使用 LangChain 實現基于 PDF 的問答系統
前言
本文將介紹 LLM 和 RAG 的基本概念,并通過一個實際的代碼示例,展示如何使用 LangChain 構建一個基于 PDF 文檔的問答系統。
提示:以下是本篇文章正文內容,下面案例可供參考
一.大語言模型(LLM)
1. 什么是LLM?
LLM,即大型語言模型(Large Language Model),是一種基于深度學習的自然語言處理模型。它通過海量文本數據的訓練,學習語言的統計規律和語義信息,從而能夠理解和生成人類語言。近年來,隨著計算能力的提升和數據量的爆炸式增長,LLM 取得了突破性進展,例如 OpenAI 的 GPT 系列、Google 的 LaMDA 和 PaLM 等。
2. LLM 的能力與特點
LLM 擁有強大的語言理解和生成能力,其特點主要體現在以下幾個方面:
- 強大的文本生成能力: LLM 能夠生成流暢、連貫、語法正確的文本,包括新聞、故事、詩歌、代碼等多種形式。例如,GPT-3 可以生成高質量的新聞報道,甚至可以模仿特定作家的寫作風格。
- 廣泛的語言理解能力: LLM 能夠理解人類語言的語義、語境和情感,并完成問答、翻譯、摘要等任務。例如,LaMDA 可以進行開放域對話,并展現出一定的邏輯推理能力。
- 強大的學習能力: LLM 能夠從海量數據中學習,并不斷改進其性能。例如,通過 fine-tuning,LLM 可以適應特定領域的任務,例如醫療、法律等。
- 可擴展性強: LLM 的規模越大,其性能通常也越強。隨著計算資源的不斷提升,LLM 的潛力也將不斷被挖掘。
二、增強檢索生成(RAG)
檢索增強生成(Retrieval-Augmented Generation, RAG)是一種結合檢索和生成的技術,能夠從外部知識庫中檢索相關信息,并將其作為上下文輸入到生成模型中。RAG的流程圖如下所示。
我將RAG 的核心思想概括為以下三個步驟:
- 知識準備階段:先通過嵌入(embedding)模型將文檔、圖片或其他格式的數據轉為向量格式,然后創建向量存儲索引,將文本或其他信息與向量對應起來。最后存到外部知識庫中。
- 查詢階段:根據用戶的問題,從向量數據庫中檢索最相關的信息并返回。
- 生成階段:將檢索到的信息作為上下文,輸入到生成(generate)模型中,生成最終的回答。
RAG 的優勢
動態知識更新:通過檢索外部知識庫,RAG 可以實時獲取最新信息。
減少幻覺問題:生成模型的回答基于檢索到的真實信息,減少了錯誤生成的可能性。
擴展性強:可以輕松集成多種數據源(如 PDF、網頁、數據庫)。
三. 什么是 LangChain?
LangChain 是一個用于構建基于大語言模型(LLM)應用的框架。它提供了一套模塊化的工具和抽象層,幫助開發者更高效地構建復雜的 LLM 應用。無論是問答系統、對話機器人,還是自動化任務,LangChain 都能顯著簡化開發流程。
1. LangChain 的核心功能
LangChain 的核心功能包括:
- 任務鏈(Chains):支持將多個任務(如檢索、生成、工具調用)串聯起來,形成復雜的任務鏈。提供了多種預定義鏈(如 RetrievalQA、ConversationalRetrievalChain),簡化常見任務的開發。
- 模型抽象:提供統一的接口,支持多種 LLM 提供商(如 OpenAI、Hugging Face、Anthropic 等)。支持將多個 LLM 調用串聯起來,形成復雜的任務鏈(Chain)。
- 上下文管理:提供多種記憶模塊(如 ConversationBufferMemory、ConversationSummaryMemory),用于管理多輪對話的上下文。自動維護對話歷史,確保 LLM 能夠基于上下文生成連貫的回答。
- 檢索增強:支持從多種數據源(如 PDF、網頁、數據庫)加載文檔。集成了多種向量數據庫(如 FAISS、Pinecone、Weaviate),用于存儲和檢索文檔嵌入。提供了基于向量檢索的接口,方便開發者實現檢索增強生成(RAG)。
- 工具集成:支持將外部工具(如搜索引擎、API、數據庫)與 LLM 結合,擴展 LLM 的能力。提供了代理框架,允許 LLM 根據任務動態選擇工具并執行操作。
綜上,LangChain 的特點:
- 強大的任務鏈功能,支持將多個任務串聯起來,形成復雜的任務流。例如:RAG和多步推理。
- 模塊化設計,開發者可以根據需求自由組合。
- 多種記憶模塊,用于管理對話歷史和多輪上下文。
- 代理框架,允許 LLM 根據任務動態選擇工具并執行操作
- 工具集成
2. LangChain 的優勢
由Langchain的特點可見,LangChain 的優勢主要包括:
- 簡化開發流程:LangChain 提供了豐富的模塊化組件,開發者無需從頭實現 LLM 的集成、上下文管理、檢索增強等功能,可以專注于業務邏輯。
- 靈活性強:LangChain 支持多種 LLM 提供商、向量數據庫和外部工具,開發者可以根據需求靈活選擇組件。
- 擴展性強:LangChain 的模塊化設計使得它易于擴展。開發者可以輕松集成新的數據源、工具或任務鏈。
- 社區支持:LangChain 擁有活躍的社區和豐富的文檔,開發者可以快速上手并解決遇到的問題。
3. LangChain 的應用場景
LangChain的應用場景非常廣泛,涵蓋了問答系統、對話機器人、數據增強應用和自動化任務等多個領域。無論是基于文檔的智能問答、上下文感知的多輪對話,還是結合外部數據源的復雜任務自動化,LangChain都能通過其模塊化設計和強大的工具集成能力,幫助開發者快速構建高效、靈活的 LLM 應用。
4. 總結
LangChain 是一個強大的框架,能夠顯著簡化基于 LLM 應用的開發流程。它的模塊化設計、靈活性和擴展性使得它成為構建復雜 LLM 應用的理想選擇。無論是問答系統、對話機器人,還是自動化任務,LangChain 都能幫助你快速實現目標。
四.使用 LangChain 實現基于 PDF 的問答系統
前提是你已經安裝好了langchain的包
from langchain.chains import RetrievalQA
from langchain_ollama import OllamaLLM
from langchain_ollama import OllamaEmbeddings
from langchain_community.vectorstores import FAISS
from langchain_community.document_loaders import PyPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.prompts import PromptTemplateclass PDFQASystem:def __init__(self, pdf_path: str):"""初始化 PDF 問答系統。"""# 初始化 LLM 和嵌入模型self.llm = OllamaLLM(model="qwen2.5:7b")self.embeddings = OllamaEmbeddings(model="nomic-embed-text")# 加載 PDF 文件并生成嵌入向量self.vector_store = self.load_pdf_and_generate_embeddings(pdf_path)# 初始化提示模板self.prompt_template = PromptTemplate(input_variables=["context", "question"],template=("你是一個助手,幫助用戶解答問題。\n""請根據以下背景資料回答問題:\n""背景資料:\n{context}\n\n""用戶的問題:\n{question}"))# 初始化檢索增強生成鏈self.qa_chain = RetrievalQA.from_chain_type(llm=self.llm,chain_type="stuff",retriever=self.vector_store.as_retriever(),chain_type_kwargs={"prompt": self.prompt_template})def load_pdf_and_generate_embeddings(self, pdf_path: str):"""加載 PDF 文件并生成嵌入向量。"""# 加載 PDF 文件loader = PyPDFLoader(pdf_path)documents = loader.load()# 將文檔拆分為小塊text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200)texts = text_splitter.split_documents(documents)# 生成嵌入向量并構建 FAISS 索引vector_store = FAISS.from_documents(texts, self.embeddings)return vector_storedef ask(self, query: str) -> str:"""接收用戶的問題,檢索相關文本并生成答案。"""result = self.qa_chain.invoke({"query": query})return result["result"]# 主程序
if __name__ == "__main__":pdf_path = "E:/dcit/files/貸款.pdf"qa_system = PDFQASystem(pdf_path)# 循環對話while True:query = input("\n請輸入您的問題(輸入 'exit' 退出):")if query.lower() in ["exit", "quit"]:print("對話結束。")breakresult = qa_system.ask(query)print(f"問題:{query}")print(f"答案:{result}")
PDF內容:
銀行貸款的五級分類:
一、 正常貸款: 借款人能夠履行合同,一直能正常還本付息,不存在任何影響貸款本息及時全額償還的消極因素,銀行對借款人按時足額償還貸款本息有充分把握。 貸款損失的概率為 0。
二、 關注貸款:盡管借款人有能力償還貸款本息,但存在一些可能對償還產生不利影響的因 素,如這些因素繼續下去,借款人的償還能力受到影響,貸款損失的概率不會超過 5%。
三、 次級貸款: 借款人的還款能力出現明顯問題,完全依靠其正常營業收入無法足額償還貸 款本息,需要通過處分資產或對外融資乃至執行抵押擔保來還款付息。貸款損失的概率在 30%-50%。
四、 可疑貸款: 借款人無法足額償還貸款本息,即使執行抵押或擔保,也肯定要造成一部分損失,只是因為存在借款人重組、兼并、合并、抵押物處理和未決訴訟等待定因素, 損失金 額的多少還不能確定,貸款損失的概率在50%-75%之間。
五、 損失貸款: 指借款人已無償還本息的可能,無論采取什么措施和履行什么程序,貸款都注定要損失了,或者雖然能收回極少部分,但其價值也是微乎其微,從銀行的角度看,也沒有意義和必要再將其作為銀行資產在賬目上保留下來,對于這類貸款在履行了必要的法律程 序之后應立即予以注銷,其貸款損失的概率在75%-100%。
銀行貸款的流程:
一、貸款申請借款人需要向銀行提出借款申請,并提交相關資料。這些資料通常包括有效的身份證明(如身份證)、戶口本、婚姻狀況證明(如結婚證)、收入證明以及銀行流水等。這些資料有助于銀行評估借款人的信用狀況和還款能力。
二、貸款調查銀行在收到借款申請后,會對借款人的合法性、安全性、盈利性等情況進行調查。這一步驟主要是為了進一步核實借款人提供的資料,并評估貸款的風險。
三、貸款審批銀行會根據審貸分離、分級審批的貸款管理制度進行貸款審批。在此過程中,銀行會綜合考慮借款人的信用記錄、還款能力、擔保情況等因素,決定是否批準貸款申請以及貸款的額度、期限和利率等。
四、簽訂合同若銀行批準了貸款申請,下一步便是與銀行簽訂借款合同。合同會詳細列明貸款金額、期限、利率、還款方式等關鍵條款。簽訂合同是雙方達成法律約束的重要環節。
五、貸款發放一旦合同簽署完畢,銀行會根據約定將貸款金額發放到借款人指定的賬戶。這標志著貸款流程的正式完成,借款人可以開始使用貸款資金。
六、貸后檢查與貸款歸還在貸款發放后,銀行會定期對借款人執行借款合同情況及經營情況進行追蹤調查和檢查,以確保貸款按照合同規定使用并按時歸還。借款人需要按照約定的還款計劃定期償還本金和利息。如果借款人需要展期,應在借款到期日之前向銀行提出貸款延 期申請,由銀行決定是否批準延期。
綜上所述,銀行貸款的具體流程包括貸款申請、貸款調查、貸款審批、簽訂合同、貸款發放
以及貸后檢查與貸款歸還等步驟。在整個流程中,借款人需要配合銀行提供必要的資料和信 息,并確保按照合同約定使用貸款并按時還款
運行結果:
以上就是全部內容了,歡迎各位評論區提問。最后祝各位小伙伴學習順利,畢業都能進大廠~