从0开始做基于 RAG 架构的多源非结构化数据自动化 ETL 与知识库构建系统(知识检索与大模型智能问答部分)
第一步新建一个总控脚本 src/app.py完整代码如下import os import sys from loguru import logger from langchain_community.vectorstores import FAISS from langchain_zhipu import ZhipuAIEmbeddings, ChatZhipuAI from langchain_core.prompts import ChatPromptTemplate from langchain_core.output_parsers import StrOutputParser from langchain_core.runnables import RunnablePassthrough class RAGQueryEngine: def __init__(self, db_dir: str): 初始化 RAG 智能问答引擎 :param db_dir: 本地已生成的 FAISS 向量资产目录路径 self.db_dir db_dir # 1. 声明与数据入库时 100% 绝对一致的云端 Embedding 路由若维度对不齐余弦相似度会报错 self.embeddings ZhipuAIEmbeddings( api_keyc343f9d987ef460286a030c6ead013c6.mh6aVsGC2E5TkMuE ) # 2. 物理检查本地资产是否存在防止空指针调用 if not os.path.exists(os.path.join(db_dir, index.faiss)): logger.error(f❌ 找不到本地向量资产请确保 {db_dir} 目录下有 index.faiss 文件。) sys.exit(1) logger.info( 正在从 D 盘载入本地 FAISS 高维矩阵资产...) # allow_dangerous_deserializationTrue 是 LangChain 对加载本地 pkl 账本的安全验证自己生成的资产可放心开启 self.vector_store FAISS.load_local( folder_pathself.db_dir, embeddingsself.embeddings, allow_dangerous_deserializationTrue ) logger.success(✅ 本地向量资产内存级装载完毕高维拉网索引就绪) # 3. 实例化智谱大模型选用最新旗舰大模型 GLM-4-Flash / GLM-4控制温度为 0.1 实现最高学术严谨度 logger.info( 正在激活云端大模型思考引擎...) self.llm ChatZhipuAI( api_keyc343f9d987ef460286a030c6ead013c6.mh6aVsGC2E5TkMuE, modelglm-4-flash, temperature0.1 # 核心参数温度越低大模型说话越死板严谨绝不胡说八道RAG黄金铁律 ) logger.success(✅ 云端大模型网关连接成功) def format_docs(self, docs): 【工业级溯源编排】将检索到的多个 Top-K 文本块进行物理拼接并注入元数据信息 formatted_context [] for i, doc in enumerate(docs): source_file doc.metadata.get(source, 未知文献) chunk_info f--- [参考片段 {i1}来源文献: {source_file}] ---\n{doc.page_content}\n formatted_context.append(chunk_info) return \n.join(formatted_context) def ask(self, question: str): 核心 RAG 闭环高维捞针 - 构建Prompt - 大模型严谨作答 - 精准溯源 logger.info(f 收到用户提问: {question}正在执行高维语义空间拉网检索...) # ----------------------------------------------------------------- # STEP 1: Retrieval (高维捞针) # 将用户的中文问题一键向量化并在内存矩阵里进行高速余弦相似度计算捞出最相关的 4 个片段 # ----------------------------------------------------------------- retriever self.vector_store.as_retriever(search_kwargs{k: 4}) retrieved_docs retriever.get_relevant_documents(question) if not retrieved_docs: logger.warning(⚠️ 在本地向量库中未能检索到任何相关上下文片段) context_str 未找到相关本地文献。 else: logger.success(f 成功捞出 {len(retrieved_docs)} 个高价值学术片段正在进行上下文格式化与溯源对齐...) context_str self.format_docs(retrieved_docs) # ----------------------------------------------------------------- # STEP 2: Prompt Engineering (工业级安全提示词工程) # 用最死板的指令死死约束大模型的意志强迫它必须“依据事实”回答 # ----------------------------------------------------------------- template 你是一个极其严谨的军事科研助手的 AI 协作者。请严格根据以下给出的本地参考文献内容来回答用户的专业问题。 如果问题在参考内容中没有提及请直接回答“根据本地知识库未找到相关学术依据拒绝回答”绝对不允许凭空捏造、瞎编乱造。 回答时请保持学术的客观性、条理性和严密性。 【本地参考文献内容】 {context} 【用户需要解答的问题】 {question} 高级答复方案请分条清晰列出并注明依据的参考片段 prompt ChatPromptTemplate.from_template(template) # ----------------------------------------------------------------- # STEP 3: Chain Execution (极简声明式 LCEL 表达式声明) # 拼装 LangChain 最新的极简数据流执行链 # ----------------------------------------------------------------- rag_chain ( {context: lambda x: context_str, question: RunnablePassthrough()} | prompt | self.llm | StrOutputParser() ) # ----------------------------------------------------------------- # STEP 4: Output (大模型开口说话) # ----------------------------------------------------------------- logger.info( 提示词注入完毕云端大模型正在深度思考中...) response rag_chain.invoke(question) print(\n *40 RAG 智能检索答复系统 *40) print(response) print(*102 \n) if __name__ __main__: # 指向你刚才构建完毕的本地 FAISS 向量资产文件夹 VECTOR_DB_DIRECTORY ./data/vector_db engine RAGQueryEngine(db_dirVECTOR_DB_DIRECTORY) # 【 测试大火开打】输入一个针对你刚刚入库的联邦学习论文的硬核专业问题 # 比如你的论文是针对 Non-IID 场景的联邦学习算法优化我们就针对性地拷问它 test_question 针对Non-IID数据场景有哪些常见的联邦学习算法优化研究策略它们是如何解决非独立同分布问题的 engine.ask(test_question)第二步app.py运行测试python src/app.py预设问题可以根据提供的PDF文献内容进行替换。test_question 针对Non-IID数据场景有哪些常见的联邦学习算法优化研究策略第三步架好前端微框架pip install streamlit第四步编写问答网页端src/web_app.py完整代码如下import streamlit as pd # import streamlit as st import os from app import RAGQueryEngine from loguru import logger # # 1. 网页全局配置设置极客范的标签页图标、标题与宽屏布局 # st.set_page_config( page_titleAura RAG - 专属助手, page_icon, layoutwide ) # # 2. 内存级单例模式缓存防止 Streamlit 每次刷新页面都重复从D盘加载资产 # st.cache_resource def init_rag_engine(): VECTOR_DB_DIRECTORY ./data/vector_db # 直接初始化你在 app.py 里写好的 RAG 智脑 return RAGQueryEngine(db_dirVECTOR_DB_DIRECTORY) try: rag_engine init_rag_engine() except Exception as e: st.error(f❌ 向量资产初始化失败请确保你已运行 pipeline.py 生成本地库错误原因: {str(e)}) st.stop() # # 3. 侧边栏Sidebar数据资产看板设计 # with st.sidebar: st.title( 智能资产看板) st.subheader(当前挂载向量底座) st.info( 引擎类型: FAISS (纯数学矩阵版)\n\n 资产路径: ./data/vector_db) st.divider() st.subheader(️ 审计状态记录) # 读取指纹账本在网页端直观展现当前已经吞入的所有文献 log_file_path ./data/vector_db/processed_files.txt if os.path.exists(log_file_path): with open(log_file_path, r, encodingutf-8) as lf: hashes [line.strip() for line in lf if line.strip()] st.success(f已成功冷沉淀文献指纹: {len(hashes)} 个) else: st.warning(暂无历史审计指纹账本) st.divider() st.caption(Developed by Aura Collaborative Pipeline © 2026) # # 4. 主界面Main Body高颜值 UI 设计 # st.title( Aura RAG 专属科研助手) st.markdown(---) # 初始化 Streamlit 的会话状态Session State用来记住页面刷新前的聊天历史 if messages not in st.session_state: st.session_state.messages [ {role: assistant, content: 你好我是你的专属科研助手。我已经全量装载了本地向量资产。请针对入库的文献如联邦学习算法优化、反洗钱监管评价、考研政治等向我进行硬核拷问} ] # 渲染历史聊天记录让网页看起来具有像 ChatGPT 一样的连续对话质感 for message in st.session_state.messages: with st.chat_message(message[role]): st.markdown(message[content]) # # 5. 核心交互输入框与 RAG 数据流对接 # if question : st.chat_input(请输入你的专业问题...): # 1. 立即在网页上渲染出用户刚才说的话 st.session_state.messages.append({role: user, content: question}) with st.chat_message(user): st.markdown(question) # 2. 拉起大模型思考动画Spinner with st.chat_message(assistant): with st.spinner( 正在检索本地高维矩阵并召回真理片段云端大模型深度思考中...): try: # ------------------------------------------------------------- # 【硬核跨文件调用】 # 为了在网页端不仅展示大模型的最终长句还能单独把“捞出了哪些片段”抓出来 # 我们直接借用我们之前在 app.py 里沉淀下来的检索逻辑。 # ------------------------------------------------------------- # 临时利用 retriever 抓取本次问答的支撑片段展示在网页的折叠面板里 retriever rag_engine.vector_store.as_retriever(search_kwargs{k: 4}) retrieved_docs retriever.get_relevant_documents(question) # 调用我们在 app.py 里重构的高级大模型生成链 # 我们将原本直接打印在控制台的输出拦截并重定向到网页端 # 为了获取干净的答复我们直接借用原本编写好的闭环逻辑 # 构建最死板的指令模板 template 你是一个极其严谨的科研助手的 AI 协作者。请严格根据以下给出的本地参考文献内容来回答用户的专业问题。 如果问题在参考内容中没有提及请直接回答“根据本地知识库未找到相关学术依据拒绝回答”绝对不允许凭空捏造、瞎编乱造。 回答时请保持学术的客观性、条理性和严密性。 【本地参考文献内容】 {context} 【用户需要解答的问题】 {question} from langchain_core.prompts import ChatPromptTemplate from langchain_core.output_parsers import StrOutputParser prompt ChatPromptTemplate.from_template(template) context_str rag_engine.format_docs(retrieved_docs) rag_chain ( {context: lambda x: context_str, question: lambda x: x} | prompt | rag_engine.llm | StrOutputParser() ) # 扔给智谱云端拿到最终答复 response rag_chain.invoke(question) # 3. 网页端高颜值渲染用折叠面板Expander把后台捞出来的“真理片段”亮出来给用户看安全感拉满 if retrieved_docs: with st.expander( 查看本次答复所依据的本地参考文献片段RAG 溯源): st.markdown(ftext\n{context_str}\n) # 4. 渲染大模型的最终严谨正文 st.markdown(response) # 5. 将大模型的回答存入历史记忆防止刷新丢失 st.session_state.messages.append({role: assistant, content: response}) except Exception as e: st.error(f❌ 抱歉处理您的请求时发生异常: {str(e)})第五步web_app.py运行测试streamlit run src/web_app.py敲下回车后控制台会闪过几行本地服务器启动日志紧接着Windows 系统的默认浏览器会自动啪地一声弹出一个崭新的网页标签页。在下方的对话框里再次输入你的专业问题或者随便考它一个论文里的细节。页面上会亮起炫酷的流式思考动画随后大模型不仅会吐出严谨至极的学术解答你还能点击那个“查看本次答复所依据的本地参考文献片段”的折叠框把后台 FAISS 高维捞针抓出来的原文像证据一样展示在网页正中央写的乱七八糟仅作为问答示例展示。第六步Git同步# 1. 将所有代码改动一次性提交到暂存区 git add . # 2. 正式提交并记录 git commit -m feat: 引入FAISS矩阵检索优化 Windows 环境并上线 Streamlit 网页端这个项目就这样暂时完成了这是一个非常简单的智能问答网站上线时间联网搜索这些功能都没有配备还有很多很多改进空间希望我的文章能够帮助到诸君共勉。

