大模型应用开发必学:提示工程、RAG与微调全解析【建议收藏】

本文详细介绍大模型应用开发三种模式:提示工程(优化输入)、RAG(检索增强生成)和微调(参数调整)。重点解析RAG技术原理,通过外部知识库检索提高回答准确性和时效性,减少幻觉问题。提供DeepSeek+Faiss搭建本地知识库的实战代码,以及查询改写和联网搜索等优化技术,帮助开发者构建高效可靠的大模型应用。


一、大模型应用开发的三种模式

提示工程(Prompt Engineering)、RAG(检索增强生成)和微调(Fine-tuning)分别代表了不同维度的优化手段。

提示工程 (Prompt Engineering):不改变模型,通过优化输入(Prompt)来引导输出。一般用于:

  • 快速原型开发:需要立即看到效果。
  • 通用任务:总结、翻译、改写、简单的逻辑推理。
  • 改变语气或格式:如“请以专业律师的口吻回复”或“输出 JSON 格式”。
  • 预算极低:几乎没有额外成本。

RAG (检索增强生成):在模型回答前,先去外部数据库(如公司文档、实时新闻)检索相关知识,再把知识喂给模型。一般用于:

  • 需要准确的事实:需要模型回答特定的、私有的或最新的信息(如“我公司去年的差旅报销规定”)。
  • 知识库频繁更新:数据每天甚至每小时都在变,微调无法跟上这种速度。
  • 需要引用来源:用户需要知道答案是从哪篇文档里找出来的(减少“幻觉”)。
  • 长文本处理:数据量巨大,超出了单个提示词的长度限制。

微调 (Fine-tuning):使用特定领域的数据集对模型进行二次训练,改变其内部参数(权重)。一般用于:

  • 特定的行为/风格习惯:你需要模型极度符合某种特定风格(如模仿某个作家的文风)。
  • 极度专业的术语:模型在理解特定垂直领域(如病理学影像报告、底层代码库)的特殊表达时表现不佳。
  • 为了降本增效:通过微调一个小模型(如 Llama-3-8B),使其表现接近大模型(如 GPT-4),从而降低推理成本和延迟。
  • 遵循复杂指令:当提示工程无法让模型稳定遵循某些及其复杂的输出规则时。

二、RAG的核心原理与流程

1、什么是RAG?

RAG (Retrieval-Augmented Generation,检索增强生成) 是目前大模型应用中最火热的技术架构之一。RAG是一种结合信息检索(Retrieval)和文本生 成(Generation)的技术,RAG技术通过实时检索相关文档或信息,并将其作为上下文输入到生成模型中,从而提高生成结果的时效性和准确性。简单来说,RAG 就是给大模型配了一个“外部知识库”。当用户提问时,系统先去知识库里查资料,把查到的资料和问题一起喂给模型,让模型参考这些资料来回答。

RAG的优势:

  • 解决知识时效性问题:大模型的训练数据通常是静态的,无法涵盖最新信息,而RAG可以检索外部知识库实时更新信息。
  • 减少模型幻觉:通过引入外部知识,RAG能够减少模型生成虚假或不准确内容的可能性。
  • 提升专业领域回答质量:RAG能够结合垂直领域的专业知识 库,生成更具专业深度的回答。

2、RAG的核心原理与流程

RAG 的核心思想是将检索(Retrieval)能力与生成(Generation)能力结合。

  • 传统生成 (LLM Only): 靠模型脑子里记的知识回答(闭卷考试)。如果知识点没学过或记错了,就会胡说八道(幻觉)。
  • RAG 生成: 先找资料,再根据资料组织语言回答(开卷考试)。这样回答更准确,且能通过引文溯源。

一个完整的 RAG 流程通常分为两个阶段:数据准备阶段(离线)和检索生成阶段(在线)。

