檢索增強生成(2)本地PDF 本地嵌入模型


from langchain_community.document_loaders import PyPDFLoader
from pathlib import Pathdef load_local_pdf(file_path):if not Path(file_path).exists():raise FileNotFoundError(f"文件 {file_path} 不存在!")loader = PyPDFLoader(file_path)try:docs = loader.load()print(f"成功加載 {len(docs)} 頁 | 首頁內容片段: {docs[0].page_content[:200]}...")return docsexcept Exception as e:print(f"加載失敗: {str(e)}")return None# For openai key
import os
os.environ["OPENAI_API_KEY"] = "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"# 1. 初始化OpenAI模型
from langchain_openai.chat_models import ChatOpenAIllm = ChatOpenAI(model_name="gpt-4o-mini")# 測試OpenAI調用
response = llm.invoke("獎懲的原則是什么?")
print(response.content)# 2. 加載PDF文檔
from langchain_community.document_loaders import PyPDFLoader# Or download the paper and put a path to the local file instead
# loader = PyPDFLoader("https://arxiv.org/pdf/2402.03216")
# docs = loader.load()
# print(docs[0].metadata)local_docs = load_local_pdf("C:\\員工獎懲管理辦法.pdf")# 3. 分割文本
from langchain.text_splitter import RecursiveCharacterTextSplitter# initialize a splitter
# 配置智能分割器
splitter = RecursiveCharacterTextSplitter(chunk_size=1000,chunk_overlap=200,  # 增加重疊比例separators=["\n\n", "。", "\n", " ", ""],  # 優化分隔符優先級length_function=len,add_start_index=True  # 記錄起始位置
)# use the splitter to split our paper
corpus = splitter.split_documents(local_docs)
print(f"分割后文檔數: {len(corpus)} | 首塊內容示例:\n{corpus[0].page_content[:200]}...")# 4. 初始化嵌入模型
from langchain_huggingface.embeddings import HuggingFaceEmbeddings# 指定本地模型路徑
model_path = "./models/bge-large-zh-v1.5"
# embedding_model = HuggingFaceEmbeddings(model_name="BAAI/bge-large-zh-v1.5", encode_kwargs={"normalize_embeddings": True})
embedding_model = HuggingFaceEmbeddings(model_name=model_path,  # 直接指向本地路徑encode_kwargs={"normalize_embeddings": True},model_kwargs={"local_files_only": True}  # 強制從本地加載
)# 5. 構建向量數據庫
from langchain_community.vectorstores import FAISSvectordb = FAISS.from_documents(corpus, embedding_model)# (optional) save the vector database to a local directory
# 保存向量庫(確保目錄權限)
if not os.path.exists("vectorstore.db"):vectordb.save_local("vectorstore.db")
print("向量數據庫已保存")# 6. 創建檢索鏈
from langchain_core.prompts import ChatPromptTemplatetemplate = """
You are a Q&A chat bot.
Use the given context only, answer the question.<context>
{context}
</context>Question: {input}
"""# Create a prompt template
prompt = ChatPromptTemplate.from_template(template)from langchain.chains.combine_documents import create_stuff_documents_chain
from langchain.chains import create_retrieval_chaindoc_chain = create_stuff_documents_chain(llm, prompt)
# Create retriever for later use
retriever = vectordb.as_retriever(search_kwargs={"k": 3})  # 調整檢索數量
chain = create_retrieval_chain(retriever, doc_chain)# 7. 執行查詢
response = chain.invoke({"input": "獎懲的原則是什么?"})# print the answer only
print("\n答案:", response['answer'])

模型下載參考上一篇文章:?使用huggingface-cli下載模型

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/74196.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/74196.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/74196.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

安全守護:反光衣檢測技術的革新之路

視覺分析助力船上工人反光衣檢測 在現代工業生產與作業環境中&#xff0c;安全始終是首要考慮的因素。對于水上作業&#xff0c;如船舶維護、海上施工等場景&#xff0c;工人穿戴反光衣是預防事故、提高可見性的重要措施。然而&#xff0c;傳統的人工檢查方式不僅效率低下&…

