当前位置: 首页 > news >正文

3小时搞定RAG理论+实战篇,大模型入门到精通,收藏这篇就足够了!

RAG(Retrieval Augmented Generation)

检索增强生成 (RAG)是一种 AI 框架,它结合了传统的信息检索系统(如搜索引擎或数据库)与大型语言模型(LLMs)的生成能力。

RAG 的核心思想是:

  1. 检索 (Retrieval): 当用户提出问题时,首先从一个外部的、权威的知识库中检索出与问题最相关的几段信息(上下文)。
  2. 增强 (Augmented): 将检索到的这些信息作为额外的上下文,与用户原始的问题一起,“增强” LLM 的输入。
  3. 生成 (Generation): LLM 在这个增强的上下文中生成回答。

RAG优势

  • 减少幻觉 (Hallucinations): LLM 倾向于“编造”不存在的事实。RAG 通过提供真实、可靠的外部信息,大大降低了 LLM 产生不准确或虚假信息的可能性。
  • 知识时效性:LLM 的训练数据是静态的。RAG 允许你使用最新的数据(例如,你 MySQL 数据库中每天更新的课程信息),而无需重新训练或微调 LLM。
  • 特定领域知识:LLM 可能对你的公司内部数据、特定行业的术语或小众知识了解甚少。RAG 使 LLM 能够回答这些特定领域的问题。
  • 可追溯性/可解释性: 由于回答是基于检索到的文档生成的,你可以很容易地提供引用来源 (source_documents),让用户知道答案来自哪里,增加了透明度和信任度。
  • 成本效益:与耗时且昂贵的 LLM 微调相比,RAG 通常是更经济高效的解决方案。你只需更新向量数据库即可。

RAG实战

AI课程规划+课程ID

课程ID对应数据库中的, 这些数值AI是不能识别的, 需要增强之后输出。

环境准备

这里用到的包有很多, 主要有这些:

  • streamlit
  • langchain
  • langchain-core
  • pymysql
  • faiss-cpu

我目前用到的库, 可以选择性复制:

aiohappyeyeballs==2.6.1aiohttp==3.11.13aiosignal==1.3.2altair==5.5.0annotated-types==0.7.0anyio==4.8.0attrs==25.1.0blinker==1.9.0cachetools==5.5.2certifi==2025.1.31charset-normalizer==3.4.1click==8.1.8dashscope==1.22.2dataclasses-json==0.6.7distro==1.9.0frozenlist==1.5.0gitdb==4.0.12GitPython==3.1.44greenlet==3.1.1h11==0.14.0httpcore==1.0.7httpx==0.28.1httpx-sse==0.4.0idna==3.10Jinja2==3.1.6jiter==0.9.0jsonpatch==1.33jsonpointer==3.0.0jsonschema==4.23.0jsonschema-specifications==2024.10.1langchain==0.3.20langchain-community==0.3.19langchain-core==0.3.45langchain-deepseek==0.1.2langchain-openai==0.3.8langchain-text-splitters==0.3.6langsmith==0.3.15MarkupSafe==3.0.2marshmallow==3.26.1multidict==6.1.0mypy-extensions==1.0.0narwhals==1.30.0numpy==2.2.3openai==1.66.3orjson==3.10.15packaging==24.2pandas==2.2.3pillow==11.1.0propcache==0.3.0protobuf==5.29.3pyarrow==19.0.1pydantic==2.10.6pydantic-settings==2.8.1pydantic_core==2.27.2pydeck==0.9.1python-dateutil==2.9.0.post0python-dotenv==1.0.1pytz==2025.1PyYAML==6.0.2referencing==0.36.2regex==2024.11.6requests==2.32.3requests-toolbelt==1.0.0rpds-py==0.23.1six==1.17.0smmap==5.0.2sniffio==1.3.1SQLAlchemy==2.0.39streamlit==1.43.1tenacity==9.0.0tiktoken==0.9.0toml==0.10.2tornado==6.4.2tqdm==4.67.1typing-inspect==0.9.0typing_extensions==4.12.2tzdata==2025.1urllib3==2.3.0watchdog==6.0.0websocket-client==1.8.0yarl==1.18.3zstandard==0.23.0PyMySQL==1.1.1faiss-cpu==1.11.0

当前这里也需要有api-key, 这个langchain框架大部分都支持的。

分步处理
  • 外部知识库(mysql)
