今天是自学大模型的第一天(sanjose)

【从零到RAG】用Python实现本地AI问答系统(Transformer + FAISS + HuggingFace)In this line of code, minValueIndex is a variable that is assigned the return value of self. searchMin (nums, target). Here, self refers to the instance of the current class, and searchMin is a method of that instance. This method takes two parameters: nums and target.

1.Built a local conversational AI assistant with context memory and retrieval-augmented generation (RAG) using Hugging Face Transformers

🚀 从零实现本地 RAG 系统:Transformer → HuggingFace → 向量检索(完整实战)

📌 一、背景

今天我从 Transformer 基础 出发,逐步完成了一个完整的:

💥 本地 RAG(Retrieval-Augmented Generation)问答系统

整个过程从:

  • 手写 Mini Transformer

  • 到 Hugging Face 调用大模型

  • 再到 FAISS 向量检索

最终实现了:

✅ 基于自定义知识库的智能问答系统(本地运行)


🧠 二、核心知识梳理

1️⃣ Transformer 基础

Transformer 的核心是:

  • Self-Attention(自注意力)

  • Feed Forward Network

  • 多层堆叠

在 GPT 类模型中:

❗ 使用 Masked Self-Attention

作用:

👉 防止模型"看到未来",保证自回归生成


2️⃣ GPT vs BERT(关键区别)

模型 类型 能力
GPT Decoder-only 生成
BERT Encoder-only 理解

👉 后面做 RAG:

  • BERT → 做 embedding

  • GPT → 做生成


3️⃣ LLM 的本质

复制代码
Prompt → Transformer → Next Token → Next Token...

👉 所有大模型本质都是:

💥 预测下一个词


🚀 三、从 HuggingFace 开始(真实模型)

我先用:

复制代码
from transformers import AutoTokenizer, AutoModelForCausalLM

加载模型:

复制代码
model = AutoModelForCausalLM.from_pretrained("microsoft/phi-2")

实现:

👉 本地文本生成 / 简单聊天


⚠️ 遇到的问题

❌ GPT2 复读问题

原因:

  • GPT2 是"续写模型"

  • 不适合问答格式

解决:

复制代码
Question:
Answer:

或者直接换模型(phi)


🧠 四、RAG 核心思想

传统 LLM:

复制代码
用户问题 → 模型回答(可能胡说)

RAG:

复制代码
用户问题 → 检索知识 → 再回答

👉 核心流程:

复制代码
Query → Embedding → Vector Search → Context → LLM

🔥 五、实现步骤(重点)


1️⃣ 文本 → 向量(Embedding)

使用:

复制代码
pip install sentence-transformers

代码:

复制代码
from sentence_transformers import SentenceTransformer

model = SentenceTransformer("all-MiniLM-L6-v2")

embeddings = model.encode([
    "Machine learning is a field of AI.",
    "Transformers use self-attention."
])

2️⃣ FAISS 向量检索

复制代码
pip install faiss-cpu

import faiss
import numpy as np

index = faiss.IndexFlatL2(384)
index.add(np.array(embeddings))

query_vec = model.encode(["What is transformer?"])
D, I = index.search(np.array(query_vec), 2)

3️⃣ 构建 RAG 系统

核心逻辑:

复制代码
docs = retrieve(query)

prompt = f"""
Context:
{docs}

Question: {query}
Answer:
"""

4️⃣ 长文本处理(关键升级)

问题:

👉 文档太长,embedding效果差

解决:

👉 chunking(切块)

复制代码
def chunk_text(text, chunk_size=300, overlap=50):
    ...

💥 六、最终系统结构

复制代码
用户问题
   ↓
Embedding(BERT类)
   ↓
FAISS 检索
   ↓
拼接上下文
   ↓
LLM(phi-2)
   ↓
回答

🧪 七、效果展示

输入:

复制代码
What is FAISS?

输出:

复制代码
FAISS is a library for efficient similarity search.

输入:

复制代码
What is the difference between BERT and GPT?

输出:

复制代码
BERT is an encoder-only model, GPT is decoder-only.

🧠 八、关键收获

今天最大的收获不是代码,而是理解:

💥 1. LLM 不等于智能

复制代码
没有知识 → 会胡说

💥 2. RAG 才是落地关键

复制代码
检索 + 生成 = 可控 AI

💥 3. Transformer 三大体系

复制代码
Encoder(理解)→ BERT
Decoder(生成)→ GPT
Encoder-Decoder → T5

🚀 九、下一步计划

  • 支持 PDF 文档读取

  • 加入多轮对话 memory

  • 使用更强 embedding(bge-large)

  • 接入向量数据库(Chroma / Pinecone)


🎯 总结

今天从:

复制代码
Transformer 理论
→ HuggingFace 模型
→ 向量检索
→ RAG系统

完成了一条完整链路。

👉 从"学 AI"迈向"做 AI 系统"。


🔥 一句话总结

💥 RAG = 让大模型"有依据地说话"

相关推荐
SuniaWang2 小时前
《Spring AI + 大模型全栈实战》学习手册系列 · 专题六:《Vue3 前端开发实战:打造企业级 RAG 问答界面》
java·前端·人工智能·spring boot·后端·spring·架构
韩立学长2 小时前
Springboot校园跑腿业务系统0b7amk02(程序、源码、数据库、调试部署方案及开发环境)系统界面展示及获取方式置于文档末尾,可供参考。
数据库·spring boot·后端
sheji34162 小时前
【开题答辩全过程】以 基于springboot的扶贫系统为例,包含答辩的问题和答案
java·spring boot·后端
阿贵---2 小时前
使用XGBoost赢得Kaggle比赛
jvm·数据库·python
无敌昊哥战神2 小时前
【LeetCode 257】二叉树的所有路径(回溯法/深度优先遍历)- Python/C/C++详细题解
c语言·c++·python·leetcode·深度优先
xingxin323 小时前
日志文件分析溯源(连接WebShell的IP地址)实验报告
安全·web安全·网络安全·php·文件上传
代码栈上的思考3 小时前
消息队列:内存与磁盘数据中心设计与实现
后端·spring
LegendNoTitle3 小时前
计算机三级等级考试 网络技术 选择题考点详细梳理
服务器·前端·经验分享·笔记·php
李昊哲小课3 小时前
第1章-PySide6 基础认知与环境配置
python·pyqt·pyside