RAG系統(四)手撕基于向量檢索的 RAG

RAG系統(一)系統介紹與向量檢索
RAG系統(二)文檔的加載與分段
RAG系統(三)向量數據庫

完整代碼需要依賴前邊三章中的代碼,本節主要展示整合后的RAG系統,及運行示例。

from MyVectorDBConnector import MyVectorDBConnector
from chatgptDemo import get_completion, prompt_template, build_prompt
from embedding import get_embeddings
from pdf_handle import PdfHandlerclass RAG_Bot:def __init__(self, vector_db, llm_api, n_results=2):self.vector_db = vector_dbself.llm_api = llm_apiself.n_results = n_resultsdef chat(self, user_query):# 1. 檢索search_results = self.vector_db.search(user_query, self.n_results)# 2. 構建 Promptprompt = build_prompt(prompt_template, context=search_results['documents'][0], query=user_query)# 3. 調用 LLMresponse = self.llm_api(prompt)return response

運行示例:

if __name__ == '__main__':# 只取兩頁pdf = PdfHandler("llama2.pdf")paragraphs = pdf.extract_text_from_pdf(page_numbers=[2, 3],min_line_length=10)# 創建一個向量數據庫對象vector_db = MyVectorDBConnector("demo", get_embeddings)# 向向量數據庫中添加文檔vector_db.add_documents(paragraphs)# 創建一個RAG機器人bot = RAG_Bot(vector_db,llm_api=get_completion)user_query = "llama 2有多少參數?"response = bot.chat(user_query)print(response)

其中”get_completion“是chatgpt的模型封裝,實際使用可根據自身選用的模型API或SDK封裝一個調用方法傳遞進來。

prompt
prompt_template = """
你是一個問答機器人。
你的任務是根據下述給定的已知信息回答用戶問題。已知信息:
{context}用戶問:
{query}如果已知信息不包含用戶問題的答案,或者已知信息不足以回答用戶的問題,請直接回復"我無法回答您的問題"。
請不要輸出已知信息中不包含的信息或答案。
請用中文回答用戶問題。
"""
prompt模板賦值
def build_prompt(prompt_template, **kwargs):'''將 Prompt 模板賦值'''inputs = {}for k, v in kwargs.items():if isinstance(v, list) and all(isinstance(elem, str) for elem in v):val = '\n\n'.join(v)else:val = vinputs[k] = valreturn prompt_template.format(**inputs)

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

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

相關文章

前端javascript包管理,npm升級用pnpm

一 pnpm 介紹 pnpm(Package Manager)是一個快速、節省磁盤空間的 JavaScript 包管理器,它是 Node.js 生態系統中 npm 的一個替代品。pnpm 解決了傳統包管理工具在處理依賴時的一些痛點,特別是關于存儲空間使用和依賴地獄的問題。…

如何將Google Search Console添加到WordPress和GA4

您想知道如何將 Google Search Console 添加到您的 Google Analytics 帳戶和 WordPress 網站嗎? 作為網站主,Google Search Console 是一款不能不使用的工具。對于任何想要確保其網站在 Google 搜索結果中表現良好的人來說,這絕對是一個必不…

leetCode-hot100-數組專題之區間問題

數組專題之區間問題 知識點:解決思路:例題56.合并區間57.插入區間253.會議室 Ⅱ485.無重疊區間 數組區間問題是算法中常見的一類問題,它們通常涉及對數組中的區間進行排序、合并、插入或刪除操作。無論是合并區間、插入區間還是刪除重復空間&…

【HarmonyOS嘗鮮課】- 下載、安裝DevEco Studio以及配置環境、創建運行HarmonyOS項目

下載、安裝開發工具 進入DevEco Studio下載官網,單擊“立即下載”進入下載頁面。 這里以Windows為例進行安裝,可以根據操作系統選擇對應的版本進行下載。 下載完成后解壓一下,進入文件里,雙擊應用程序,打開安裝向導&a…

Redis主從、哨兵、集群講解

一、Redis主從 大家在面試中可能經常會被問到Redis的高可用問題。Redis高可用回答包括兩個層面,一個就是數據不能丟失,或者說盡量減少丟失 ;另外一個就是保證Redis服務不中斷 。 對于盡量減少數據丟失,可以通過AOF和RDB保證。 對于保證服務…

2024年中青杯數學建模思路+建模過程+視頻講解

A 題:人工智能視域下養老輔助系統的構建 隨著全球人口老齡化的加劇,養老問題已經成為一個世界性的社會問題。它不僅 關系到每個家庭、每個個體的未來福祉,也關系到國家的社會穩定和可持續發展。根 據聯合國的相關數據顯示,全球 65…

linux---線程控制

線程和進程 以前我們要同時跑多個程序,可以通過fork()多個子進程,然后通過系統函數進行程序的替換,但是創建進程代價大,不僅要拷貝一份父進程的地址空間,頁表,文件表述符表等。但是線程不需要因為是進程的…

