今天是自学大模型的第一天(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 = 让大模型"有依据地说话"

相关推荐
努力的小雨4 小时前
龙虾量化实战法(QClaw)
后端
weixin_580614004 小时前
MySQL存储过程中如何防止SQL注入_使用参数化查询规范
jvm·数据库·python
2401_837163894 小时前
PHP源码开发用台式机还是笔记本更合适_硬件选型对比【方法】
jvm·数据库·python
zuowei28895 小时前
华为网络设备配置文件备份与恢复(上传、下载、导出,导入)
开发语言·华为·php
baidu_340998825 小时前
mysql修改列名会导致程序报错吗_Change Column语法与兼容性
jvm·数据库·python
橙露5 小时前
SpringBoot 整合 MinIO:分布式文件存储上传下载
spring boot·分布式·后端
xiaohe075 小时前
超详细 Python 爬虫指南
开发语言·爬虫·python
Bruceoxl5 小时前
【人物传记】Python 之父-吉多·范罗苏姆
python·计算机·人物传记
NotFound4865 小时前
实战分享Python爬虫,如何实现高效解析 Web of Science 文献数据并导出 CSV
前端·爬虫·python
23471021275 小时前
4.14 学习笔记
笔记·python·学习