相关新闻

Java程序员AI开发新姿势!LangChain4j零基础入门+SpringBoot实战

Java程序员AI开发新姿势!LangChain4j零基础入门+SpringBoot实战

我们是由枫哥组建的IT技术团队,成立于2017年,致力于帮助IT从业者提供实力,成功入职理想企业,我们提供一对一学习辅导,由知名大厂导师指导,分享Java技术、参与项目实战等服务,并为学员定制职业规…

2026/9/27 0:50:36 阅读更多 →
MLX框架入门:为什么Inkling-mlx-2bit是Apple Silicon的最佳选择

MLX框架入门:为什么Inkling-mlx-2bit是Apple Silicon的最佳选择

MLX框架入门:为什么Inkling-mlx-2bit是Apple Silicon的最佳选择 【免费下载链接】Inkling-mlx-2bit 项目地址: https://ai.gitcode.com/hf_mirrors/mlx-community/Inkling-mlx-2bit Inkling-mlx-2bit是基于MLX框架构建的2bit量化模型,专为Apple …

2026/9/26 20:40:22 阅读更多 →
GripMock安全最佳实践:保护你的Mock服务器免受攻击

GripMock安全最佳实践:保护你的Mock服务器免受攻击

GripMock安全最佳实践:保护你的Mock服务器免受攻击 【免费下载链接】gripmock gRPC Mock Server 项目地址: https://gitcode.com/gh_mirrors/gr/gripmock GripMock作为一款功能强大的gRPC Mock服务器,在为开发团队提供便捷API测试环境的同时&…

