从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/7/25 21:06:54 阅读更多 →
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/7/25 21:06:52 阅读更多 →
GripMock安全最佳实践:保护你的Mock服务器免受攻击

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

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

2026/7/25 19:37:39 阅读更多 →

最新新闻

北京元步科技 GPU 集群实测:AI Infra Lab V0.1 开源,10 个米战士从 GPU 体检打到生产推理

北京元步科技 GPU 集群实测:AI Infra Lab V0.1 开源,10 个米战士从 GPU 体检打到生产推理

一、为什么做这个开源项目 从互联网、移动互联网到 AI 应用爆发,三轮技术周期下来,一个规律很明显: 应用层热闹,但企业真缺的是能把模型搬上集群、算清算力账、过得了私有化合规的 AI Infra 工程能力。 市面上 95% 的教程停在提示…

2026/7/26 5:58:32 阅读更多 →
AI文献综述助手:智能检索与自动写作实践指南

AI文献综述助手:智能检索与自动写作实践指南

1. 项目概述:AI如何重塑文献综述工作流文献综述是学术研究的基石环节,却也是最耗时的部分。传统模式下,研究者需要手动检索数百篇论文,逐篇阅读摘要并分类整理,这个过程往往占据整个研究周期的30%-50%。我们团队开发的…

2026/7/26 5:58:32 阅读更多 →
ScrapeGraphAI:自然语言驱动的智能爬虫开发实践

ScrapeGraphAI:自然语言驱动的智能爬虫开发实践

1. 项目背景与核心价值最近在做一个需要大量数据采集的项目时,偶然发现了ScrapeGraphAI这个开源工具。它最吸引我的地方在于能够直接用自然语言描述需求,自动生成完整的爬虫工作流。这让我想起以前为了抓取某个电商网站的价格数据,花了三天时…

2026/7/26 5:58:32 阅读更多 →
后台日志查询手册:cd、ls、grep、less组合

后台日志查询手册:cd、ls、grep、less组合

文章目录日志的"老巢"藏在哪儿?核心命令逐个击破1,cd(任意门,去自己想去的地方)2,ls(照妖镜,看看里面都有啥)3,grep(大海捞针的神器&am…

2026/7/26 5:58:32 阅读更多 →
基于EfficientNet的实时表情识别系统设计与优化

基于EfficientNet的实时表情识别系统设计与优化

1. 项目概述这个表情识别系统项目是我去年为一个智能客服团队开发的实战解决方案。当时他们需要实时分析客户视频通话时的情绪变化,以便及时调整服务策略。经过3个月的迭代开发,我们最终实现了一个准确率达92.3%的轻量化模型,现在我把整个设计…

2026/7/26 5:58:32 阅读更多 →
C#编程的最佳工具

C#编程的最佳工具

C#是企业中广泛使用的编程语言,特别是那些依赖微软的程序语言。如果您使用C#构建应用程序,则最有可能使用Visual Studio,并且已经寻找了一些扩展来对您的开发进行管理。但是,这个工具列表可能会改变您编写C#代码的方式。 C#编程的…

2026/7/26 5:57:32 阅读更多 →

日新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/26 0:00:31 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/26 0:00:31 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/26 0:00:31 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/26 0:00:31 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/26 0:00:31 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/26 0:00:31 阅读更多 →

月新闻