新手必看!用Python轻松打造你的第一个RAG项目,玩转AI知识库问答!
RAG 是这两年非常热门的方向把企业文档、课程资料、产品手册放进知识库让 AI 能基于资料回答问题。但很多新手一上来就卡在大模型 API、向量数据库、框架选择上。其实 RAG 的核心逻辑很简单切文档、做索引、检索相关片段、再生成回答。今天我们先不用复杂框架用 Python 做一个最小可运行版 RAG 项目。一、项目目标输入一批 Markdown 文档用户提问后系统返回最相关的文档片段。比如你问数据清洗时缺失值怎么处理系统能从你的文章库里找到“均值填充、中位数填充、插值法”相关内容。二、可视化总览RAG 的完整链路本地知识库 RAG 技术流程RAG 项目最容易讲散这张框架图可以帮助读者快速理解文档不是直接丢给模型而是先切块、向量化、检索再把相关片段交给模型回答。检索片段相似度示例这张图适合放在“测试检索效果”后面它展示了不同文档片段和用户问题的相似度能直观看出系统为什么选择某几个片段作为上下文。三、项目目录rag_demo/ docs/ article_01.md article_02.md rag_search.py四、第一步读取所有 Markdown 文档from pathlib import Pathdef load_docs(folder): docs [] for path in Path(folder).glob(*.md): text path.read_text(encodingutf-8) docs.append({ file: path.name, text: text }) return docsdocs load_docs(docs)print(文档数量, len(docs))五、第二步把长文切成小块RAG 不能直接把整篇文章都塞进去要先切块。def chunk_text(text, chunk_size400, overlap80): chunks [] start 0 while start len(text): end start chunk_size chunks.append(text[start:end]) start end - overlap return chunksall_chunks []for doc in docs: chunks chunk_text(doc[text]) for i, chunk in enumerate(chunks): all_chunks.append({ file: doc[file], chunk_id: i, content: chunk })print(切块数量, len(all_chunks))overlap的作用是保留上下文避免答案刚好被切断。六、第三步用 TF-IDF 做一个轻量检索器正式项目常用 embedding 向量模型。为了先跑通逻辑这里用 sklearn 的 TF-IDF。from sklearn.feature_extraction.text import TfidfVectorizerfrom sklearn.metrics.pairwise import cosine_similaritytexts [item[content] for item in all_chunks]vectorizer TfidfVectorizer( token_patternr(?u)\b\w\b, max_features5000)matrix vectorizer.fit_transform(texts)def search(query, top_k3): query_vec vectorizer.transform([query]) scores cosine_similarity(query_vec, matrix)[0] top_idx scores.argsort()[::-1][:top_k] results [] for idx in top_idx: results.append({ score: scores[idx], file: all_chunks[idx][file], content: all_chunks[idx][content] }) return results七、第四步测试检索效果query 缺失值应该怎么处理results search(query)for r in results: print( * 50) print(相似度, round(r[score], 4)) print(来源, r[file]) print(r[content][:300])如果最相关的片段排在前面说明检索系统已经能工作。八、第五步拼成 RAG 提示词真正接入大模型时可以把检索结果拼成提示词。def build_prompt(query, results): context \n\n.join([ f来源{r[file]}\n内容{r[content]} for r in results ]) prompt f请根据以下资料回答问题。如果资料中没有答案请说“资料中没有找到明确答案”。资料{context}问题{query} return promptprompt build_prompt(query, results)print(prompt)这一步就是 RAG 的关键让模型基于检索到的资料回答而不是凭空发挥。九、项目升级路线阶段技术选择入门版TF-IDF 余弦相似度进阶版embedding 模型 FAISS产品版向量数据库 权限控制企业版文档增量更新 答案引用来源评估版问答集 命中率 幻觉率十、避坑指南坑解决方案文档切块太大检索不精准文档切块太小上下文不足不返回来源用户不信任答案只看生成效果先评估检索命中率资料没答案还硬答提示词里明确要求不知道就说不知道说真的这两年看着身边一个个搞Java、C、前端、数据、架构的开始卷大模型挺唏嘘的。大家最开始都是写接口、搞Spring Boot、连数据库、配Redis稳稳当当过日子。结果GPT、DeepSeek火了之后整条线上的人都开始有点慌了大家都在想“我是不是要学大模型不然这饭碗还能保多久”我先给出最直接的答案一定要把现有的技术和大模型结合起来而不是抛弃你们现有技术掌握AI能力的Java工程师比纯Java岗要吃香的多。即使现在裁员、降薪、团队解散的比比皆是……但后续的趋势一定是AI应用落地大模型方向才是实现职业升级、提升薪资待遇的绝佳机遇这绝非空谈。数据说话2025年的最后一个月脉脉高聘发布了《2025年度人才迁徙报告》披露了2025年前10个月的招聘市场现状。AI领域的人才需求呈现出极为迫切的“井喷”态势2025年前10个月新发AI岗位量同比增长543%9月单月同比增幅超11倍。同时在薪资方面AI领域也显著领先。其中月薪排名前20的高薪岗位平均月薪均超过6万元而这些席位大部分被AI研发岗占据。与此相对应市场为AI人才支付了显著的溢价算法工程师中专攻AIGC方向的岗位平均薪资较普通算法工程师高出近18%产品经理岗位中AI方向的产品经理薪资也领先约20%。当你意识到“技术AI”是个人突围的最佳路径时整个就业市场的数据也印证了同一个事实AI大模型正成为高薪机会的最大源头。最后我在一线科技企业深耕十二载见证过太多因技术卡位而跃迁的案例。那些率先拥抱 AI 的同事早已在效率与薪资上形成代际优势我意识到有很多经验和知识值得分享给大家也可以通过我们的能力和经验解答大家在大模型的学习中的很多困惑。我整理出这套 AI 大模型突围资料包【允许白嫖】✅从入门到精通的全套视频教程✅AI大模型学习路线图0基础到项目实战仅需90天✅大模型书籍与技术文档PDF✅各大厂大模型面试题目详解✅640套AI大模型报告合集✅大模型入门实战训练这份完整版的大模型 AI 学习和面试资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】①从入门到精通的全套视频教程包含提示词工程、RAG、Agent等技术点② AI大模型学习路线图0基础到项目实战仅需90天全过程AI大模型学习路线③学习电子书籍和技术文档市面上的大模型书籍确实太多了这些是我精选出来的④各大厂大模型面试题目详解⑤640套AI大模型报告合集⑥大模型入门实战训练获取方式有需要的小伙伴可以保存图片到wx扫描二v码免费领取【保证100%免费】