2026/9/26 1:59:35 阅读更多 →

最新新闻

codex-app-mirror如何15分钟发现Codex新版?“探测→比对→发布“镜像管道全拆解

codex-app-mirror如何15分钟发现Codex新版?“探测→比对→发布“镜像管道全拆解

codex-app-mirror如何15分钟发现Codex新版?"探测→比对→发布"镜像管道全拆解 【免费下载链接】codex-app-mirror 原样镜像官方 Codex 桌面应用:每 15 分钟探测、SHA256 可校验、国内直连下载、 Mac 可增量更新 | Verbatim, verifiable mirror of the off…

2026/9/27 0:50:04 阅读更多 →
SpringBoot集成OCR实战:从票据上传到结构化字段落库

SpringBoot集成OCR实战:从票据上传到结构化字段落库

简介:这是一份面向Java后端开发者与初学者的Spring Boot集成OCR功能实战示例,聚焦如何在Spring Boot应用中接入光学字符识别能力,解决图片文字提取、票据与文档自动化处理等场景需求。项目围绕Tesseract OCR与云服务OCR两条主流路线展开&…

2026/9/27 0:50:04 阅读更多 →
harness-sdk Python SDK v1.14.0 变更详解:结构化输出、多智能体钩子与 MCP 连接管理

harness-sdk Python SDK v1.14.0 变更详解:结构化输出、多智能体钩子与 MCP 连接管理

