Rag技術----項目博客(六)

RAG

定義:檢索增強生成(Retrieval Augmented Generation),簡稱 RAG,已經成為當前最火熱的LLM應用方案。

目的:通過提供相關領域數據庫通過問題檢索信息,將相關信息合并到Prompt中,增強模型的專業性。

深入淺出RAG技術:

RAG=檢索技術+LLM提示

//LLM提示就是之前文章中提到過的promt工程,這里不再贅述,主要理解檢索技術

檢索技術

2019年,Faiss就實現了基于嵌入的向量搜索技術,但是 RAG 推動了向量搜索領域的發展。比如 chroma、weaviate.io和 pinecone這些基于開源搜索索引引擎(主要是 faiss 和 nmslib)向量數據庫初創公司,最近增加了輸入文本的額外存儲和其他工具。
向量化是將文本數據轉化為向量矩陣的核心過程,通常使用embedding模型來實現,常用的模型:

模型名稱描述
ChatGPT-EmbeddingChatGPT-Embedding由OpenAI公司提供,以接口形式調用。
ERNIE-Embedding V1ERNIE-Embedding V1由百度公司提供,依賴于文心大模型能力,以接口形式調用。
M3EM3E是一款功能強大的開源Embedding模型,包含m3e-small、m3e-base、m3e-large等多個版本,支持微調和本地部署。
BGEBGE由北京智源人工智能研究院發布,同樣是一款功能強大的開源Embedding模型,包含了支持中文和英文的多個版本,同樣支持微調和本地部署。

本項目使用的模型為BAAI/bge-large-zh-v1.5BAAI/bge-small-zh,特點是體積小且適合中文。
向量數據庫:數據向量化后構建索引,并寫入數據庫的過程可以概述為數據入庫過程,適用于RAG場景的數據庫包括:FAISS、Chromadb、ES、milvus等,本項目選擇的數據庫為FAISS。

當我們要在數據庫中尋找與問題相關的數據時常用的方法:
常見計算方法:k-臨近
數據距離計算方法:歐式距離、曼哈頓距離、明科夫斯基距離。

RAG工作原理:

?

數據庫構建并應用

前期準備

環境
有兩個最著名的基于 LLM 的管道和應用程序的開源庫——LangChain 和 LlamaIndex,受 ChatGPT 發布的啟發,它們在 2022 年 10 月和 11 月創立,并在 2023 年獲得大量采用。
本項目使用的開源庫為LangChain

數據積累
數據來源:https://github.com/LawRefBook/Laws
該項目目的是收集各類法律法規、部門規章、案例等,并將其按照章節等信息進行了處理。
項目提供了request.py?腳本,支持從?BAAI/bge-large-zh-v1.5?爬取最新的法律法規。

數據庫構建

目錄結構

讀取數據

# 遍歷 Markdown 文件
docs = []
root_dir = Path("data/Laws-master/LAWS")
md_files = {} 
for dir_name in os.listdir(root_dir):dir_path = os.path.join(root_dir, dir_name)if os.path.isdir(dir_path):  # 確保是文件夾md_files[dir_name] = {}for file_name in os.listdir(dir_path):if file_name.endswith(".md"):

選擇分詞器并加載嵌入模型

embedding_model = HuggingFaceEmbeddings(model_name="../models/BAAI/bge-small-zh")
splitter = MarkdownTextSplitter(chunk_size=500, chunk_overlap=50)

構建數據庫

 file_path = os.path.join(dir_path, file_name)loader = TextLoader(str(file_path), encoding='utf-8')raw_docs = loader.load()split_docs = splitter.split_documents(raw_docs)docs.extend(split_docs)
vectorstore = FAISS.from_documents(docs, embedding_model)
vectorstore.save_local("faiss_index")

數據庫應用
?