【Scrapy】Scrapy教程8——處理子鏈接

通過前面幾篇文章,已經了解了如何去爬取網頁內容并存儲到數據庫,但是目前只是存儲了一個頁面的內容,現在想要獲取每篇文章鏈接內的文章內容,我們來看看怎么獲取。 生成新請求 首先我們肯定要先拿到鏈接,所以第一步都獲取文章標題和鏈接肯定少不了,然后再爬取獲取到到子…

Centos6配置yum源

Centos6配置yum源 為Centos6配置CentOS Vault源—防止yum源過期為Centos6配置epel源為Centos6配置ELRepo源---已ELRepo被官方清空Centos6安裝dockerdocker配置國內鏡像加速 為Centos6配置CentOS Vault源—防止yum源過期 參考&#xff1a;https://mirrors.ustc.edu.cn/help/cen…

“智改數轉”新風口,物聯網如何重構制造業競爭力?

一、政策背景 為深化制造業智能化改造、數字化轉型、網絡化聯接&#xff0c;江蘇省制定了《江蘇省深化制造業智能化改造數字化轉型網絡化聯接三年行動計劃&#xff08;2025&#xff0d;2027年&#xff09;》&#xff0c;提出到2027年&#xff0c;全省制造業企業設備更新、工藝…

制作Oracle11g Docker 鏡像

基于Linux系統&#xff0c;宿主主機要設置如下環境變量&#xff0c;oracle為64位版本 dockerfile中需要的數據庫安裝包可從csdn下載內找到 #!/bin/bash # 在宿主機上運行以設置Oracle所需的內核參數 # 這些命令需要root權限cat > /etc/sysctl.d/99-oracle.conf << EO…

從GTC2025首次量子日看英偉達量子AI融合算力網絡前景與趨勢

GTC2025 Quantum Day 最新內容全部匯總: 技術名稱描述合作伙伴/開發者應用場景/目標量子模擬器優化方案NVIDIA與IonQ、D-Wave合作,針對量子模擬器進行性能優化,提升量子計算任務效率。IonQ、D-Wave量子算法開發、復雜系統模擬混合量子-經典計算架構結合量子計算與經典GPU加速…

UE4學習筆記 FPS游戲制作12 添加第二把槍,制作槍的父類,動態生成物體,切換武器

我們添加一個發射器類型的槍 我們目前有了一個Rifle的槍械藍圖&#xff0c;我們在添加Launcher時&#xff0c;需要為他們添加一個父類&#xff0c;將公共方法放到父類里&#xff0c;方法體由子類實現 添加父類 方法1 新建一個Gun的藍圖&#xff0c;Gun繼承Actor&#xff0c;…

【原創首發】開源基于AT32 SIP/VOIP電話

前言 本次為了反饋各位粉絲的關注&#xff0c;特此分享 AT32_VOIP 工程&#xff0c;此功能其實跟我之前發過的《STM32F429的VOIP功能》是一樣的&#xff0c;只是用了AT32F437。 其實那個工程是一個比較Demo中的Demo&#xff0c;很多功能和硬件依賴性太大了。后面項目中發現AT…

通俗易懂搞懂@RequestParam 和 @RequestBody

&#x1f4cc; 博主簡介: &#x1f4bb; 努力學習的 23 級科班生一枚 &#x1f680;&#x1f3e0; 博主主頁 &#xff1a; &#x1f4ce; 灰陽陽&#x1f4da; 往期回顧 &#xff1a;Session和Cookie我不允許你不懂&#x1f4ac; 每日一言&#xff1a; 「流水不爭先&#xff0c…

dubbo版本與分組

Dubbo服務中&#xff0c;接口并不能唯一確定一個服務&#xff0c;只有 接口分組版本號 的三元組才能唯一確定一個服務。 當同一個接口針對不同的業務場景、不同的使用需求或者不同的功能模塊等場景&#xff0c;可使用服務分組來區分不同的實現方式。同時&#xff0c;這些不同實…

