📝 一、提示词工程(Prompt Engineering)
1.1 什么是提示词?
提示词(Prompt)是用户与大语言模型(LLM)交互的输入文本,它决定了模型的输出质量和准确性。优秀的提示词设计能够显著提升模型的表现。
核心原则:
- 清晰性:明确表达意图,避免歧义
- 具体性:提供足够的上下文和细节
- 结构化:使用格式化的输入提高可读性
- 示例驱动:通过Few-shot学习提供示例
1.2 提示词工程流程
graph LR
A[用户需求] --> B[设计提示词]
B --> C[模型推理]
C --> D[生成输出]
D --> E{评估质量}
E -->|不满意| F[优化提示词]
F --> B
E -->|满意| G[最终结果]
style A fill:#e1f5ff
style G fill:#c8e6c9
style E fill:#fff9c4
1.3 提示词类型
🔢 二、Embedding(向量嵌入)
2.1 什么是Embedding?
Embedding是将文本、图像等数据转换为高维向量的技术,是计算机理解和处理语义信息的基础。通过Embedding,相似的内容在向量空间中距离更近。
💡 核心概念: Embedding是一种特征表达方式,将文本转换成向量(如1024维向量),用于表达语义信息。
2.2 Embedding工作原理
graph TB
A[原始文本] --> B[Embedding模型]
B --> C[向量表示]
C --> D[向量数据库]
E[查询文本] --> F[Embedding模型]
F --> G[查询向量]
G --> H[相似度计算]
D --> H
H --> I[检索结果]
style A fill:#e1f5ff
style E fill:#e1f5ff
style I fill:#c8e6c9
style B fill:#fff9c4
style F fill:#fff9c4
2.3 推荐的Embedding模型
| 模型名称 | 特点 | 适用场景 |
|---|---|---|
| Qwen3-Embedding-8B | 高性能、多语言支持 | 通用场景,推荐首选 |
| bge-m3 | 多语言、多粒度 | 跨语言检索 |
| jina-embeddings-v4 | 套娃模型,灵活维度 | 需要不同维度的场景 |
| m3e-base | 中文优化 | 中文为主的应用 |
2.4 向量数据库
常用向量数据库:
- FAISS:轻量级,适合10亿级数据,内存型向量数据库
- Milvus:分布式,适合大规模生产环境
- Chroma:易用,适合快速原型开发
- Pinecone:云服务,开箱即用
# 安装FAISS
pip3 install faiss-cpu --no-cache-dir
# 基本使用示例
import faiss
import numpy as np
# 创建索引
dimension = 1024
index = faiss.IndexFlatL2(dimension)
# 添加向量
vectors = np.random.random((1000, dimension)).astype('float32')
index.add(vectors)
# 搜索相似向量
query = np.random.random((1, dimension)).astype('float32')
distances, indices = index.search(query, k=5)
🔍 三、RAG(检索增强生成)
3.1 什么是RAG?
RAG(Retrieval-Augmented Generation)是一种结合检索和生成的技术,通过从外部知识库检索相关信息,增强大语言模型的生成能力,解决模型知识过时、幻觉等问题。
💡 核心公式:
RAG = 检索(Embedding) + 提示工程 + 生成(LLM)
RAG = 检索(Embedding) + 提示工程 + 生成(LLM)
3.2 RAG完整流程
graph TB
subgraph "阶段1: 文档处理(离线)"
A[知识库文档] --> B[文档分割]
B --> C[Chunk片段]
C --> D[Embedding转换]
D --> E[文档向量]
E --> F[(向量数据库)]
end
subgraph "阶段2: 查询处理(在线)"
G[用户问题] --> H[Embedding转换]
H --> I[查询向量]
I --> J[向量检索]
F --> J
J --> K[相关文档]
K --> L[构建Prompt]
G --> L
L --> M[大语言模型]
M --> N[生成答案]
end
style A fill:#e1f5ff
style G fill:#e1f5ff
style N fill:#c8e6c9
style F fill:#fff9c4
style M fill:#f06292
3.3 RAG两步流程详解
3.4 RAG的优势
- 知识更新:无需重新训练模型,只需更新知识库
- 减少幻觉:基于真实文档生成答案,提高准确性
- 可追溯性:可以追踪答案来源,增强可信度
- 领域适应:轻松适配特定领域知识
- 成本效益:比微调模型更经济高效
3.5 RAG vs 传统LLM
graph LR
subgraph "传统LLM"
A1[用户问题] --> B1[大语言模型]
B1 --> C1[生成答案]
D1[模型参数知识] -.-> B1
end
subgraph "RAG系统"
A2[用户问题] --> B2[检索系统]
B2 --> C2[相关文档]
C2 --> D2[大语言模型]
A2 --> D2
D2 --> E2[生成答案]
F2[(知识库)] --> B2
end
style C1 fill:#ffcdd2
style E2 fill:#c8e6c9
style D1 fill:#fff9c4
style F2 fill:#bbdefb
🛠️ 四、实践应用
4.1 技术栈推荐
| 组件 | 推荐工具 | 说明 |
|---|---|---|
| Embedding模型 | Qwen3-Embedding-8B / bge-m3 | 高性能多语言支持 |
| 向量数据库 | FAISS / Milvus | FAISS适合原型,Milvus适合生产 |
| 大语言模型 | GPT-4 / Claude / Qwen | 根据需求选择 |
| 开发框架 | LangChain / LlamaIndex | 快速构建RAG应用 |
4.2 RAG实现示例
# RAG基础实现示例
from langchain.embeddings import HuggingFaceEmbeddings
from langchain.vectorstores import FAISS
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.chains import RetrievalQA
from langchain.llms import OpenAI
# 1. 文档处理
documents = ["文档内容1", "文档内容2", "文档内容3"]
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=500,
chunk_overlap=50
)
chunks = text_splitter.create_documents(documents)
# 2. 创建Embedding和向量库
embeddings = HuggingFaceEmbeddings(
model_name="BAAI/bge-m3"
)
vectorstore = FAISS.from_documents(chunks, embeddings)
# 3. 创建检索链
llm = OpenAI(temperature=0)
qa_chain = RetrievalQA.from_chain_type(
llm=llm,
chain_type="stuff",
retriever=vectorstore.as_retriever(search_kwargs={"k": 3})
)
# 4. 查询
query = "用户问题"
result = qa_chain.run(query)
print(result)
4.3 优化策略
mindmap
root((RAG优化))
文档处理
合理分块大小
保留上下文
元数据标注
去重处理
检索优化
混合检索
重排序Rerank
多路召回
查询改写
生成优化
Prompt工程
上下文压缩
答案验证
引用标注
系统优化
缓存机制
异步处理
负载均衡
监控告警
4.4 常见问题与解决方案
问题1:检索结果不准确
- 优化文档分块策略
- 使用更好的Embedding模型
- 增加检索结果数量后重排序
- 使用混合检索(向量+关键词)
问题2:生成答案质量低
- 优化Prompt模板
- 提高检索质量
- 使用更强大的LLM
- 添加答案验证机制
问题3:系统响应慢
- 使用更快的向量数据库
- 实现查询缓存
- 优化索引结构
- 异步处理非关键路径
🔗 五、相关资源
5.1 模型资源
- ModelScope: https://modelscope.cn/
- HuggingFace: https://huggingface.co/
- MTEB排行榜: https://huggingface.co/spaces/mteb/leaderboard
5.2 开发工具
- GPU租用: https://autodl.com/market/list
- Jupyter Notebook: 交互式开发环境
- LangChain: RAG应用开发框架
- LlamaIndex: 数据框架和索引工具
5.3 环境配置
# 安装Jupyter Notebook
pip3 install notebook
# 启动Jupyter Notebook
jupyter notebook
# 或使用
python3 -m notebook
# 启动Jupyter Lab(推荐)
python3 -m jupyterlab
# 安装FAISS向量数据库
pip3 install faiss-cpu --no-cache-dir
# 安装LangChain
pip3 install langchain
# 安装HuggingFace相关库
pip3 install transformers sentence-transformers
📚 六、核心要点总结
🎯 关键理解:
- 提示词工程是与LLM交互的艺术,决定输出质量
- Embedding将文本转换为向量,是语义理解的基础
- RAG结合检索和生成,解决LLM知识局限性
- 完整流程:文档处理 → 向量化 → 存储 → 检索 → 生成
- 核心价值:知识更新灵活、减少幻觉、可追溯性强
6.1 技术演进路径
graph LR
A[传统搜索] --> B[语义搜索]
B --> C[Embedding检索]
C --> D[RAG系统]
D --> E[RAG + Agent]
E --> F[多模态RAG]
style A fill:#ffcdd2
style D fill:#c8e6c9
style F fill:#bbdefb
未来发展方向:
- 多模态RAG:支持图像、音频、视频等多种模态
- RAG + Agent:结合智能代理实现复杂任务
- 自适应RAG:根据查询动态调整检索策略
- 知识图谱增强:结合结构化知识提升推理能力
📖 学习建议
理论学习 → 动手实践 → 项目应用 → 持续优化
从简单的Embedding检索开始,逐步构建完整的RAG系统
© 2026 AI大模型课程 | 第1节 提示词和RAG原理分析