def rag_ask(question, top_k=2):# 檢索相關法條docs = db.similarity_search(question, k=top_k)# print(docs)#生成前k個相關的問題context = "\n\n".join([doc.page_content for doc in docs])print(context)prompt = f"""你是中國法律助手,請根據以下法條內容回答問題:
【法條內容】:
{context}【用戶問題】:{question}
【回答】:
"""print(prompt)response = pipe(prompt, max_new_tokens=512)[0]['generated_text']print(response[len(prompt):].strip())

效果展示
prompt


回答結果

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

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

相關文章

設計模式——外觀設計模式(結構型)

摘要 本文介紹了外觀設計模式,它是一種結構型設計模式,通過引入一個外觀類來封裝復雜子系統的調用細節,對外提供簡單統一的接口。文中通過生活類比、關鍵角色介紹、使用場景分析以及結構說明等方面對這一模式進行了全面闡述,還涉…

LabVIEW磁懸浮軸承傳感器故障識別

針對工業高端裝備中主動磁懸浮軸承(AMB)的位移傳感器故障檢測需求,基于 LabVIEW 平臺構建了一套高精度故障識別系統。通過集成品牌硬件與 LabVIEW 的信號處理能力,實現了傳感器探頭故障的實時監測與精準定位,解決了傳統…

集成學習三種框架

集成學習通過組合多個弱學習器構建強學習器,常見框架包括Bagging(裝袋)、Boosting(提升) 和Stacking(堆疊) 一、Bagging(自助裝袋法) 核心思想 從原始數據中通過有放回…

PCI DSS培訓記錄

22日上午: 整體PCI DSS 結構分享VISA分享全球欺詐風險動態 信用卡被偷枚舉攻擊依然是最為主要的安全威脅之一(枚舉驗證碼),增加3DS驗證防護勒索軟件和信息泄漏攻擊欺詐分子對AI技術的興趣日益增加,如換臉軟件過驗證基于NFC技術利用非接交易進行欺詐成為新的攻擊手段,如NF…

數據安全中心是什么?如何做好數據安全管理?

目錄 一、數據安全中心是什么 (一)數據安全中心的定義 (二)數據安全中心的功能 1. 數據分類分級 2. 訪問控制 3. 數據加密 4. 安全審計 5. 威脅檢測與響應 二、數據安全管理的重要性 三、如何借助數據安全中心做好數據安…

黑馬Java面試筆記之 微服務篇(業務)

一. 限流 你們項目中有沒有做過限流?怎么做的? 為什么要限流呢? 一是并發的確大(突發流量) 二是防止用戶惡意刷接口 限流的實現方式: Tomcat:可以設置最大連接數 可以通過maxThreads設置最大Tomcat連接數,實現限流,但是適用于單體架構 Nginx:漏桶算法網關,令牌桶算法自定…

PostgreSQL的擴展 passwordcheck

PostgreSQL的擴展 passwordcheck passwordcheck 是 PostgreSQL 內置的一個密碼復雜度檢查擴展,用于強制實施基本的密碼策略。 一、擴展概述 功能:在創建或修改用戶密碼時檢查密碼復雜度目的:防止使用過于簡單的密碼適用版本:Po…

Go語言學習-->編譯器安裝

Go語言學習–>編譯器安裝 Go采用的是UTF-8編碼的文本文件存放源代碼,理論上使用任何一款文本編輯器都可以做Go語言開發。這里推薦使用VS Code和Goland。 VS Code是微軟開源的編輯器,而Goland是jetbrains出品的付費IDE。我們這里使用VS Code …

基于Android的一周穿搭APP的設計與實現 _springboot+vue

開發語言:Java框架:springboot AndroidJDK版本:JDK1.8服務器:tomcat7數據庫:mysql 5.7數據庫工具:Navicat12開發軟件:eclipse/myeclipse/ideaMaven包:Maven3.6 系統展示 APP登錄 A…

井字棋——ai PK you

挑戰人工智能,體驗經典井字棋的對決!AI 擁有強大的邏輯計算能力,每一步都經過精準推演。你能戰勝它嗎?還是會被 AI 徹底碾壓? 特點: 智能 AI,難度可調 極簡界面,快速上手 實時勝負…

關于easyx頭文件

一、窗口創建 &#xff08;1&#xff09;幾種創建方式 #include<easyx.h>//easyx的頭文件 #include<iostream> using namespace std;int main() {//創建一個500*500的窗口//參數為&#xff1a;長度&#xff0c;寬度&#xff0c;是否顯示黑框&#xff08;無參為不…

【學習記錄】Django Channels + WebSocket 異步推流開發常用命令匯總

文章目錄 &#x1f4cc; 摘要&#x1f9f0; 虛擬環境管理? 創建虛擬環境? 刪除虛擬環境? 激活/切換虛擬環境 &#x1f6e0;? Django 項目管理? 查看 Django 版本? 創建 Django 項目? 創建 Django App &#x1f4ac; Channels 常用操作? 查看 Channels 版本 &#x1f50…

Java線程狀態及其流轉

在Java編程中&#xff0c;線程是一種重要的并發實體。為了更好地理解和管理多線程應用程序&#xff0c;我們需要清楚線程的不同狀態及其流轉機制。本文將詳細介紹Java中線程的幾種主要狀態以及它們之間的轉換關系。 一、線程狀態概述 Java線程的生命周期有多個狀態&#xff0…

LabVIEW雙光子顯微鏡開發

基于LabVIEW 開發高性能雙光子顯微鏡系統&#xff0c;聚焦于生物樣本深層成像與納米材料三維表征。實現了超快激光控制、多維數據采集與實時圖像重建。系統采用飛秒激光光源與高精度振鏡掃描模塊&#xff0c;結合 LabVIEW 的 FPGA 實時控制能力&#xff0c;可對活體組織、熒光納…

數據庫操作-MySQL-4(JDBC編程)

JDBC&#xff1a;通過Java代碼操作mysql數據庫&#xff0c;數據庫會提供一些API供我們調用 MySQL、Oracle、等API有差異&#xff0c;但是Java統一了所有接口&#xff0c;即JDBC&#xff1b; 原始api-驅動包&#xff08;類似轉接頭&#xff09;-統一的api-Java 驅動包&#xff1…

windows修改躍點數調整網絡優先級

Windows有兩個網卡&#xff0c;一個有線網卡&#xff0c;一個無線網卡&#xff0c;通過修改躍點數來調整優先使用的網卡&#xff0c;這種只是眾多設置方式中的其中一種設置方式 文檔編寫時間&#xff1a;2025年6月 1.打開電腦的網絡連接 cmd--ncpa.cpl 在cmd中運行ncpa.cpl可…

實驗設計與分析(第6版,Montgomery著,傅玨生譯) 第10章擬合回歸模型10.9節思考題10.1 R語言解題

本文是實驗設計與分析&#xff08;第6版&#xff0c;Montgomery著&#xff0c;傅玨生譯) 第10章擬合回歸模型10.9節思考題10.1 R語言解題。主要涉及線性回歸、回歸的顯著性、回歸系數的置信區間。 vial <- seq(1, 10, 1) Viscosity <- c(160,171,175,182,184,181,188,19…

【深入 LangChain 的 Model I/O】提示設計、模型調用與輸出解析全解析

目錄 什么是 Model I/O&#xff1f; 一、提示模板&#xff08;PromptTemplate&#xff09; 1.1 什么是提示模板&#xff1f; 1.2 常見提示模板類型 二、模型調用&#xff08;Model Predict&#xff09; 三、輸出解析&#xff08;Output Parser&#xff09; 綜合示例&…

OD 算法題 B卷【跳格子2】

文章目錄 跳格子2 跳格子2 小明和朋友玩跳格子游戲&#xff0c;有n個連續格子組成的圓圈&#xff0c;每個格子有不同的分數&#xff0c;小朋友可以選擇從任意格子起跳&#xff0c;但是不能跳連續的格子&#xff0c;不能回頭跳&#xff0c;也不能超過一圈&#xff0c;給定一個代…

客戶線索商機怎么管?客戶線索商機管理工具哪個好?

做銷售、搞運營的朋友肯定都有過這種煩惱&#xff1a;每天收到海量客戶線索&#xff0c;卻不知道從哪條開始跟進&#xff1b;試了好幾個管理工具&#xff0c;要么功能太復雜&#xff0c;要么用起來不趁手。其實選對客戶線索商機管理工具&#xff0c;就像找到靠譜的 “銷售小助手…