LangChain實現RAG檢索增強

1:啟動vllm的openai兼容server:

export VLLM_USE_MODELSCOPE=True
python -m vllm.entrypoints.openai.api_server --model 'qwen/Qwen-7B-Chat-Int4' --trust-remote-code -q gptq --dtype float16 --gpu-memory-utilization 0.6

2:構建向量數據庫

from langchain_community.document_loaders import PyPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_community.embeddings import ModelScopeEmbeddings
from langchain_community.vectorstores import FAISS# 解析PDF,切成chunk片段
pdf_loader=PyPDFLoader('LLM.pdf',extract_images=True)   # 使用OCR解析pdf中圖片里面的文字
chunks=pdf_loader.load_and_split(text_splitter=RecursiveCharacterTextSplitter(chunk_size=100,chunk_overlap=10))# 加載embedding模型,用于將chunk向量化
embeddings=ModelScopeEmbeddings(model_id='iic/nlp_corom_sentence-embedding_chinese-base') # 將chunk插入到faiss本地向量數據庫
vector_db=FAISS.from_documents(chunks,embeddings)
vector_db.save_local('/kaggle/working/LLM.faiss')print('faiss saved!')

3:開啟對話

from langchain_community.embeddings import ModelScopeEmbeddings
from langchain_community.vectorstores import FAISS
from langchain.memory import ChatMessageHistory
from langchain.prompts.chat import ChatPromptTemplate, SystemMessagePromptTemplate, HumanMessagePromptTemplate, \AIMessagePromptTemplate, MessagesPlaceholder
from langchain.schema import HumanMessage, SystemMessage, AIMessage
from langchain_openai import ChatOpenAI
from langchain_core.runnables import RunnablePassthrough
from operator import itemgetter
import os# 加載embedding模型,用于將query向量化
embeddings = ModelScopeEmbeddings(model_id='iic/nlp_corom_sentence-embedding_chinese-base')# 加載faiss向量庫,用于知識召回
vector_db = FAISS.load_local('/kaggle/working/LLM.faiss', embeddings, allow_dangerous_deserialization=True)
retriever = vector_db.as_retriever(search_kwargs={"k": 5})# 用vllm部署openai兼容的服務端接口,然后走ChatOpenAI客戶端調用
os.environ['VLLM_USE_MODELSCOPE'] = 'True'
chat = ChatOpenAI(model="qwen/Qwen-7B-Chat-Int4",openai_api_key="EMPTY",openai_api_base='http://localhost:8000/v1',stop=['<|im_end|>']
)# Prompt模板
system_prompt = SystemMessagePromptTemplate.from_template('You are a helpful assistant.')
user_prompt = HumanMessagePromptTemplate.from_template('''
Answer the question based only on the following context:{context}Question: {query}
''')
full_chat_prompt = ChatPromptTemplate.from_messages([system_prompt, MessagesPlaceholder(variable_name="chat_history"), user_prompt])# Chat chain
chat_chain = {"context": itemgetter("query") | retriever,"query": itemgetter("query"),"chat_history": itemgetter("chat_history"),} | full_chat_prompt | chat# 開始對話
chat_history = []
query = input('query:')
response = chat_chain.invoke({'query': query, 'chat_history': chat_history})
chat_history.extend((HumanMessage(content=query), response))
print(response.content)
chat_history = chat_history[-20:]  # 最新10輪對話

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

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

相關文章

Redis基礎(6):SpringDataRedis

SpringDataRedis簡介 SpringData是Spring中專門進行數據操作的模塊&#xff0c;包含了對于各種數據庫的集成。其中對Redis的集成模塊叫做SpringDataRedis&#xff08;官網地址&#xff1a;Spring Data Redis&#xff09;。其最核心的特點就是提供了不同Redis客戶端的整合&…

B. Shrinking Array/縮小數組