RAG現有技術方案

RAG現有技術方案 一、現有技術方案的核心問題 檢索質量不足 挑戰:傳統RAG系統依賴單輪檢索,難以應對智能電網的海量異構數據(如傳感器讀數、控制參數),導致檢索結果相關性低、覆蓋不全。案例:BM25稀疏檢索在處理長文本或專業術語時,易遺漏語義關聯;BGE等稠密檢索模型對…

redis MISCONF Redis is configured to save RDB snapshots報錯解決

直接上解決方案 修改redis配置文件 stop-writes-on-bgsave-error no 重啟redis

個人學習編程(3-22) leetcode刷題

連續子數組&#xff1a;&#xff08;難&#xff09; 示例 1: 輸入: nums [0,1] 輸出: 2 說明: [0, 1] 是具有相同數量 0 和 1 的最長連續子數組。 示例 2: 輸入: nums [0,1,0] 輸出: 2 說明: [0, 1] (或 [1, 0]) 是具有相同數量0和1的最長連續子數組。 需要理解的知識&a…

希爾排序

希爾排序是一種改進的插入排序算法&#xff0c;它通過將原始數據分成多個子序列來改善插入排序的性能&#xff0c;每個子序列的元素間隔為 d&#xff08;增量&#xff09;。隨著算法的進行&#xff0c;d 逐漸減小&#xff0c;最終減為 1&#xff0c;此時整個序列就被排序好了。…

JavaScript基礎-DOM事件流

在Web開發過程中&#xff0c;理解和掌握DOM事件流是實現高效交互的關鍵。DOM事件流描述了當一個事件發生時&#xff0c;它在文檔樹中的傳播路徑。了解事件流的概念有助于我們更精確地控制事件處理邏輯&#xff0c;避免不必要的行為&#xff0c;并提升用戶體驗。本文將深入探討D…

C語言基礎知識07---預編譯模塊化

目錄 預編譯指令 1.1 編譯流程 1.2 文件包含 1.3 條件編譯 1.4 宏定義 1.5 無參宏 1.6 typedef和無參宏的區別 1.7 有參宏 1.8 函數與有參宏的區別 1.9 取消宏定義 #undef 1.10 符合使用 模塊化操作 1.1 H文件&#xff1a;固定模版 1.2 C文件&#xff1a;源文件-…

自由學習記錄(46)

CG語法的數據類型 // uint : 無符號整數&#xff08;32位&#xff09; // int : 有符號整數&#xff08;32位&#xff09; // float : 單精度浮點數&#xff08;32位&#xff09;&#xff0c;通常帶后綴 f&#xff08;如 1.0f&#xff09; // half : 半精度浮…

Agent:大模型中的智能“函數”

在傳統的編程范式中&#xff0c;函數是執行特定任務的基本單元。它們接收輸入參數&#xff0c;執行預定義的操作&#xff0c;并返回結果。這種模式在確定性和結構化任務中非常有效&#xff0c;但在處理復雜、開放性和非結構化的任務時&#xff0c;函數的局限性就顯現出來了。隨…

【數據結構】kmp算法介紹+模板代碼

目錄 1.kmp算法介紹 2.應用場景 3.KMP與暴力算法比較 4.模板代碼 KMP算法是一種高效的字符串匹配算法&#xff0c;用于在文本串中快速查找模式串的所有出現位置。其核心思想是通過預處理模式串&#xff0c;避免在匹配失敗時進行不必要的回溯&#xff0c;從而將時間復雜度優…

(自用)yolo算法學習

1.難受中&#xff0c;看了教程過后無從下手啊 2.pycharm專業版成功就好 3.安裝包時出先問題 (base) PS G:\pycharm\projects\yolo\yolov5> pip install opencv-python>4.1.1 Requirement already satisfied: opencv-python>4.1.1 in g:\anaconda\app\lib\site-packa…