视图函数返回Response对象、make_resposne()以及url_for()函数

使用Flask框架,视图函数返回Response对象时,
Flask框架直接 将这个对象 向后续处理环节传递:
from flask import Flask, make_response
@app.route('/ping')
def v_ping():
    rsp = make_response('pong')
    rsp.mimetype = 'text/plain'
    rsp.headers['x-tag'] = 'sth.magic'
    return rsp
make_response()函数用来构造一个Response对象第一个参数为响应的正文

url_for()函数,使用url映射中保存的信息生成url。

用视图函数名作为参数,返回对应的url

实验代码如下:

例如url_for('index')结果是‘/’,url_for('v_ping')结果是‘/ping’.

使用url_for()生成动态地址:动态部分作为参数传入

url_for('user' name='wang,external=True')

返回结果:http://localhost:5000/user/wang

# -*- coding:utf-8 -*-
from flask import Flask,make_response, url_for
app = Flask(__name__)

@app.route('/')
def v_index():
    return '<a href="%s">ping</a>' % url_for('v_ping')


@app.route('/ping')
def v_ping():
    rsp = make_response('pong')
    rsp.mimetype = 'text/plain'
    rsp.headers['x-tag'] = 'sth.magic'
    return rsp

app.run(host='0.0.0.0', port=8080)
import os from typing import List import jieba from dotenv import load_dotenv, find_dotenv from llama_index.core import ( StorageContext, QueryBundle, VectorStoreIndex, ) from llama_index.llms.ollama import Ollama from llama_index.retrievers.bm25 import BM25Retriever from llama_index.core.query_engine import RetrieverQueryEngine from llama_index.core.postprocessor import SentenceTransformerRerank from llama_index.core.node_parser import SentenceSplitter from pipeline import MarkdownHeaderTextSplitter class AdvancedRAG: def __init__(self, file_path): # 加载环境变量 _ = load_dotenv(find_dotenv()) # 加载文档路径 self.file_path = file_path # 初始化全局变量 self.nodes = [] self.retriever = None self.reranker = None self.query_engine = None # 创建节点 self.nodes = self.create_nodes() # 启动系统 self.bootstrap() # 初始化嵌入模型(从本地路径加载) self.embed_model = HuggingFaceEmbedding(model_name="本地模型路径", tokenizer_name="本地模型路径") def create_nodes(self): """ 接收pipline的节点数据 :return: 返回节点列表 """ try: # 创建节点 splitter_with_limit = MarkdownHeaderTextSplitter(self.file_path, is_separator_regex=True) chunks_with_limit = splitter_with_limit.split_text() nodes = splitter_with_limit.chunk_to_TextNode(chunks_with_limit) # 验证节点 if not nodes: print("警告:未创建任何节点") return [] if not isinstance(nodes, list): print("警告:节点不是列表类型") return [] print(f"成功创建 {len(nodes)} 个节点") for node in nodes: print(f"节点标题: {node.node_id}") print(f"节点内容: {node.text}") print("="*20) return nodes except Exception as e: print(f"创建节点时出错: {str(e)}") return [] # 返回空列表而不是 None def bootstrap(self): """初始化 RAG 系统""" # 初始化本地 LLM (Ollama) llm = Ollama( model="qwen3-1.7B", # 使用本地中文模型,例如 qwen:7b base_url="http://localhost:11434", # 本地 Ollama 服务地址 request_timeout=240, temperature=0, system_prompt=( "你是一位维修性工程领域的专家,你的工作是回答相关问题。" "所有问题都与维修相关。" "保持回答的专业性和基于事实 - 不要编造信息。" "如果没有检索到请回答‘未查到相关信息’" ), additional_kwargs={ "num_ctx": 8192, # 设置模型上下文大小 "num_gpu": 1, # 使用GPU加速 }, ) # 创建节点索引 index = VectorStoreIndex(self.nodes) # 创建 BM25 检索器(优化中文) self.retriever = BM25Retriever.from_defaults( similarity_top_k=10, index=index, tokenizer=self.chinese_tokenizer # 使用中文分词器 ) # 6. 创建中文优化重新排序器 # self.reranker = SentenceTransformerRerank( # top_n=5, # 保留更多结果供LLM参考 # model="BAAI/bge-reranker-large-zh" # 中文优化模型 # ) # 7. 创建查询引擎 self.query_engine = RetrieverQueryEngine.from_args( retriever=self.retriever, llm=llm, # node_postprocessors=[self.reranker] ) # 自定义分词函数,使用jieba def jieba_tokenizer(text: str) -> list: return list(jieba.cut(text)) def query(self, query_str: str): """执行查询并返回结果""" # 创建查询包 query_bundle = QueryBundle(query_str=query_str) # 第一步:检索相关节点 nodes = self.retriever.retrieve(query_bundle) # 第二步:重新排序节点 # reranked_nodes = self.reranker.postprocess_nodes( # nodes, # query_bundle=query_bundle # ) # 打印调试信息 print(f"初始检索: {len(nodes)} 个节点") # print(f"重新排序后: {len(reranked_nodes)} 个节点") # 使用查询引擎获取最终响应 response = self.query_engine.query(query_str) return response if __name__ == "__main__": resposne = AdvancedRAG(r"D:\minerU\output\维修手册\auto\维修手册.md").query("冷却系统维修统计表1-5月份维修次数") print(resposne)请根据这段代码进行改编,将bm25检索替换为混合检索,同时设置全局嵌入模型通过setting方法设置
最新发布
08-02
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值