B. Shrinking Array讓我們稱一個數組 b 為 i 美麗 &#xff0c;如果它至少包含兩個元素&#xff0c;并且存在一個位置 |bi?bi1|≤1 使得 |x| (其中 x 是 #10# #11# 的絕對值)。給定一個數組 a &#xff0c;只要它至少包含兩個元素&#xff0c;你就可以執行以下操作&#xff1a…

【學習筆記】Linux系統中SSH服務安全配置

一、背景知識 以ubuntu為例&#xff0c;查看ssh服務是否安全并配置&#xff0c;執行 ssh -V ssh的配置文件路徑&#xff1a;/etc/ssh/sshd_config 二、SSH服務配置文件 1.端口和監聽設置 Port 22 含義&#xff1a;指定SSH服務監聽的端口號&#xff08;默認是22&#xff09…

FastAPI + Tortoise-ORM + Aerich 實現數據庫遷移管理(MySQL 實踐)

在 FastAPI 項目中&#xff0c;Tortoise-ORM 是一個輕量的異步 ORM 框架&#xff0c;適用于 async/await 場景。結合數據庫遷移工具 Aerich&#xff0c;可以優雅地管理數據庫表結構演進&#xff0c;本文將通過完整流程演示如何在 MySQL 環境下使用。&#x1f4e6; 一、環境準備…

7.7日 實驗03-Spark批處理開發(2)

使用Spark處理數據文件檢查數據檢查$DATA_EXERCISE/activations里的數據&#xff0c;每個XML文件包含了客戶在指定月份活躍的設備數據。拷貝數據到HDFS的/dw目錄樣本數據示例&#xff1a;<activations><activation timestamp"1225499258" type"phone&q…

C語言可變參數感悟

#include <stdio.h> #include <stdarg.h> #if 1 /* *在C語言中&#xff0c;可變參函數是指參數數量不固定的函數&#xff0c;比如printf\scanf *可變參函數的語法&#xff1a; *返回類型 函數名&#xff08;固定函數&#xff0c;.....) { //函數體 } *1、包含頭文件…

LeetCode 1248.統計優美子數組

給你一個整數數組 nums 和一個整數 k。如果某個連續子數組中恰好有 k 個奇數數字&#xff0c;我們就認為這個子數組是「優美子數組」。 請返回這個數組中 「優美子數組」 的數目。 示例 1&#xff1a; 輸入&#xff1a;nums [1,1,2,1,1], k 3 輸出&#xff1a;2 解釋&#xf…

FastAPI Docker環境管理腳本使用指南

作者: 源滾滾AI編程 創建時間: 2025年07月08日 版本: v1.0.0 文檔狀態: 完成 版權聲明 本文檔由源滾滾AI編程創作,版權所有。未經作者書面許可,不得復制、分發或用于商業用途。 免責聲明 本文檔僅用于技術交流和學習目的。作者不對使用本文檔內容導致的任何問題承擔責任。…

前端常見 HTTP 狀態碼

作為前端開發者&#xff0c;與后端 API 交互時&#xff0c;HTTP 狀態碼是判斷請求成敗的關鍵信號。理解常見狀態碼的含義、責任歸屬及應對策略&#xff0c;能極大提升調試效率和團隊協作。以下是關鍵狀態碼的詳細解析&#xff1a; 首先說一下如何查看狀態碼&#xff1a; 如上圖…

深度解析C語言內存函數(小米面試題)

目錄 一、memcpy1.1 代碼演示1.2 memcpy的模擬實現 二、memmove2.1 代碼演示2.2 模擬實現&#xff08;小米面試題&#xff09; 三、memset3.1 代碼演示3.2 總結 四、memcmp4.1 代碼演示4.2 總結 總結 一、memcpy &#xff08;memory copy 內存復制&#xff09; 之前文章中寫的…

DK124反激式開關電源芯片

18W 高性能交直流轉換芯片 特性 DK124 是一款離線式開關電源芯片&#xff0c;最大輸出功率達到 24W。內部集成了 PWM 控制器、700V 功率管和初級峰值電流檢測電路&#xff0c;并采用了可以省略輔助供電繞組的專利自供電技術&#xff0c;極大簡化了外圍應用電路&#xff0c;減…

