十分钟快速搭建检索、排序的大模型RAG系统

请添加图片描述
以上为实现效果

RAG是目前最火的大模型应用之一,如何能快速实现一个不错的demo呢?

参考

  • https://github.com/LongxingTan/open-retrievals
  • https://colab.research.google.com/drive/1fJC-8er-a4NRkdJkwWr4On7lGt9rAO4P?usp=sharing#scrollTo=2Hrfp96UYufn

出于硬件考虑,目前用的大模型是Qwen1.5最小的size,考虑到涌现至少需要10B以上的大模型,有更好的硬件还可以表现的更好

代码

主要来自
https://github.com/LongxingTan/open-retrievals/blob/master/examples/3_rag/rag_langchain_demo.py

import json
import os
import re
import tempfileimport streamlit as st
from langchain import LLMChain, PromptTemplate
from langchain.chains import RetrievalQA
from langchain.document_loaders import PyPDFLoader
from langchain.memory.chat_message_histories import StreamlitChatMessageHistory
from langchain.retrievers import EnsembleRetriever
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.vectorstores import Chromafrom retrievals.tools.langchain import LangchainEmbedding, LangchainLLMst.set_page_config(page_title="RAG with Open-retrievals")with st.sidebar:st.write("**RAG with Open-retrievals**")@st.cache_resource(ttl="1h")
def configure_retriever(uploaded_files):# read documentsdocs = []temp_dir = tempfile.TemporaryDirectory()for file in uploaded_files:temp_filepath = os.path.join(temp_dir.name, file.name)with open(temp_filepath, "wb") as f:f.write(file.getvalue())loader = PyPDFLoader(temp_filepath)docs.extend(loader.load())# split documentstext_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)splits = text_splitter.split_documents(docs)embeddings = LangchainEmbedding(model_name_or_path="sentence-transformers/all-MiniLM-L6-v2")vectordb = Chroma.from_documents(splits, embeddings)retrieval_args = {"search_type": "similarity", "score_threshold": 0.15, "k": 30}retriever = vectordb.as_retriever(**retrieval_args)return retrieveruploaded_files = st.sidebar.file_uploader(label="Upload PDF files", type=["pdf"], accept_multiple_files=True)
if not uploaded_files:st.info("Please upload PDF documents to continue.")st.stop()
retriever = configure_retriever(uploaded_files)llm = LangchainLLM(model_name_or_path="Qwen/Qwen1.5-1.8B-Chat", temperature=0.5, max_tokens=2048, top_k=10)
msgs = StreamlitChatMessageHistory()RESPONSE_TEMPLATE = """[INST]
<>
You are a helpful AI assistant. Use the following pieces of context to answer the user's question.<>
Anything between the following `context` html blocks is retrieved from a knowledge base.{context}REMEMBER:
- If you don't know the answer, just say that you don't know, don't try to make up an answer.
- Let's take a deep breath and think step-by-step.Question: {question}[/INST]
Helpful Answer:
"""PROMPT = PromptTemplate.from_template(RESPONSE_TEMPLATE)
PROMPT = PromptTemplate(template=RESPONSE_TEMPLATE, input_variables=["context", "question"])qa_chain = RetrievalQA.from_chain_type(llm,chain_type='stuff',retriever=retriever,chain_type_kwargs={"verbose": True,"prompt": PROMPT,},
)if len(msgs.messages) == 0 or st.sidebar.button("New Chat"):msgs.clear()msgs.add_ai_message("How can I help you?")avatars = {"human": "user", "ai": "assistant"}
for msg in msgs.messages:st.chat_message(avatars[msg.type]).write(msg.content)if user_query := st.chat_input(placeholder="Ask me anything!"):st.chat_message("user").write(user_query)with st.chat_message("assistant"):response = qa_chain({"query": user_query})answer = response["result"]st.write(answer)about = st.sidebar.expander("About")
about.write("Powered by [open-retrievals](https://github.com/LongxingTan/open-retrievals)")

