【从零到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 = 让大模型“有依据地说话”

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