本地知识库问答 RAG 项目:不用大模型也能先跑通技术逻辑
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 |
| 产品版 | 向量数据库 + 权限控制 |
| 企业版 | 文档增量更新 + 答案引用来源 |
| 评估版 | 问答集 + 命中率 + 幻觉率 |
十、避坑指南
| 坑 | 解决方案 |
|---|---|
| 文档切块太大 | 检索不精准 |
| 文档切块太小 | 上下文不足 |
| 不返回来源 | 用户不信任答案 |
| 只看生成效果 | 先评估检索命中率 |
| 资料没答案还硬答 | 提示词里明确要求不知道就说不知道 |
学AI大模型的正确顺序,千万不要搞错了
🤔2026年AI风口已来!各行各业的AI渗透肉眼可见,超多公司要么转型做AI相关产品,要么高薪挖AI技术人才,机遇直接摆在眼前!
有往AI方向发展,或者本身有后端编程基础的朋友,直接冲AI大模型应用开发转岗超合适!
就算暂时不打算转岗,了解大模型、RAG、Prompt、Agent这些热门概念,能上手做简单项目,也绝对是求职加分王🔋

📝给大家整理了超全最新的AI大模型应用开发学习清单和资料,手把手帮你快速入门!👇👇
学习路线:
✅大模型基础认知—大模型核心原理、发展历程、主流模型(GPT、文心一言等)特点解析
✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑
✅开发基础能力—Python进阶、API接口调用、大模型开发框架(LangChain等)实操
✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用
✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代
✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经
以上6大模块,看似清晰好上手,实则每个部分都有扎实的核心内容需要吃透!
我把大模型的学习全流程已经整理📚好了!抓住AI时代风口,轻松解锁职业新可能,希望大家都能把握机遇,实现薪资/职业跃迁~
这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

更多推荐




所有评论(0)