请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/19964.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第二届“天洑杯”全国高校数据建模大赛圆满收官

近日&#xff0c;第二届“天洑杯”全国高校数据建模大赛在江苏省无锡市第七届智能优化与调度学术会议现场圆满收官。在为期四周的线上赛中&#xff0c;共有来自全国 71 所高校及企业的 117 支队伍参与角逐&#xff0c;共10支队伍进入决赛。 本届大赛评审组由西安电子科技大学教…

鸿蒙开发接口媒体:【@ohos.multimedia.camera (相机管理)】

相机管理 说明&#xff1a; 开发前请熟悉鸿蒙开发指导文档&#xff1a; gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md点击或者复制转到。 本模块首批接口从API version 9开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 导入模块…

Vue3实战笔记(52)—Vue 3封装持仓分析饼图

文章目录 前言一、封装持仓分析饼图总结 前言 接上文&#xff0c;封装持仓分析饼图。 一、封装持仓分析饼图 EChartsPieBorderRadiusType.vue&#xff1a; <template><div><div ref"chartContainer" style"width: 100%; height: 450px"&g…

vue中使用pinia实现状态管理——useXXXStore函数

vue中使用pinia实现状态管理 大家一定在vue中还见过 useXXXStore这样的函数&#xff0c;用来实现状态管理的。可以把它当成一个永远存在的组件&#xff0c;每个组件都可以读取和写入它。它有三个概念&#xff0c;state、getter 和 action&#xff0c;我们可以假设这些概念相当…

低边驱动与高边驱动

一.高边驱动和低边驱动 低边驱动(LSD): 在电路的接地端加了一个可控开关&#xff0c;低边驱动就是通过闭合地线来控制这个开关的开关。容易实现&#xff08;电路也比较简单&#xff0c;一般由MOS管加几个电阻、电容&#xff09;、适用电路简化和成本控制的情况。 高边驱动&am…

Qt 窗口

在Qt Creator 中创建项目的时候&#xff0c;我们能够选择创建QMainWindow 还是 QWidget 两种窗口。 二者有什么区别呢&#xff1f;其中 QMainWindow 是一种主窗口&#xff0c;包含菜单栏&#xff0c;工具栏&#xff0c;状态栏&#xff0c;中心窗口和浮动窗口等多个窗口组合&…

Java基础学习: 代理模式(Proxy Pattern)

文章目录 一、简介1、介绍2、代理模式在Java中的应用 二、实现方式1、静态代理2、动态代理 三、动态代理1、JDK2、Cglib3、总结 参考 一、简介 1、介绍 代理模式 2、代理模式在Java中的应用 统一异常处理。Mybatis使用了代理。Spring aop实现代理。日志框架。 二、实现方式…

位置参数

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 位置参数也称必备参数&#xff0c;是必须按照正确的顺序传到函数中&#xff0c;即调用时的数量和位置必须和定义时是一样的。 &#xff08;1&#x…

使用 Docker 和 Docker Compose 部署 Vue

使用 Docker 和 Docker Compose 部署 Vue 项目有两种方式&#xff1a;直接使用 Docker 和使用 Docker Compose。 创建 Dockerfile 在Vue.js项目根目录下创建一个 Dockerfile 的文件 # 使用最新的官方 Node.js 镜像作为基础镜像&#xff0c;并命名为 builder 阶段 FROM node:…

内测:ew0.0版本

温馨提示&#xff1a;懒得编&#xff0c;可能会存在一点点bug。 合作请私信我&#xff0c;周六日有空。 合作对象&#xff1a;小学生&#xff0c;初中生不等。 #include<bits/stdc.h> #include<windows.h> using namespace std; void sprintf(string s){int len…

stack和queue(1)