商品銷售數據分析實驗

進入虛擬機&#xff0c;啟動HDFS和Yarn1.創建表 hive show databases; use test;銷售訂單表create table t_dml (detail_id bigint,sale_date date, province string,city string,product_id bigint,cnt bigint,amt double )row format delimited fields terminated by ,;商品…

PH熱榜 | 2025-07-08

1. TensorBlock Forge 標語&#xff1a;人工智能模型的API 介紹&#xff1a;Forge是一個快速且安全的工具&#xff0c;讓你可以跨不同供應商連接和運行AI模型 產品網站&#xff1a; 立即訪問 Product Hunt&#xff1a; View on Product Hunt 票數&#xff1a; &#x1f53a…

2025-01)electronjs-v11.2.0升級到新版本electronjs-v37.2.0記錄,node版本記錄,淘寶鏡像配置記錄,升級記錄

背景:由于22年使用electronjs開發的自助機客戶端幾年沒去維護,現在有需求要修改,電腦也換新了,node環境也沒,直接把electron從 之前的 11.2.0 版本 升級到了37.2.0版本,升級最主要的目的是升級谷歌瀏覽器內核,升級后谷歌瀏覽器內核直接從87升級到了138,可以支持谷歌最新…

iQOO手機怎樣相互遠程控制?其他手機可以遠程控制iQOO嗎?

iQOO是Vivo同一品牌下的產品&#xff0c;它們兩款手機都可以使用手機內置的遠程控制功能。具體做法是&#xff0c;打開控制端的iQOO手機的【設置】【快捷與輔助】、【遠程協助】&#xff0c;然后輸入被控端的電話號碼&#xff0c;等被控端的手機接受遠程協助后&#xff0c;就可…

【入門級-C++程序設計:3、程序基本語句-多層循環語句】

1、定義&#xff1a; 在 C 中&#xff0c;多層循環&#xff08;嵌套循環&#xff09;是指在一個循環體內包含另一個或多個循環語句。它常用于處理多維數據結構&#xff08;如二維數組&#xff09;、復雜的迭代邏輯&#xff08;如矩陣運算、圖形打印、組合遍歷等&#xff09;。多…

四、jenkins自動構建和設置郵箱

一、jenkins自動構建什么自動構建、有啥用&#xff1a;觸發方式代碼提交&#xff08;Git push&#xff09;定時任務&#xff08;如每天凌晨構建&#xff09;手動點擊等方式&#xff08;立即執行&#xff09;執行內容從 Git/SVN 拉取最新代碼運行編譯&#xff08;如 Maven/Gradl…

【深度學習新浪潮】深入解析LLM關鍵概念:架構、優化與最新研究進展

1. Transformer架構與注意力機制 概念解析 Transformer是LLM的核心架構,由編碼器和解碼器組成,其核心創新是自注意力機制,通過計算輸入序列中每個位置的關聯權重,動態聚焦關鍵信息。自注意力機制的計算復雜度為O(n),在處理長序列時成為性能瓶頸。 代碼示例:基礎Transfo…

RAGflow圖像解析與向量化分析

RAGflow圖像解析與向量化分析 注:需要提前部署好ragflow,才方便一 一對應代碼,部署教程:rag部署教程,這樣才會方便后續更改 1. 圖像解析流程 RAGflow通過多種解析器處理不同類型的文檔,其中圖像解析是一個重要組成部分。以下是RAGflow處理圖像的主要流程: 1.1 PDF文…

千翼破界,百景賦能 | 2025深圳eVTOL展無人機場景應用專場即將啟幕

在技術革新、應用深化、產業鏈協同升級及低空空域管理改革等多重政策紅利驅動下&#xff0c;我國工業級無人機產業正邁入爆發式增長新階段&#xff0c;持續引領民用無人機市場繁榮。數據顯示&#xff0c;2019 至2024年&#xff0c;我國民用無人機市場規模從435.1億元躍升至1108…