【FlashRAG】本地部署与demo运行(二)

article/2025/7/12 23:23:35

前文【FlashRAG】本地部署与demo运行(一)

下载必要的模型文件

完成了项目拉取和依赖下载后,我们需要进一步下载模型文件
在这里插入图片描述
Faiss(Facebook AI Similarity Search)是由Facebook AI团队开发的高效相似性搜索和密集向量聚类库。它专门优化了大规模向量数据库的搜索和聚类任务,适用于机器学习中的嵌入向量检索场景,如推荐系统、图像检索、自然语言处理等。
这里CPU/GPU版本可以自己选择,GPU版本需要看自己的卡和cuda进行选择

 pip install faiss-gpu-cu12pip install faiss-cpu

检索器(Retriever)

我使用的是e5-base-v2模型和bge-small-zh-v1.5模型

git clone https://hf-mirror.com/intfloat/e5-base-v2
git clone https://hf-mirror.com/BAAI/bge-small-zh-v1.5

生成器(Generator)

使用qwen3-0.6b作为生成器

git lfs install
git clone https://www.modelscope.cn/Qwen/Qwen3-0.6B.git

Git LFS(Large File Storage)是 Git 的一个扩展,用于高效管理大文件。我这里因为之前使用过这个模型,所以没有下载到flashrag项目目录内,后面使用时注意看目录是在哪

examples文件配置

在这里插入图片描述
可以看到这里有中英两个demo文件,我们以中文demo为例运行,直接贴出修改后的代码

import sys
import ossys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "../../")))
import streamlit as st
from flashrag.config import Config
from flashrag.utils import get_retriever, get_generator
from flashrag.prompt import PromptTemplateconfig_dict = {"save_note": "demo","generator_model": "qwen-local","retrieval_method": "bge-local","model2path": {"bge-local": "D:/PycharmProjects/FlashRAG/bge-small-zh-v1.5","qwen-local": "D:/PycharmProjects/Qwen3-0.6B",},"corpus_path": "./indexes/general_knowledge.jsonl","index_path": "./indexes/bge_flat.index",
}@st.cache_resource
def load_retriever(_config):return get_retriever(_config)@st.cache_resource
def load_generator(_config):return get_generator(_config)if __name__ == '__main__':st.set_page_config(page_title="FlashRAG 中文 Demo", page_icon="⚡")st.sidebar.title("配置选项")temperature = st.sidebar.slider("温度系数 (temperature):", 0.01, 1.0, 0.5)topk = st.sidebar.slider("检索文档数 TopK:", 1, 10, 5)max_new_tokens = st.sidebar.slider("最大生成长度 (tokens):", 1, 2048, 256)st.title("⚡FlashRAG 中文 Demo")st.write("本系统支持中文文档检索与问答生成,支持本地模型。")query = st.text_area("请输入你的问题:")config = Config("my_config.yaml", config_dict=config_dict)generator = load_generator(config)retriever = load_retriever(config)system_prompt_rag = ("你是一个友好的中文智能助手。请根据下方提供的参考文档回答用户的问题。\n\n{reference}")system_prompt_no_rag = ("你是一个友好的中文智能助手。请根据你的知识回答用户的问题。\n")base_user_prompt = "{question}"prompt_template_rag = PromptTemplate(config, system_prompt=system_prompt_rag, user_prompt=base_user_prompt)prompt_template_no_rag = PromptTemplate(config, system_prompt=system_prompt_no_rag, user_prompt=base_user_prompt)if st.button("生成回答"):with st.spinner("正在检索并生成回答..."):retrieved_docs = retriever.search(query, num=topk)st.subheader("检索参考文档", divider="gray")for i, doc in enumerate(retrieved_docs):doc_title = doc.get("title", "无标题")doc_text = "\n".join(doc["contents"].split("\n")[1:])expander = st.expander(f"【{i + 1}】:{doc_title}", expanded=False)with expander:st.markdown(doc_text, unsafe_allow_html=True)st.subheader("生成回答结果", divider="gray")input_prompt_with_rag = prompt_template_rag.get_string(question=query, retrieval_result=retrieved_docs)response_with_rag = generator.generate(input_prompt_with_rag, temperature=temperature, max_new_tokens=max_new_tokens)[0]st.subheader("带文档的回答:")st.write(response_with_rag)input_prompt_without_rag = prompt_template_no_rag.get_string(question=query)response_without_rag = generator.generate(input_prompt_without_rag, temperature=temperature, max_new_tokens=max_new_tokens)[0]st.subheader("无文档的回答:")st.write(response_without_rag)

主要的修改在config里,把路径替换成自己的本地模型,当然你网速够快、硬件资源够好,直接从线上加载推荐的模型也是可以的

