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.mzph.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 打开 选择自定义 更改你要安装到的位置后进行安装 安装程序包下载完后会自…