搜索引擎新特性與未來展望

多元化大模型支持: 本搜索引擎具備卓越的兼容性和靈活性,支持多種大模型(LLMs)。無論是本地部署的llama3、gemma、mistral等模型,還是云服務提供的OpenAI/gpt4-o、Groq/Llama3等,都能輕松接入,為用戶提供豐富的智能搜索體驗。現代化技術棧構建: 項目采用業界領先的Next…

windows docker desktop 更換鏡像存儲目錄

windows docker desktop 更換鏡像存儲目錄 方法:如圖,Browse瀏覽一個新的目錄并選中,確定后,程序會開始stop,在stop完成前,會持續遷移原有鏡像到新的位置,你會發現目標位置的磁盤占用空間越來越…

Mac網線連接windows本【局域網互傳文件】

Mac網線連接windows本【局域網互傳文件】 兩臺電腦網線互聯 Mac->網絡->USP TCP/IP 手動配置IP,子網掩碼,路由器 windows 網絡和Internet配置->更改適配器選項->以太網->Internet協議版本4(TCP/IPv4)->屬性 …

K8S/ hpa分享

在 Kubernetes 中,HorizontalPodAutoscaler 自動更新工作負載資源 (例如 Deployment 或者 StatefulSet), 目的是自動擴縮工作負載以滿足需求。 hpa的使用本身還是很簡單的 示例如下: 官網示例 apiVersion: apps/v1 k…

NetCore發布的時候怎么去除生成的多余的語言文件夾cs,de...,Microsoft.CodeAnalysis語言資源文件

1、問題: .NetCore 3.1 發布出來的publish目錄一大堆雜七雜八的文件夾如下圖: 2、產生原因 由Microsoft.VisualStudio.Web.CodeGeneration.Design包導致 3、解決方法: 如果確實需要某種語言資源文件,可以這樣,右鍵編…

壓擺率SR、增益帶寬積GBP、開環增益Aol

運放的選型對運放電路的實際效果非常關鍵,一定要理解運放重要參數的概念。下面幾天將對運放的選型進行系統學習并做實驗 運放的壓擺率(Slew Rate,簡稱SR)是指閉環放大器在輸入為階躍信號時,輸出電壓時間變化率的平均值…

vue打包部署到springboot,通過tomcat運行

tomcat默認端口 8080springboot端口 9132vue 端口 9131 框架 項目是基于SpringBootVue前后端分離的倉庫管理系統 后端:SpringBoot MybatisPlus前端:Node.js Vue element-ui數據庫:mysql 一. 打包Vue項目 cmd中輸入命令 npm run build 后…

深度學習之基于YoloV5-Deepsort人物識別與追蹤項目

歡迎大家點贊、收藏、關注、評論啦 ,由于篇幅有限,只展示了部分核心代碼。 文章目錄 一項目簡介 二、功能三、系統四. 總結 一項目簡介 一、項目背景與目標 本項目旨在利用深度學習技術,結合YoloV5和Deepsort算法,開發一個高效、…

前端:音頻可視化(H5+js版本)

一、效果展示 HTML5JS實現一個簡單的音頻可視化 二、代碼 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><title>音頻可視化</title><style></style></head><body><divs…

非平穩信號的傅里葉變換與短時傅里葉變換

一、仿真一個非平穩的時間序列。 N 10000; t 0:N-1; z1 4.2*sin(2*pi/20.*t5); z2 2.2*sin(2*pi/100.*(10.001*t).*t8); w1 randn(length(t),1); yz1z2w1; figure;plot(y,LineWidth,1.5);grid on; ylabel(Signal); xlabel(Time); 二、傅里葉變換&#xff08;FFT&#xff…

教育智能化的歷史及發展趨勢

1. 教育智能化概述 1.1 定義與背景 教育智能化是指利用人工智能、大數據、云計算等現代信息技術&#xff0c;對教育過程進行智能化改造&#xff0c;提升教育質量與效率。隨著技術進步&#xff0c;教育智能化已成為全球教育改革的重要趨勢。 教育智能化的背景可以追溯到20世紀…

Llama 3超級課堂作業筆記

文章目錄 基礎作業完成 Llama 3 Web Demo 部署環境配置下載模型Web Demo 部署對話截圖 使用 XTuner 完成小助手認知微調Web Demo 部署自我認知訓練數據集準備訓練模型推理驗證 使用 LMDeploy 成功部署 Llama 3 模型環境&#xff0c;模型準備LMDeploy CLI chatLMDeploy模型量化(…

SQL Server 2022安裝+SQL Server最新補丁+smss工具連接超詳細教程

文章目錄 一、SQL Server 2022安裝二、SSMS的安裝與連接三、最新補丁下載總結 一、SQL Server 2022安裝 官網下載安裝包&#xff1a;https://www.microsoft.com/en-us/sql-server/sql-server-downloads 打開 選擇自定義 更改你要安裝到的位置后進行安裝 安裝程序包下載完后會自…