第一阶段:数据准备
  1. 文档加载 (Load): 读取各种格式的私人文档(PDF、Word、Markdown、数据库等)。
  2. 文本切割 (Split/Chunking): 将长文章切成一小块一小块的“语义片段”(比如每段 500 字),因为模型的输入窗口有限。
  3. 向量化 (Embedding): 利用 Embedding 模型将这些文字片段转化成一串数字(向量)。这些数字代表了文字的“语义含义”。
  4. 存入向量数据库 (Store): 将这些向量存入专门的向量数据库(如 Milvus, Pinecone, FAISS 等)。
第二阶段:检索与生成

这是当用户输入问题后的实时处理过程:

  1. 问题向量化: 把用户的提问(比如“公司出差报销标准是什么?”)也转化成向量。
  2. 语义检索 (Retrieve): 在向量数据库中进行“相似度搜索”,找出与问题语义最接近的几个文档片段(Top-K)。
  3. 提示词增强 (Augment): 将“用户问题”和“搜到的片段”塞进一个模板里。 * 模板示例: “请参考以下背景资料:资料A,回答用户的问题:[用户问题]。如果资料中没有提到,请回答不知道。”
  4. 模型生成 (Generate): 大模型阅读这些“背景资料”,生成一个准确且有据可依的回答。

RAG 流程图解:

用户问题向量化去数据库捞资料问题+资料组合大模型最终答案

3、RAG的核心优势与局限性

核心优势:

  1. 解决“幻觉”问题: 模型必须参考给定的资料回答,大大降低了瞎编的概率。
  2. 知识实时性: 不需要重新训练模型。只要把最新的新闻或文档存入数据库,模型立刻就能掌握新知识。
  3. 私有数据安全: 企业不需要把敏感数据传给云端模型进行微调,只需在本地检索后,将相关片段传给模型。
  4. 可解释性: 模型的回答可以标注出处(例如:“根据《2023年财务手册》第三章…”),方便人工核对。

虽然 RAG 很强,但也有挑战:

  1. 检索质量: 如果搜出来的片段本身就不相关,模型就会被带偏。
  2. 上下文长度: 如果需要参考的资料太多,超出了模型的处理能力,效果会打折。

三、DeepSeek + Faiss搭建本地知识库检索

该系统的核心逻辑是将文档向量化并存入 Faiss,查询时通过相似度匹配找出相关内容,最后交给 DeepSeek 进行总结回答。

技术栈选择:

  • 向量数据库:Faiss作为高效的向量检索
  • 嵌入模型:阿里云DashScope的text-embedding-v1
  • 大语言模型:deepseek-v3
  • 文档处理:PyPDF2用于PDF文本提取

1、环境准备

首先安装必要的 Python 库:

pip install dashscope faiss-cpu PyPDF2 openai numpy langchain_community

2、核心代码实现

整个流程分为:文档预处理(PDF文本提取、文本分割、页码映射处理)→ 知识库构建(向量数据库构建、数据持久化)→ 问答查询(相似度检索、问答链处理、答案生成与展示)