人工智能大模型AI AgentAgent 框架多智能体工具调用MCP 服务 【免费下载链接】harness-sdk Build an agent harness and control it end-to-end. Open-source SDK for production AI agents in Python & TypeScript - any model, any cloud. 项目地址: https://…

2026/9/27 0:50:04 阅读更多 →
做网店有哪些网站新手避坑速查手册

做网店有哪些网站新手避坑速查手册

做网店有哪些网站新手避坑速查手册 域名服务器搞不懂,是很多准备搞网店的老板第一道坎。别急,这份 做网店有哪些网站 的 速查手册 就是为你准备的,咱们不整虚的,直接拆解到底该怎么选、怎么花冤枉钱最少。…

2026/9/27 0:50:04 阅读更多 →
wordpress4.9.7源码下载

wordpress4.9.7源码下载

新手入门WordPress 4.9.7:告别丑模板,3步搞定高颜值官网 做网站最怕什么?不是代码写不出来,而是装完模板打开一看,丑得让人想哭。那种千篇一律的蓝色渐变、生硬的方盒子布局,放在2024年简直像出土文物。很多新手入门…

2026/9/27 0:50:04 阅读更多 →
做免费网站教程国vs怎么选3个坑让新手少花5000元

做免费网站教程国vs怎么选3个坑让新手少花5000元

做免费网站教程国vs怎么选3个坑让新手少花5000元 网站被黑挂马不知道怎么办?别慌,这往往是新手在搭建初期就埋下的雷。很多刚入行的人盯着“做免费网站教程国vs”这类搜索词,以为只要找对教程就能白嫖一个高逼格官网,结果上线不到一周,首页弹窗…

2026/9/27 0:49:04 阅读更多 →

日新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/27 0:00:34 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/27 0:00:34 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/9/27 0:00:34 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/27 0:00:34 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/27 0:00:34 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/9/27 0:00:34 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/25 20:29:43 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/25 20:29:31 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/26 22:52:30 阅读更多 →