相关新闻

STM32 HAL库 TIM定时器中断:3步配置HAL_TIM_PeriodElapsedCallback实现1ms精准任务调度

STM32 HAL库 TIM定时器中断:3步配置HAL_TIM_PeriodElapsedCallback实现1ms精准任务调度

STM32 HAL库定时器中断实战:3步构建1ms精准任务调度系统在嵌入式开发中,定时器中断是实现周期性任务调度的核心机制。对于STM32开发者而言,HAL库提供的HAL_TIM_PeriodElapsedCallback回调函数是处理定时器中断的利器。本文将带你从零开始&…

2026/7/10 2:28:11 阅读更多 →
LangChain Messages 协议详解:SystemMessage 位置错误与 OpenAI API 400 报错根源

LangChain Messages 协议详解:SystemMessage 位置错误与 OpenAI API 400 报错根源

1. 为什么刚写两行 LangChain 代码就报错“messages[1].role must be user or assistant”?你是不是也遇到过这种场景:照着官网文档或某篇教程,复制粘贴几行 LangChain 的代码,调用ChatOpenAI或其他大模型接口时,控制台…

2026/7/10 2:28:11 阅读更多 →
应用密码学中的ASCII:从字符编码到加密基石

应用密码学中的ASCII:从字符编码到加密基石

引言在应用密码学的世界里,我们谈论的是如何保护信息的机密性、完整性和真实性。但一个最基础却容易被忽视的问题是:信息在计算机中究竟是以什么形式存在的?答案就是二进制。计算机底层硬件只能识别0和1两个数字,而我们日常使用的…

2026/7/10 2:26:10 阅读更多 →

最新新闻

Spire.Doc for Python 3.12 实战:Word 转 HTML 保留 3 种关键格式(图片/表单/页眉)

Spire.Doc for Python 3.12 实战:Word 转 HTML 保留 3 种关键格式(图片/表单/页眉)

Spire.Doc for Python 3.12 深度解析:Word转HTML保留图片/表单/页眉的工程实践在文档自动化处理流程中,Word到HTML的格式转换一直是开发者面临的典型挑战。不同于简单的文本转换,真正的难点在于如何精确控制HTML输出中的复杂元素呈现。本文将…