一、stack的简单介绍和使用 1.1 stack的介绍 1.stack是一种容器适配器&#xff0c;专门用在具有先进后出&#xff0c;后进先出操作的上下文环境中&#xff0c;其删除只能从容器的一端进行元素的插入和弹出操作。 2.stack是作为容器适配器被实现的&#xff0c;容器适配器即是…

信号与槽函数的魔法:QT 5编程中的核心机制

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、信号与槽函数的基本概念 二、信号与槽函数的实现原理 三、信号与槽函数的代码实例 四…

搭载算能 BM1684 芯片,面向AI推理计算加速卡

搭载算能 BM1684 芯片&#xff0c;是面向AI推理的算力卡。可集成于服务器、工控机中&#xff0c;高效适配市场上所有AI算法&#xff0c;实现视频结构化、人脸识别、行为分析、状态监测等应用&#xff0c;为智慧城市、智慧交通、智慧能源、智慧金融、智慧电信、智慧工业等领域进…

实用软件分享---- i茅台 在windows上自动预约和自动获取小茅运的软件

专栏介绍:本专栏主要分享一些实用的软件(Po Jie版); 声明1:软件不保证时效性;只能保证在写本文时,该软件是可用的;不保证后续时间该软件能一直正常运行;不保证没有bug;如果软件不可用了,我知道后会第一时间在题目上注明(已失效)。介意者请勿订阅。 声明2:本专栏的…

计算机基础学习路线

计算机基础学习路线 整理自学计算机基础的过程&#xff0c;虽学习内容众多&#xff0c;然始终相信世上无难事&#xff0c;只怕有心人&#xff0c;期间也遇到许多志同道合的同学&#xff0c;现在也分享自己的学习过程来帮助有需要的。 一、数据结构与算法 视频方面我看的是青…

C++_list简单源码剖析:list模拟实现

文章目录 &#x1f680;1. ListNode模板&#x1f680;2. List_iterator模板(重要)&#x1f331;2.1 List_iterator的构造函数&#x1f331;2.2 List_iterator的关于ListNode的行为 &#x1f680;3. Reverse_list_iterator模板(拓展)&#x1f680;4. List模板(核心)&#x1f331…

NVM:Node版本管理切换 vue ‘cnpm‘ 不是内部或外部命令,也不是可运行的程序

nvm使用&#xff1a; Node 多版本管理_node版本管理_骑士梦的博客-CSDN博客 node.js 安装及配置环境变量只看此文_node环境变量设置-CSDN博客 # 安装11.13.0版本。 nvm install 11.13.0# 显示已安装的Node版本列表&#xff08;list可简化为ls&#xff09;。 nvm list# 切换1…

【计算机毕设】基于SpringBoot的房产销售系统设计与实现 - 源码免费(私信领取)

免费领取源码 &#xff5c; 项目完整可运行 &#xff5c; v&#xff1a;chengn7890 诚招源码校园代理&#xff01; 1. 研究目的 随着房地产市场的发展和互联网技术的进步&#xff0c;传统的房产销售模式逐渐向线上转移。设计并实现一个基于Spring Boot的房产销售系统&#xff0…

SpringCloud学习笔记(一)

SpringCloud、SpringCloud Alibaba 前置知识&#xff1a; 核心新组件&#xff1a; 所用版本&#xff1a; 学习方法&#xff1a; 1.看理论&#xff1a;官网 2.看源码&#xff1a;github 一、微服务理论知识 二、关于SpringCloud各种组件的停更/升级/替换 主业务逻辑是&#x…

尝试用智谱机器人+知识库,制作pytorch测试用例生成器

尝试用智谱机器人知识库,制作pytorch测试用例生成器 1 保存pytorch算子文档到txt2 创建知识库3 创建聊天机器人4 测试效果5 分享 背景:是否能将API的接口文档和sample放到RAG知识库,让LLM编写API相关的程序呢 小结:当前的实验效果并不理想,可以生成代码,但几乎都存在BUG 1 保存…