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

新手必看!用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(encoding="utf-8") docs.append({ "file": path.name, "text": text }) return docsdocs = load_docs("docs")print("文档数量:", len(docs))

五、第二步:把长文切成小块

RAG 不能直接把整篇文章都塞进去,要先切块。

def chunk_text(text, chunk_size=400, overlap=80): 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_pattern=r"(?u)\b\w+\b", max_features=5000)matrix = vectorizer.fit_transform(texts)def search(query, top_k=3): 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%免费】🆓

http://www.jsqmd.com/news/1158051/

相关文章:

  • 亲身到店探访海口亨得利官方名表服务中心|地址与官方客服热线(2026年7月更新) - 亨得利官方
  • 何恺明团队新研究:从多视图学习本质视觉表征,突破监督学习泛化瓶颈
  • 【AI专栏】图解Transformer - 第05章:LLM 推理工程
  • SAP HANA JDBC ngdbc 2.20.11 实战:3种高级调试与性能追踪配置详解
  • 全屋WiFi怎么选?Mesh和WDS差别巨大,别再白花冤枉钱
  • 2026年7月最新万国龙湖杭州上城天街维修保养服务电话 - 万国中国官方服务中心
  • EL-JY-II 实验箱 3 种存储器访问模式对比:手动开关、键盘监控与 FPGA 模拟
  • PixWorld像素空间扩散:3D场景生成与重建的统一框架解析
  • 还在为网络中断发愁?tchMaterial-parser让电子课本随时随地为你服务
  • 京东十大靶向人群 vs 天猫八大策略人群:5 个维度的精细化运营对比指南
  • STM32F103R6 PROTEUS9.0 FREERTOS实现双任务流水灯
  • 亨得利官方名表服务中心|完整地址及官方电话权威信息通告(2026年7月更新) - 亨得利官方博客
  • OpenRouter与MCP协议结合:AI推理成本降低24倍实战方案
  • 基于ADS127L11与STM32的高精度信号采集系统设计
  • 16-首屏卡在启动页-把初始化任务分级放到可控链路
  • 2026年行业内耐用的XPS挤塑板订做厂家排名前十如何选 - 品牌排行榜
  • OpenClaw-CN国内免翻墙配置指南:全链路国产化部署
  • 运算符,简单学!
  • 2026年7月最新石家庄帝舵官方售后联系电话与客户服务中心网点地址 - 帝舵中国官方服务中心
  • 155.工业级模块化 PLC 设计!变频斜坡调速 + 状态机分拣 + 锁存报警系统
  • VSCode ESLint 配置实战:自动规避 90% 的 JavaScript Unexpected identifier 错误
  • iOS 上架入门:证书、描述文件、IPA 上传到底是什么关系?
  • 计算一列中某个值的个数
  • 成都双流区西航港街道亨得利官方名表服务中心电话公示(2026年7月最新) - 亨得利钟表维修中心
  • 有了大模型,为什么还要智能体?
  • 重庆 CPPM 报名授权(众智商学院)课程中心 - 众智商学院cppm官方
  • 情感AI心理危机干预全链路工程方案:从识别、熔断到人工联动
  • 无像素级透明化:AI视觉引擎穿透盲区,重构园区数字空间 技术白皮书 V1.0
  • 亨得利官方名表服务中心|最新热线和全部维修地址权威信息公示(2026年7月更新) - 亨得利官方博客
  • 猫抓浏览器插件:5步掌握网页资源下载的终极指南