# src.api.useCourse.pyimport reimport pymysqlimport pandas as pdfrom langchain_core.documents import Documentdef fetch_and_preprocess_data(table_name, course_name, course_id): print("开始查询数据...") # 建立连接 conn = pymysql.connect( host='****', user='****', password='****', database='****' ) try: with conn.cursor() as cursor: # 查询数据 query = f"SELECT {course_name}, {course_id} FROM {table_name} LIMIT 20" cursor.execute(query) data = cursor.fetchall() print("查询结果:") print(data) df = pd.DataFrame(data, columns=['course_name', 'course_id']) # 文本预处理函数 def preprocess_text(text): ifnot isinstance(text, str): return"" text = re.sub(r'<.*?>', '', text) # 去除HTML标签 text = re.sub(r'\s+', ' ', text).strip() # 压缩空白符 return text df['cleaned_text'] = df[course_name].apply(preprocess_text) print("✅ 数据预处理完成。") # df.to_csv('data.csv', index=False) return df except Exception as e: print(f"❌ 查询或预处理MySQL数据失败: {e}") return pd.DataFrame() finally: if conn: conn.close()def getMysqlDocuments(): # 示例:从 'tb_course' 表中提取 'course_name' 字段 mysql_data_df = fetch_and_preprocess_data('tb_course', 'course_name', 'id') ifnot mysql_data_df.empty: documents = [] for index, row in mysql_data_df.iterrows(): # 确保文本和ID有效 if pd.notna(row['cleaned_text']) and row['cleaned_text'].strip() and pd.notna(row['course_id']): doc = Document( page_content=row['cleaned_text'], metadata={ "course_id": str(row['course_id']), # 建议将ID转换为字符串 "original_content": row['course_name'] # 存储原始内容,方便后续追溯 } ) documents.append(doc) if documents: print(f"✅ 成功构建 {len(documents)} 个 LangChain Document 对象。") print("\n第一个 Document 示例:") print(documents[0]) else: print("⚠️ 没有有效的 Document 对象可供处理。") return documents
  • 检索组件(embedding)
  1. 加载mysql或者CSV文件
# load-file.pyfrom langchain_community.document_loaders import PyPDFLoader, Docx2txtLoaderfrom frontend.components.sidebar import check_csv_in_folderimport streamlit as stfrom src.api.useCourse import getMysqlDocumentsdef load_file(): all_docs = [] load_files = check_csv_in_folder() mysql_docs = getMysqlDocuments() print(load_files)if len(load_files) == 0 : st.warning("未检测到上传文件")else: for file in load_files: file_path = f"/data/raw/{file}" # 加载 PDF 文件 pdf_loader = PyPDFLoader(file_path) pdf_docs = pdf_loader.load() all_docs = all_docs + pdf_docs# 合并所有文档return all_docs + mysql_docs
  1. 数据清洗
# transform-file.pyfrom src.model_manage.load_file import load_filefrom langchain.text_splitter import RecursiveCharacterTextSplitterfrom langchain_core.documents import Document# 过滤和清洗def clean_text(doc): # 示例:移除多余的空格和换行符 cleaned_content = doc.page_content.replace("\n", " ").strip() # 保留原始元数据(可选) return Document(page_content=cleaned_content, metadata=doc.metadata)# 文本转换def transform_data(): # 加载文件 docs = load_file() if docs isNone: returnNone # 分块处理 text_splitter = RecursiveCharacterTextSplitter( chunk_size=500, # 每块文本的最大长度 chunk_overlap=50, # 块之间的重叠长度 length_function=len ) split_docs = text_splitter.split_documents(docs) # 清洗文本 cleaned_docs = [clean_text(doc) for doc in split_docs] return cleaned_docs
  1. 向量化处理
# embedding.pyfrom langchain_community.embeddings import DashScopeEmbeddingsfrom langchain_community.vectorstores import FAISSfrom src.model_manage.transform_file import transform_data""" 向量化文本数据 @author: petter"""def embedding_data(): cleaned_docs = transform_data()if cleaned_docs isNone: returnNone# 向量化文本 embeddings = DashScopeEmbeddings( model="text-embedding-v2", )# 生成向量数据库 vector_db = FAISS.from_documents(cleaned_docs, embeddings)# 保存到本地(可选) vector_db.save_local("faiss_index")return vector_db
  • 增强/上下文注入
