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

相关推荐
Jetev17 分钟前
如何确定SQL字段是否为空_使用IS NULL与IS NOT NULL
jvm·数据库·python
ooseabiscuit22 分钟前
Laravel 8.x核心特性深度解析
php·laravel
蛐蛐蛐31 分钟前
昇腾910B4上安装新版本CANN的正确流程
人工智能·python·昇腾
m0_7020365336 分钟前
mysql如何处理不走索引的OR查询_使用UNION ALL优化重写
jvm·数据库·python
庞轩px37 分钟前
第七篇:Spring扩展点——如何优雅地介入Bean的创建流程
java·后端·spring·bean·aware·扩展点
ltl41 分钟前
Q/K/V 三件套:把 Bahdanau 抽象成一个公式
后端
2401_846339561 小时前
MySQL在云环境如何选择存储类型_SSD与高性能云盘配置建议
jvm·数据库·python
2601_957780842 小时前
Claude 4.6 对阵 GPT-5.4:2026 开发者大模型 API 选型深度解析
人工智能·python·gpt·ai·claude
2601_957780842 小时前
GPT-5.5 深度解析:2026年4月OpenAI旗舰模型的技术跨越与商业决策指南
大数据·人工智能·python·gpt·openai
zhaoyong2222 小时前
SQL如何统计每个用户的首次行为时间_MIN聚合与分组
jvm·数据库·python