from PyPDF2 import PdfReader
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain_community.embeddings import DashScopeEmbeddings
from langchain_community.vectorstores import FAISS
from typing import List, Tuple
import os
import pickle
DASHSCOPE_API_KEY = os.getenv('DASHSCOPE_API_KEY')
if not DASHSCOPE_API_KEY:
raise ValueError("请设置环境变量 DASHSCOPE_API_KEY")
def extract_text_with_page_numbers(pdf) -> Tuple[str, List[Tuple[str, int]]]:
"""
从PDF中提取文本并记录每个字符对应的页码
参数:
pdf: PDF文件对象
返回:
text: 提取的文本内容
char_page_mapping: 每个字符对应的页码列表
"""
text = ""
char_page_mapping = []
for page_number, page in enumerate(pdf.pages, start=1):
extracted_text = page.extract_text()
if extracted_text:
text += extracted_text
# 为当前页面的每个字符记录页码
char_page_mapping.extend([page_number] * len(extracted_text))
else:
print(f"No text found on page {page_number}.")
return text, char_page_mapping
def process_text_with_splitter(text: str, char_page_mapping: List[int], save_path: str = None) -> FAISS:
"""
处理文本并创建向量存储
参数:
text: 提取的文本内容
char_page_mapping: 每个字符对应的页码列表
save_path: 可选,保存向量数据库的路径
返回:
knowledgeBase: 基于FAISS的向量存储对象
"""
# 创建文本分割器,用于将长文本分割成小块
text_splitter = RecursiveCharacterTextSplitter(
separators=["\n\n", "\n", ".", " ", ""],
chunk_size=1000,
chunk_overlap=200,
length_function=len,
)
# 分割文本
chunks = text_splitter.split_text(text)
print(f"文本被分割成 {len(chunks)} 个块。")
# 创建嵌入模型
embeddings = DashScopeEmbeddings(
model="text-embedding-v1",
dashscope_api_key=DASHSCOPE_API_KEY,
)
# 从文本块创建知识库
knowledgeBase = FAISS.from_texts(chunks, embeddings)
print("已从文本块创建知识库。")
# 为每个文本块找到对应的页码信息
page_info = {}
current_pos = 0
for chunk in chunks:
chunk_start = current_pos
chunk_end = current_pos + len(chunk)
# 找到这个文本块中字符对应的页码
chunk_pages = char_page_mapping[chunk_start:chunk_end]
# 取页码的众数(出现最多的页码)作为该块的页码
if chunk_pages:
# 统计每个页码出现的次数
page_counts = {}
for page in chunk_pages:
page_counts[page] = page_counts.get(page, 0) + 1
# 找到出现次数最多的页码
most_common_page = max(page_counts, key=page_counts.get)
page_info[chunk] = most_common_page
else:
page_info[chunk] = 1  # 默认页码
current_pos = chunk_end
knowledgeBase.page_info = page_info
print(f'页码映射完成,共 {len(page_info)} 个文本块')
# 如果提供了保存路径,则保存向量数据库和页码信息
if save_path:
# 确保目录存在
os.makedirs(save_path, exist_ok=True)
# 保存FAISS向量数据库
knowledgeBase.save_local(save_path)
print(f"向量数据库已保存到: {save_path}")
# 保存页码信息到同一目录
with open(os.path.join(save_path, "page_info.pkl"), "wb") as f:
pickle.dump(page_info, f)
print(f"页码信息已保存到: {os.path.join(save_path, 'page_info.pkl')}")
return knowledgeBase
def load_knowledge_base(load_path: str, embeddings = None) -> FAISS:
"""
从磁盘加载向量数据库和页码信息
参数:
load_path: 向量数据库的保存路径
embeddings: 可选,嵌入模型。如果为None,将创建一个新的DashScopeEmbeddings实例
返回:
knowledgeBase: 加载的FAISS向量数据库对象
"""
# 如果没有提供嵌入模型,则创建一个新的
if embeddings is None:
embeddings = DashScopeEmbeddings(
model="text-embedding-v1",
dashscope_api_key=DASHSCOPE_API_KEY,
)
# 加载FAISS向量数据库,添加allow_dangerous_deserialization=True参数以允许反序列化
knowledgeBase = FAISS.load_local(load_path, embeddings, allow_dangerous_deserialization=True)
print(f"向量数据库已从 {load_path} 加载。")
# 加载页码信息
page_info_path = os.path.join(load_path, "page_info.pkl")
if os.path.exists(page_info_path):
with open(page_info_path, "rb") as f:
page_info = pickle.load(f)
knowledgeBase.page_info = page_info
print("页码信息已加载。")
else:
print("警告: 未找到页码信息文件。")
return knowledgeBase
# 读取PDF文件
pdf_reader = PdfReader('./浦发上海浦东发展银行西安分行个金客户经理考核办法.pdf')
# 提取文本和页码信息
text, char_page_mapping = extract_text_with_page_numbers(pdf_reader)
print(f"提取的文本长度: {len(text)} 个字符。")
# 处理文本并创建知识库,同时保存到磁盘
save_dir = "./vector_db"
knowledgeBase = process_text_with_splitter(text, char_page_mapping, save_path=save_dir)
# 示例:如何加载已保存的向量数据库
from langchain_community.llms import Tongyi
llm = Tongyi(model_name="deepseek-v3", dashscope_api_key=DASHSCOPE_API_KEY) # qwen-turbo
# 设置查询问题
query = "客户经理被投诉了,投诉一次扣多少分"
if query:
# 执行相似度搜索,找到与查询相关的文档
docs = knowledgeBase.similarity_search(query,k=10)
# 构建上下文
context = "\n\n".join([doc.page_content for doc in docs])
# 构建提示
prompt = f"""根据以下上下文回答问题:{context}  问题: {query}"""
# 直接调用 LLM
response = llm.invoke(prompt)
print(response)
print("来源:")
# 记录唯一的页码
unique_pages = set()
# 显示每个文档块的来源页码
for doc in docs:
text_content = getattr(doc, "page_content", "")
source_page = knowledgeBase.page_info.get(
text_content.strip(), "未知"
)
if source_page not in unique_pages:
unique_pages.add(source_page)
print(f"文本块页码: {source_page}")

