第三单元 —— 第三课:持续运行的 RAG 问答程序
上课程序运行慢在三个环节加载本地 Embedding 模型每次执行脚本都会启动新的 Python 进程并把 BGE 模型从磁盘加载到内存。模型虽然已经缓存不再重复下载但仍需重新加载。重新生成知识库向量InMemoryVectorStore每次启动都会重新计算资料的向量。当前只有三条资料影响较小资料很多时会明显变慢。等待 DeepSeek 网络响应检索结束后还需要调用一次 DeepSeek API速度受网络和服务状态影响。上一课运行时HF_TOKEN是下载限速提示不是错误。模型已缓存后可以避免联网检查embeddings HuggingFaceEmbeddings( model_nameBAAI/bge-small-zh-v1.5, model_kwargs{ device: cpu, local_files_only: True, }, encode_kwargs{normalize_embeddings: True}, )实际项目不会为每个问题重新启动脚本而是程序启动一次 → 加载模型一次 → 建立向量库一次 → 连续回答多个问题因此第一次启动可能较慢但同一程序中的后续提问会快很多。这一课可以把它改造成一个持续运行的知识库聊天程序。所以本课目标Embedding 模型和向量库只初始化一次然后连续回答问题。保存为unit3_lesson3_rag_chat.pyimport os import time from langchain_openai import ChatOpenAI from langchain_huggingface import HuggingFaceEmbeddings from langchain_core.vectorstores import InMemoryVectorStore from langchain_core.prompts import ChatPromptTemplate from langchain_core.output_parsers import StrOutputParser start_time time.perf_counter() # 1. 知识库 texts [ 星河书店的注册用户也称为会员购买图书可以享受九折优惠。, 星河书店周一至周五营业到晚上八点。, 星河书店周六和周日营业到晚上十点。, 星河书店支持七天内凭购物小票退货。, ] # 2. 加载已经下载到本地的 Embedding 模型 embeddings HuggingFaceEmbeddings( model_nameBAAI/bge-small-zh-v1.5, model_kwargs{ device: cpu, local_files_only: True, }, encode_kwargs{normalize_embeddings: True}, ) # 3. 建立向量库和检索器 vector_store InMemoryVectorStore.from_texts( textstexts, embeddingembeddings, ) retriever vector_store.as_retriever( search_kwargs{k: 1} ) # 4. 创建回答链 model ChatOpenAI( modeldeepseek-v4-flash, base_urlhttps://api.deepseek.com, api_keyos.environ[DEEPSEEK_API_KEY], ) prompt ChatPromptTemplate.from_template( 请根据资料简洁回答问题。 可以识别常见的同义表达但不能添加资料中没有的事实。 找不到答案时请回答“资料中没有相关信息”。 资料 {context} 问题 {question} ) answer_chain prompt | model | StrOutputParser() initialization_time time.perf_counter() - start_time print(f初始化完成耗时 {initialization_time:.2f} 秒。) print(输入 exit 可以结束程序。) # 5. 持续接收问题 while True: question input(\n你).strip() if question.lower() exit: print(程序已结束。) break if not question: continue question_start time.perf_counter() documents retriever.invoke(question) context \n.join( document.page_content for document in documents ) answer answer_chain.invoke({ context: context, question: question, }) question_time time.perf_counter() - question_start print(检索资料, context) print(AI, answer) print(f本次耗时{question_time:.2f} 秒)运行.venv\Scripts\activate python unit3_lesson3_rag_chat.py可以连续测试会员买书有优惠吗 周日几点关门 买书后可以退货吗 书店提供送货服务吗 exit这次 Embedding 模型只在程序启动时加载一次。后续每个问题主要耗时会来自 DeepSeek API而不是重复加载本地模型。

相关新闻

AI 答不出“GEO 实测数据在哪看“,只给了搜索关键词:承接层为什么会被跳过

AI 答不出“GEO 实测数据在哪看“,只给了搜索关键词:承接层为什么会被跳过

先说结论:问 AI「哪有 GEO 的实测数据」,它大概率不会给你一个具体账号,而是给你一串搜索关键词。 这不是它保守,也不是它藏着不给。是它的可检索语料里,方法论一抓一大把,而「某个人的数据放在哪」这件事&…

2026/10/31 0:22:45 阅读更多 →
中学家校互联系统源码 Java+SpringBoot+Vue3 前后分离

中学家校互联系统源码 Java+SpringBoot+Vue3 前后分离

一、关键词中学家校互联系统,中学校园家校沟通平台,中学家校互通信息服务系统二、作品包含源码数据库全套环境和工具资源本地部署教程三、项目技术前端技术:Html、Css、Js、Vue3、Element-plus后端技术:Java、SpringBoot2、MyBati…

2026/11/1 16:27:32 阅读更多 →
JWT 调试小细节及Apifox使用小技巧

JWT 调试小细节及Apifox使用小技巧

JWT 调试小细节及Apifox使用小技巧 调接口时遇到一个有意思的现象:我的博客项目有完整的双Token机制,所以在调试工具(Apifox)里不做任何设置鉴权接口也能通;以前写的都是双Token项目,没怎么注意这件事&…

2026/11/6 15:22:26 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/10 23:32:01 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/10 23:32:03 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/11 2:31:33 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/10 16:14:15 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/10 12:51:50 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/10 23:32:10 阅读更多 →

日新闻

周新闻

月新闻