2026/7/10 4:20:51 阅读更多 →
Python Socket 即时通信实战:Twisted 框架实现 1000+ 并发连接服务器

Python Socket 即时通信实战:Twisted 框架实现 1000+ 并发连接服务器

Python Socket 即时通信实战:Twisted 框架实现 1000 并发连接服务器1. 为什么选择 Twisted 框架?在构建高性能即时通信服务器时,开发者常常面临一个关键选择:是使用原生Socket还是成熟的异步框架?原生Socket虽然直观&a…

2026/7/10 4:20:51 阅读更多 →
cmake项目使用导入静态库的方式添加源文件

cmake项目使用导入静态库的方式添加源文件

1.源文件 参照cmake项目使用递归CmakeLists.txt的方式添加源文件 先构建项目结构 2.修改 1.修改main.cpp 修改include源文件的方式为 #include "message.h" #include "sort_algorithms.h"2.修改CMakeLists.txt 添加如下行 # 主程序直接依赖消息/排…

2026/7/10 4:18:50 阅读更多 →
DeepSeek自研AI推理芯片:技术原理与开发者应对策略

DeepSeek自研AI推理芯片:技术原理与开发者应对策略

最近AI圈有个消息值得开发者关注:DeepSeek这家以低成本高性能模型著称的公司,正在秘密研发自己的AI推理芯片。这不仅仅是又一家公司加入芯片大战那么简单,背后反映的是整个AI行业正在经历的根本性转变——从依赖通用计算硬件转向为特定场景定…

2026/7/10 4:18:50 阅读更多 →
CP226 实验箱寄存器对比:74HC574 与 74LS273 在 8 位模型机中的 4 点核心差异

CP226 实验箱寄存器对比:74HC574 与 74LS273 在 8 位模型机中的 4 点核心差异

CP226 实验箱寄存器对比:74HC574 与 74LS273 在 8 位模型机中的 4 点核心差异在计算机组成原理实验中,寄存器作为数据暂存的核心部件,其性能直接影响模型机的运行效率。CP226 实验箱选用 74HC574 而非更常见的 74LS273 构建累加器 A 和暂存器…

2026/7/10 4:18:50 阅读更多 →
电子设计单位换算避坑指南:3个易混淆案例与毫/微/纳/皮快速心算法

电子设计单位换算避坑指南:3个易混淆案例与毫/微/纳/皮快速心算法

电子设计单位换算实战指南:从易错案例到高效心算1. 电子设计中的单位换算陷阱在电路设计与调试过程中,单位换算错误是最常见却又最容易被忽视的问题之一。我曾亲眼见证一个资深工程师因为将10nF误读为10μF,导致整个滤波电路失效,…

2026/7/10 4:14:49 阅读更多 →

日新闻

STM32与LTC1864高精度ADC的SPI通信实现

STM32与LTC1864高精度ADC的SPI通信实现

1. 项目背景与核心需求在工业控制和嵌入式系统开发中,模拟信号与数字系统的无缝集成一直是工程师面临的关键挑战。LTC1864作为一款16位高精度ADC转换器,配合STM32F101ZG这类主流微控制器,能够构建高性能的模拟信号采集系统。这种组合特别适合…

2026/7/10 0:03:07 阅读更多 →
猫抓插件:浏览器资源嗅探与视频下载的终极解决方案

猫抓插件:浏览器资源嗅探与视频下载的终极解决方案

猫抓插件:浏览器资源嗅探与视频下载的终极解决方案 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 还在为网页视频无法下载而烦恼吗&am…

2026/7/10 0:05:09 阅读更多 →
直流有刷电机驱动方案:TC78H653FTG与MKV46F256VLH16应用

直流有刷电机驱动方案:TC78H653FTG与MKV46F256VLH16应用

1. 直流有刷电机驱动方案概述在工业自动化和消费电子领域,直流有刷电机因其结构简单、控制方便、成本低廉等优势,仍然是许多应用场景的首选驱动方案。TC78H653FTG作为东芝推出的新一代H桥驱动器,与MKV46F256VLH16微控制器配合使用&#xff0c…

2026/7/10 0:05:09 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/8 16:14:06 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/9 13:46:46 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/9 21:41:05 阅读更多 →

月新闻