五、Query改写

RAG 的核心在于“检索-生成”。如果第一步“检索”就走偏了,那么后续的“生成”质量也会降低。

用户提出的问题往往是口语化的、承接上下文的、模糊的,甚至是包含了情绪的。 而知识库里的文本(切片/Chunks)通常是陈述性的、客观的。因此,需要一个翻译官的角色,将用户的“口语化查询”转换成“书面化、精确的检索语句”

1、上下文依赖型Query改写

instruction = “”" 你是一个智能的查询优化助手。请分析用户的当前问题以及前序对话历史,判断当前问题是否依赖于上下文。 如果依赖,请将当前问题改写成一个独立的、包含所有必要上下文信息的完整问题。 如果不依赖,直接返回原问题。 “”"

prompt = f"“”

###指令###

{instruction}

###对话历史###

{conversation_history}

###当前问题###

{current_query}

###改写后的问题###

“”"

例如:

2、对比型Query改写

instruction = “”" 你是一个查询分析专家。请分析用户的输入和相关的对话上下文,识别出问题中需要进行比较的多个对象。然后,将原始问题改写成一个更明确、更适合在知识库中检索的对比性查询。 “”"

prompt = 同上

3、模糊指代型Query改写

instruction = “”" 你是一个消除语言歧义的专家。请分析用户的当前问题和对话历史,找出问题中"都"、“它”、“这个” 等模糊指代词具体指 向的对象。 然后,将这些指代词替换为明确的对象名称,生成一个清晰、无歧义的新问题。 “”"

prompt = 同上

4、反问型Query改写

instruction = “”" 你是一个沟通理解大师。请分析用户的反问或带有情绪的陈述,识别其背后真实的意图和问题。 然后,将这个反问改写成一个中立、客观、可以直接用于知识库检索的问题。 “”"

prompt = 同上

六、Query+联网搜索

RAG 系统的 Query + 联网搜索功能是将 RAG 的检索源从“本地静态向量库”扩展到了“动态的互联网”。

核心流程(5步法):

  1. 查询分析与重写 (Query Analysis):模型判断用户的问题是否需要联网(意图识别)。如果需要,它会将自然语言问题改写成适合搜索引擎的“关键词”。
  • 用户问:“DeepSeek 刚发的那个模型咋样?”
  • 改写后:“DeepSeek-V3 评测 性能 参数介绍”
  1. 执行搜索 (Web Search):调用搜索 API,获取搜索结果列表(标题、Snippet、URL)。直接用 Google/Baidu 的 HTML 结果给大模型看太乱了。现在流行使用专为 LLM 设计的搜索引擎 API,它们直接返回干净的 JSON 或纯文本。(Tavily是目前最火的 AI 搜索 API,专为 RAG 优化,直接返回清洗好的答案片段,不用自己写爬虫。)
  2. 网页抓取与清洗 (Scraping & Parsing):访问具体的 URL,把网页里的广告、导航栏去掉,只提取正文内容。
  3. 上下文组装 (Context Construction):把清洗后的网页内容作为 Context。
  4. 生成回答 (Generation):LLM 根据网页内容回答用户,并附上链接。