config_dict = {"save_note": "demo","generator_model": "qwen-local","retrieval_method": "bge-local","model2path": {"bge-local": "D:/PycharmProjects/FlashRAG/bge-small-zh-v1.5","qwen-local": "D:/PycharmProjects/Qwen3-0.6B",},"corpus_path": "./indexes/general_knowledge.jsonl","index_path": "./indexes/bge_flat.index",
}

这段代码的作用是让解释器生效,将上级目录的上级目录(即项目根目录)添加到系统的 Python 路径中,不然找不到。

import sys
import ossys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "../../")))

除此之外还要新建一个bat文件,用来跑jsonl进而生成所需的index
在这里插入图片描述
代码如下:

python -m flashrag.retriever.index_builder ^--retrieval_method e5 ^--model_path D:/PycharmProjects/FlashRAG/e5-base-v2 ^--corpus_path D:/PycharmProjects/FlashRAG/examples/quick_start/indexes/general_knowledge.jsonl ^--save_dir D:/PycharmProjects/FlashRAG/examples/quick_start/indexes ^--use_fp16 ^--max_length 512 ^--batch_size 256 ^--pooling_method mean ^--faiss_type Flat```bash
python -m flashrag.retriever.index_builder ^--retrieval_method bge ^--model_path D:/PycharmProjects/FlashRAG/bge-small-zh-v1.5 ^--corpus_path D:/PycharmProjects/FlashRAG/examples/quick_start/indexes/general_knowledge.jsonl ^--save_dir D:/PycharmProjects/FlashRAG/examples/quick_start/indexes ^--use_fp16 ^--max_length 512 ^--batch_size 256 ^--pooling_method mean ^--faiss_type Flat

CD到retriever目录下执行run_indexing.bat即可
在这里插入图片描述
run之后就会在indexes生成两个index文件
路径为FlashRAG/examples/quick_start/indexes
在这里插入图片描述
接着修改examples/quick_start/my_config.yaml文件下的模型,这里我替换为本地模型

save_note: "demo"
generator_model: "qwen-local"
retrieval_method: "bge-local"
model2path:bge-local: "D:/PycharmProjects/FlashRAG/bge-small-zh-v1.5"qwen-local: "D:/PycharmProjects/Qwen3-0.6B"
corpus_path: "./data/general_zh.jsonl"
index_path: "./indexes/bge_flat.index"

examples/methods/my_config.yaml
这里的也改改

# ------------------------------------------------Global Paths------------------------------------------------#
# Paths to models
model2path:e5: "D:/PycharmProjects/FlashRAG/e5-base-v2"bge: "D:/PycharmProjects/FlashRAG/bge-small-zh-v1.5"contriever: "facebook/contriever"llama2-7B-chat: "meta-llama/Llama-2-7b-chat-hf"llama2-7B: "meta-llama/Llama-2-7b-hf"llama2-13B: "meta-llama/Llama-2-13b-hf"llama2-13B-chat: "meta-llama/Llama-2-13b-chat-hf"llama3-8B-instruct: "meta-llama/Meta-Llama-3-8B-Instruct"Qwen3-0.6B: "D:/PycharmProjects/Qwen3-0.6B"# Pooling methods for each embedding model
model2pooling:e5: "mean"bge: "cls"contriever: "mean"jina: 'mean'dpr: cls# Indexes path for retrieval models
method2index:e5: D:/PycharmProjects/FlashRAG/examples/methods/index/nq/e5_Flat.indexbm25: ~contriever: ~# ------------------------------------------------Environment Settings------------------------------------------------#
# Directory paths for data and outputs
data_dir: "dataset/"
save_dir: "output/"gpu_id: "0,1,2,3"
dataset_name: "nq" # name of the dataset in data_dir
split: [ "test" ]  # dataset split to load (e.g. train,dev,test)# Sampling configurations for testing
test_sample_num: ~  # number of samples to test (only work in dev/test split), if None, test all samples
random_sample: False # whether to randomly sample the test samples# Seed for reproducibility
seed: 2024# Whether save intermediate data
save_intermediate_data: True
save_note: 'experiment'# -------------------------------------------------Retrieval Settings------------------------------------------------#
# If set the name, the model path will be find in global paths
retrieval_method: "e5"  # name or path of the retrieval model. 
index_path: ~ # set automatically if not provided. 
faiss_gpu: False # whether use gpu to hold index
corpus_path: ~  # path to corpus in '.jsonl' format that store the documentsinstruction: ~ # instruction for retrieval model
retrieval_topk: 5 # number of retrieved documents
retrieval_batch_size: 256  # batch size for retrieval
retrieval_use_fp16: True  # whether to use fp16 for retrieval model
retrieval_query_max_length: 128  # max length of the query
save_retrieval_cache: False # whether to save the retrieval cache
use_retrieval_cache: False # whether to use the retrieval cache
retrieval_cache_path: ~ # path to the retrieval cache
retrieval_pooling_method: ~ # set automatically if not provideduse_reranker: False # whether to use reranker
rerank_model_name: ~ # same as retrieval_method
rerank_model_path: ~ # path to reranker model, path will be automatically find in `retriever_model2path`
rerank_pooling_method: ~
rerank_topk: 5  # number of remain documents after reranking
rerank_max_length: 512
rerank_batch_size: 256 # batch size for reranker
rerank_use_fp16: True# -------------------------------------------------Generator Settings------------------------------------------------#
framework: vllm # inference frame work of LLM, supporting: 'hf','vllm','fschat'
generator_model: "D:/PycharmProjects/Qwen3-0.6B" # name or path of the generator model
generator_max_input_len: 2048  # max length of the input
generator_batch_size: 2 # batch size for generation, invalid for vllm
generation_params:do_sample: Falsemax_tokens: 32
use_fid: False # whether to use FID, only valid in encoder-decoder model# -------------------------------------------------Refiner Settings------------------------------------------------#
# If set, the refiner will be used to refine the retrieval documents.
refiner_name: ~
refiner_model_path: ~# Used for extractive method (e.g embedding models)
refiner_topk: 5 # number of remain sentence after refiner
refiner_pooling_method: 'mean' # pooling method of refiner model
refiner_encode_max_length: 256
# Used for abstractive method (e.g. generation models like bart-large-cnn)
refiner_max_input_length: 1024
refiner_max_output_length: 512# Specify settings for llmlingua
llmlingua_config:rate: 0.55condition_in_question: 'after_condition'reorder_context: 'sort'dynamic_context_compression_ratio: 0.3condition_compare: Truecontext_budget: "+100"rank_method: 'longllmlingua'
sc_config:'reduce_ratio': 0.5# -------------------------------------------------Evaluation Settings------------------------------------------------#
# Metrics to evaluate the result
metrics: [ 'em','f1','acc','precision','recall']
# Specify setting for metric, will be called within certain metrics
metric_setting:retrieval_recall_topk: 5
save_metric_score: True # whether to save the metric score into txt file

demo文件启动

在quickstart目录下,执行demo文件

streamlit run demo_zh.py

在这里插入图片描述
完成启动
在这里插入图片描述


http://www.hkcw.cn/article/sidZTGSoLi.shtml

相关文章

火狐安装自动录制表单教程——仙盟自动化运营大衍灵机——仙盟创梦IDE

打开火狐插件页面 安装完成 使用 功能 录制浏览器操作 录入地址 开始操作 录制完成 在当今快速发展的软件开发生态中,自动化测试已从一种新兴技术手段,转变为保障软件质量与开发效率不可或缺的关键环节。其重要性体现在多个维度,同时&#x…

【目标检测】【AAAI-2022】Anchor DETR

Anchor DETR: Query Design for Transformer-Based Object Detection 锚点DETR:基于Transformer的目标检测查询设计 论文链接 代码链接 摘要 在本文中,我们提出了一种基于Transformer的目标检测新型查询设计。此前的Transformer检测器中&am…

zTasker一款Windows自动化软件,提升效率:大小仅有10MB,免费无广告

一、zTasker是什么? zTasker是一款发布于2023年9月的免费无广告工具,专为Windows用户打造。它以仅8MB的轻量体积、极低资源占用(内存消耗不足10MB)和秒级启动速度脱颖而出,堪称“任务计划程序的终极强化版”。无论是定…

数学术语之源——绝对值(absolute value)(复数模?)

目录 1. 绝对值:(absolute value): 2. 复数尺度(复尺度):(modulus): 1. 绝对值:(absolute value): 一个实数的绝对值是其不考虑(irrespective)符号的大小(magnitude)。在拉丁语中具有相同意思的单词是“modulus”,这个单词还…

USB充电检测仪-2.USB充电检测仪硬件设计

本系列文章的最终目标是制作一个USB充电检测仪,支持的功能: 显示USB充电电压、电流、功率、充电量(单位WH);实现Typec口和USB-A口的相互转换(仅支持USB 2.0); 当然网上有很多卖这种…

华院计算受邀参展第九届丝绸之路国际博览会暨中国东西部合作与投资贸易洽谈会

2025年5月21日至25日,以“丝路融通开放合作”为主题的第九届丝绸之路国际博览会暨中国东西部合作与投资贸易洽谈会在陕西西安国际会展中心隆重召开。应上海市国内合作交流服务中心和上海科创投集团的邀请,华院计算技术(上海)股份有…

智能路由革命:AI 生态系统的智能高速交警

研究和行业基准测试揭露了一个惊人的事实:大多数企业的 AI 系统运行效率只有 15% 到 20%。罪魁祸首是谁呢?就是糟糕的查询路由。 想象一下这个现实情况: 你所在的组织每在 AI 上花 10 块钱,就有 8 块钱是浪费在把简单查询发送到…

[yolov11改进系列]基于yolov11引入倒置残差块块注意力机制iEMA的python源码+训练源码

【iEMA介绍】 iRMB(Inverted Residual Mobile Block)的框架原理,是一种结合轻量级CNN和注意力机制的方法,用于改进移动设备上的目标检测模型。IRMB通过倒置残差块和元移动块实现高效信息处理,同时保持模型轻量化。本文…

深度学习实战110-基于深度学习的工业系统故障诊断技术研究(卷积网络+注意力机制模型)

大家好,我是微学AI,今天给大家介绍一下深度学习实战110-基于深度学习的工业系统故障诊断技术研究(卷积网络+注意力机制模型)。工业系统故障诊断是确保现代工业设备安全稳定运行的关键技术环节。随着工业自动化和智能化水平的不断提高,传统故障诊断方法在应对日益复杂、多变…

Fluence (FLT) 2026愿景:RWA代币化加速布局AI算力市场

2025年5月29日,苏黎世 - Fluence,企业级去中心化计算平台,荣幸地揭开其2026愿景的面纱,并宣布将于6月1日起启动四大新举措。 Fluence 成功建立、推出并商业化了其去中心化物理基础设施计算网络(DePIN)&…

科学智能赋能空间科学研究(2):AI4S 范式下空间科学实验的核心挑战

中国科学院空间应用工程与技术中心在空间科学实验领域的研究覆盖了多模态空间科学实验数据模式挖掘、领域知识抽取、跨学科知识融合与认知智能等研究内容,有效促进了空间科学实验领域的数据应用生态的体系化建设,相关研究成果已正式发表于权威学术期刊《…

QML 无边框窗口翻转动画

目录 引言核心组件实现无边框翻转窗口(FlipableDemo.qml)登录页面和设置页面(省略)主界面集成(Main.qml) 下载链接 引言 接上篇 QML 滑动与翻转效果(Flickable与Flipable) 。本文通…

若依框架修改模板,添加通过excel导入数据功能

版本:我后端使用的是RuoYi-Vue-fast版本,前端是RuoYi-Vue3 需求: 我需要每个侧边栏功能都需要具有导入excel功能,但是若依只有用户才具备,我需要代码生成的每个功能都拥有导入功能。​ 每次生成一个一个改实在是太麻烦了。索性…

ECS-7000能耗监测系统能耗数据管理机

一、能耗系统介绍 能耗监测系统通过计算机和通讯网络,配电房的现场设备连接为一个有机的整体,实现电网设备运行的远程监控和集中管理。设计中充分体现系统的可用性、先进性、方便性、安全性、可靠性、可扩展性及系统性价比的合理性。 厂家:…

分层模态内相关学习用于无标签三维语义分割

摘要 Recent methods for label-free 3D semantic segmentation aim to assist 3D model training by leveraging the openworld recognition ability of pre-trained vision language models. However, these methods usually suffer from inconsistent and noisy pseudo-lab…

[C++]vc6.0在win10或者win11上下载安装和简单使用教程

VC6.0,即Microsoft Visual C 6.0,是微软公司于1998年推出的一款经典的集成开发环境(IDE),在Windows平台软件开发领域具有重要地位。 它支持C和C语言编程,功能强大且全面。其核心优势在于集成了高效的编译器…

TEC温度控制平台的核心技术解析

TEC-2580-500W-24V TEC温度控制平台是一种基于半导体制冷片(TEC)的高性能温度控制系统,该平台通常由TEC制冷片、温度传感器、控制器、散热系统等部分组成,具有高精度、快速响应、易于集成等优点。具有高精度、高稳定度、长寿命、体…

Spring MVC 框架

目录 1.MVC的定义 2.SpringMVC的实际应用 (1)建立连接 1.RequestMapping注解介绍 2.RequestMapping注解的请求方式 GET请求: POST请求: 指定GET/POST方法类型: (2)请求 传递参数 1.传…

Python+GEE+AI,从基础到实战,全面掌握遥感云大数据分析与可视化!涵盖森林监测、洪涝灾害、干旱评估、植被变化等热点领域的实际应用方案

🔍 遥感技术的飞跃与挑战 随着航空、航天以及近地空间遥感平台的持续发展,遥感技术近年来取得了显著进步。遥感数据的空间分辨率、时间分辨率、光谱分辨率以及数据量都大幅提升,呈现出典型的大数据特征。这为相关研究带来了新的机遇&#xff…

迈迪工具集添加标准件

上次介绍了外购件的选型软件,这次来介绍一下标准件选型工具-迈迪工具集。 机械设计插件-CSDN博客 比如我要给这里的法兰添加螺栓和螺母,就可以打开迈迪工具集,它有丰富的标准件库,挑选自己需要的标准件,然后双击图片&…