import streamlit as stfrom langchain.chains import RetrievalQAfrom langchain_core.prompts import ChatPromptTemplatefrom langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandlerfrom langchain_core.runnables import RunnableLambdafrom operator import itemgetterfrom src.model_manage.embedding import embedding_datavector_db = embedding_data()# 模型初始化# --------------------------@st.cache_resourcedef get_model(): """初始化并缓存DeepSeek模型""" qa_chain = RetrievalQA.from_chain_type( llm = 大模型名称, chain_type="stuff", # 上下文检索 retriever=vector_db.as_retriever( search_type="similarity", search_kwargs={"k": 3} # 检索最相似的 3 个文档 ), return_source_documents=True, ) return qa_chain
  • 生成组件
def generate_stream_response(prompt): """生成流式响应内容""" model = get_model() # 流式响应数据增强 final_chain = model | RunnableLambda(postprocess_ai_response) chain = final_chain.invoke({ "query": prompt }) try: for chunk in chain: yield chunk except Exception as e: yield f"⚠️ 请求失败:{str(e)}"
  • 响应内容增强
# 处理AI的回答, 添加自定义信息def postprocess_ai_response(input_dict: dict) -> str: ai_response = input_dict["result"] # AI的回答 source_documents = input_dict.get("source_documents", []) # 检索到的源文档 custom_info = "" related_course_ids = set() if source_documents: for doc in source_documents: course_id = doc.metadata.get("course_id") if course_id: related_course_ids.add(course_id) if related_course_ids: custom_info = f"\n\n--- 本次回答引用了以下课程ID:{', '.join(sorted(list(related_course_ids)))} ---" final_output = f"{ai_response}{custom_info}" return final_output

室内课程规划

到这里, RAG核心功能代码已经全部完成了, 至于页面效果, 需要做些调整, ⛽️⛽️

其实这里增强的只有课程ID, 客户端便可以根据课程ID,查询出相对应的课程详情, 展示对应课程或者计划或者其他的方式呈现给用户, 这里相当API

想入门 AI 大模型却找不到清晰方向?备考大厂 AI 岗还在四处搜集零散资料?别再浪费时间啦!2025 年AI 大模型全套学习资料已整理完毕,从学习路线到面试真题,从工具教程到行业报告,一站式覆盖你的所有需求,现在全部免费分享

👇👇扫码免费领取全部内容👇👇

一、学习必备:100+本大模型电子书+26 份行业报告 + 600+ 套技术PPT,帮你看透 AI 趋势

想了解大模型的行业动态、商业落地案例?大模型电子书?这份资料帮你站在 “行业高度” 学 AI

1. 100+本大模型方向电子书

2. 26 份行业研究报告:覆盖多领域实践与趋势

报告包含阿里、DeepSeek 等权威机构发布的核心内容,涵盖:

  • 职业趋势:《AI + 职业趋势报告》《中国 AI 人才粮仓模型解析》;
  • 商业落地:《生成式 AI 商业落地白皮书》《AI Agent 应用落地技术白皮书》;
  • 领域细分:《AGI 在金融领域的应用报告》《AI GC 实践案例集》;
  • 行业监测:《2024 年中国大模型季度监测报告》《2025 年中国技术市场发展趋势》。

3. 600+套技术大会 PPT:听行业大咖讲实战

PPT 整理自 2024-2025 年热门技术大会,包含百度、腾讯、字节等企业的一线实践:

  • 安全方向:《端侧大模型的安全建设》《大模型驱动安全升级(腾讯代码安全实践)》;
  • 产品与创新:《大模型产品如何创新与创收》《AI 时代的新范式:构建 AI 产品》;
  • 多模态与 Agent:《Step-Video 开源模型(视频生成进展)》《Agentic RAG 的现在与未来》;
  • 工程落地:《从原型到生产:AgentOps 加速字节 AI 应用落地》《智能代码助手 CodeFuse 的架构设计》。

二、求职必看:大厂 AI 岗面试 “弹药库”,300 + 真题 + 107 道面经直接抱走

想冲字节、腾讯、阿里、蔚来等大厂 AI 岗?这份面试资料帮你提前 “押题”,拒绝临场慌!

1. 107 道大厂面经:覆盖 Prompt、RAG、大模型应用工程师等热门岗位

面经整理自 2021-2025 年真实面试场景,包含 TPlink、字节、腾讯、蔚来、虾皮、中兴、科大讯飞、京东等企业的高频考题,每道题都附带思路解析

2. 102 道 AI 大模型真题:直击大模型核心考点

针对大模型专属考题,从概念到实践全面覆盖,帮你理清底层逻辑:

3. 97 道 LLMs 真题:聚焦大型语言模型高频问题

专门拆解 LLMs 的核心痛点与解决方案,比如让很多人头疼的 “复读机问题”:


三、路线必明: AI 大模型学习路线图,1 张图理清核心内容

刚接触 AI 大模型,不知道该从哪学起?这份「AI大模型 学习路线图」直接帮你划重点,不用再盲目摸索!

路线图涵盖 5 大核心板块,从基础到进阶层层递进:一步步带你从入门到进阶,从理论到实战。

L1阶段:启航篇丨极速破界AI新时代

L1阶段:了解大模型的基础知识,以及大模型在各个行业的应用和分析,学习理解大模型的核心原理、关键技术以及大模型应用场景。

L2阶段:攻坚篇丨RAG开发实战工坊

L2阶段:AI大模型RAG应用开发工程,主要学习RAG检索增强生成:包括Naive RAG、Advanced-RAG以及RAG性能评估,还有GraphRAG在内的多个RAG热门项目的分析。

L3阶段:跃迁篇丨Agent智能体架构设计

L3阶段:大模型Agent应用架构进阶实现,主要学习LangChain、 LIamaIndex框架,也会学习到AutoGPT、 MetaGPT等多Agent系统,打造Agent智能体。

L4阶段:精进篇丨模型微调与私有化部署

L4阶段:大模型的微调和私有化部署,更加深入的探讨Transformer架构,学习大模型的微调技术,利用DeepSpeed、Lamam Factory等工具快速进行模型微调,并通过Ollama、vLLM等推理部署框架,实现模型的快速部署。

L5阶段:专题集丨特训篇 【录播课】


四、资料领取:全套内容免费抱走,学 AI 不用再找第二份

不管你是 0 基础想入门 AI 大模型,还是有基础想冲刺大厂、了解行业趋势,这份资料都能满足你!
现在只需按照提示操作,就能免费领取:

👇👇扫码免费领取全部内容👇👇

2025 年想抓住 AI 大模型的风口?别犹豫,这份免费资料就是你的 “起跑线”!

http://www.cnnetsun.cn/news/22111.html

相关文章:

  • 何为前端工程化?一文给你说透前端工程化,收藏这篇就够了
  • 免费学习资源|谷歌 5天AI Agents 强化课程|十一月开课
  • 前端及其技术栈,零基础入门到精通,收藏这篇就够了
  • vscode 前端常用插件推荐,零基础入门到精通,收藏这篇就够了
  • 前端牛马 被优化,二选一
  • 社交媒体用户行为特征与发布时间的关联性
  • 微服务编排引擎Conductor:源码编译与定制化开发实战手册
  • WINCC实现手机 APP 远程监控及短信报警方案
  • 《Python学习手册》第1章 Python概述
  • 西南民族大学软件工程25级研究生赴华清远见成都中心开启元宇宙实训之旅
  • Obsidian图像工具包:终极图片管理与编辑指南
  • 自主高性价比、高精度车规级姿态感知、倾角感知模组-应用消费级无人机、自动驾驶、机器人、智能制造、基础设施、智能穿戴等
  • ComfyUI智能修复技术:图像处理的革命性突破
  • 碳硅协同:人工智能作为碳基生命合作伙伴的终极形态分析
  • 小公司效率低、管理乱?一张《四维照妖镜》,照出你的“效率黑洞”
  • 拒绝无意义刷屏,打造高效率热点追踪,极空间部署『TrendRadar』
  • 3步精通JSON对比工具:从新手到高手的实战指南
  • lombok的几个核心注解是什么?
  • Qwen3-VL-30B-A3B-Thinking-FP8多模态大模型实战指南:从技术突破到产业落地
  • 庄散资金主买卖差、散买卖差
  • AI办公工具选型指南:从文档到PPT,这些工具如何提升效率?
  • Web 漏洞扫描入门没头绪?2025 十大工具(详细拆解),零基础也能从入门到精通!
  • Morisawa BIZ UDGothic 终极字体配置指南:提升文档专业度的免费利器
  • Markn:轻量级Markdown查看器的终极指南——提升文档阅读体验
  • 小白必看!大模型入门指南
  • 一篇图文彻底搞懂什么是AI Agent
  • Kubernetes备份工具API实战指南:从入门到精通
  • 18、Linux数据搜索、提取与归档全解析
  • 19、Linux 文件操作与编辑全解析
  • 日薪2000+的 “ 护网行动 ” 到底是什么?