​最后

我在一线科技企业深耕十二载,见证过太多因技术卡位而跃迁的案例。那些率先拥抱 AI 的同事,早已在效率与薪资上形成代际优势,我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在大模型的学习中的很多困惑。

我整理出这套 AI 大模型突围资料包:

  • ✅AI大模型学习路线图
  • ✅Agent行业报告
  • ✅100集大模型视频教程
  • ✅大模型书籍PDF
  • ✅DeepSeek教程
  • ✅AI产品经理入门资料

完整的大模型学习和面试资料已经上传带到优快云的官方了,有需要的朋友可以扫描下方二维码免费领取【保证100%免费】👇👇
​​
在这里插入图片描述

为什么说现在普通人就业/升职加薪的首选是AI大模型?

人工智能技术的爆发式增长,正以不可逆转之势重塑就业市场版图。从DeepSeek等国产大模型引发的科技圈热议,到全国两会关于AI产业发展的政策聚焦,再到招聘会上排起的长队,AI的热度已从技术领域渗透到就业市场的每一个角落。

img
智联招聘的最新数据给出了最直观的印证:2025年2月,AI领域求职人数同比增幅突破200% ,远超其他行业平均水平;整个人工智能行业的求职增速达到33.4%,位居各行业榜首,其中人工智能工程师岗位的求职热度更是飙升69.6%。

AI产业的快速扩张,也让人才供需矛盾愈发突出。麦肯锡报告明确预测,到2030年中国AI专业人才需求将达600万人,人才缺口可能高达400万人,这一缺口不仅存在于核心技术领域,更蔓延至产业应用的各个环节。

在这里插入图片描述

​​
在这里插入图片描述

资料包有什么?

①从入门到精通的全套视频教程⑤⑥

包含提示词工程、RAG、Agent等技术点
在这里插入图片描述

② AI大模型学习路线图(还有视频解说)

全过程AI大模型学习路线

在这里插入图片描述

③学习电子书籍和技术文档

市面上的大模型书籍确实太多了,这些是我精选出来的

在这里插入图片描述

④各大厂大模型面试题目详解

在这里插入图片描述

⑤ 这些资料真的有用吗?

这份资料由我和鲁为民博士共同整理,鲁为民博士先后获得了北京清华大学学士和美国加州理工学院博士学位,在包括IEEE Transactions等学术期刊和诸多国际会议上发表了超过50篇学术论文、取得了多项美国和中国发明专利,同时还斩获了吴文俊人工智能科学技术奖。目前我正在和鲁博士共同进行人工智能的研究。

所有的视频教程由智泊AI老师录制,且资料与智泊AI共享,相互补充。这份学习大礼包应该算是现在最全面的大模型学习资料了。

资料内容涵盖了从入门到进阶的各类视频教程和实战项目,无论你是小白还是有些技术基础的,这份资料都绝对能帮助你提升薪资待遇,转行大模型岗位。

在这里插入图片描述
在这里插入图片描述

智泊AI始终秉持着“让每个人平等享受到优质教育资源”的育人理念‌,通过动态追踪大模型开发、数据标注伦理等前沿技术趋势‌,构建起"前沿课程+智能实训+精准就业"的高效培养体系。

课堂上不光教理论,还带着学员做了十多个真实项目。学员要亲自上手搞数据清洗、模型调优这些硬核操作,把课本知识变成真本事‌!

​​​​在这里插入图片描述
在这里插入图片描述

如果说你是以下人群中的其中一类,都可以来智泊AI学习人工智能,找到高薪工作,一次小小的“投资”换来的是终身受益!

应届毕业生‌:无工作经验但想要系统学习AI大模型技术,期待通过实战项目掌握核心技术。

零基础转型‌:非技术背景但关注AI应用场景,计划通过低代码工具实现“AI+行业”跨界‌。

业务赋能 ‌突破瓶颈:传统开发者(Java/前端等)学习Transformer架构与LangChain框架,向AI全栈工程师转型‌。

👉获取方式:

😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓**

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值