最近,两款全新的通义千问模型发布了:Qwen3-4B-Instruct-2507 和 Qwen3-4B-Thinking-2507。这两款模型都拥有高达256K的超长上下文长度,这让我不禁思考:“何不利用这个长上下文能力来搭建一个RAG系统呢?”值得一提的是,通义千问系列模型种类繁多,涵盖了用于代码、思维、嵌入和重排等多种用途的模型。为了以最佳方式构建我们的RAG,本文将使用通义千问3.0的嵌入模型和重排模型。
我们不会直接开始构建RAG,而是先逐一了解这些模型,然后再开始搭建系统。
通义千问3.0模型背景
由阿里云开发的多款通义千问3.0模型于几个月前发布。作为这些模型的改进版本,最近又推出了两款新模型:Qwen3-Instruct-2507 和 Qwen3-Thinking-2507,共有三种尺寸:235B-A22B、30B-A3B和4B。请注意,本文我们将主要关注 ‘Qwen3-Instruct-2507’ 的4B版本。所有这些模型都是开源的,在Hugging Face和Kaggle上均可获取。同样值得一提的是,通义千问3.0模型支持多达119种语言和方言。接下来,让我们先来实际体验几款通义千问3.0模型,然后再开始构建我们此行的主要目标——RAG系统。
通义千问3.0模型演示
我们从文本生成模型开始,但在此之前,请务必从https://huggingface.co/settings/tokens获取您的Hugging Face访问令牌。
注意:我们将在Google Colab上进行此演示。打开新笔记本后,请务必在左侧的“秘密”(secrets)选项卡中将访问令牌添加为 HF_TOKEN。请确保开启了对该笔记本的访问权限,同时将运行时类型更改为T4 GPU以处理该模型。
# Qwen3-4B-Instruct-2507
这是通义千问3.0-4B非思维模式的更新版本,拥有高达256k的超长上下文长度。顾名思义,该模型拥有40亿参数,相对轻量,非常适合在Colab上使用。让我们使用Hugging Face的transformers库来启动这个模型,看看它的实际表现。
# 安装和依赖
import torch
import torch.nn.functional as F
from transformers import AutoModelForCausalLM, AutoTokenizer, AutoModel
# Instruct模型(文本生成)
tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen3-4B-Instruct-2507")
model = AutoModelForCausalLM.from_pretrained(
"Qwen/Qwen3-4B-Instruct-2507",
torch_dtype="auto",
device_map="auto"
)
prompt = "用简单的语言解释什么是机器学习。"
messages = [{"role": "user", "content": prompt}]
text = tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True,
enable_thinking=False
)
model_inputs = tokenizer([text], return_tensors="pt").to(model.device)
generated_ids = model.generate(
**model_inputs,
max_new_tokens=256
)
output_ids = generated_ids[0][len(model_inputs.input_ids[0]):].tolist()
response = tokenizer.decode(output_ids, skip_special_tokens=True)
print(response)
这是我提问“用简单的语言解释什么是机器学习”后得到的输出:
当然!简单来说,**机器学习**是一种让计算机无需被明确编程,仅通过学习数据就能提升任务执行能力的方法。
想象你有一个机器人,它要学会识别照片里的猫。我们不需要一步步地编写指令,比如“寻找一个圆脸、大眼睛和鼻子”,你只需要给它看很多猫的照片和狗的照片。随着时间的推移,这个机器人就会自己开始弄清楚猫和狗的区别——它通过这些例子自己学习。
这就是机器学习:计算机查看数据(比如图片、数字或文本),从中发现规律,并基于这些规律更好地进行预测或决策。可以把它想象成一个孩子通过反复观看不同的动物来学习识别它们。机器所做的也类似——它从经验(数据)中学习,并随着时间变得更“聪明”。
总而言之:**机器学习 = 教计算机从数据中学习并自我提升。** 😊
Qwen3-Embedding-0.6B
这是一个嵌入模型,用于将文本转换为密集的向量表示,以理解文本之间的关系。这是我们稍后将要构建的RAG系统中的重要组成部分。嵌入模型构成了 检索增强生成(RAG)中“检索器”(Retriever)的核心。
让我们定义一个可重用的函数,并计算嵌入来衡量文本之间的相似性。我将4个字符串(文本)放入了名为texts的列表中。
# Qwen3-Embedding-0.6B(文本嵌入)
deflast_token_pool(last_hidden_states, attention_mask):
left_padding = (attention_mask[:, -1].sum() == attention_mask.shape[0])
if left_padding:
return last_hidden_states[:, -1]
else:
sequence_lengths = attention_mask.sum(dim=1) - 1
batch_size = last_hidden_states.shape[0]
return last_hidden_states[torch.arange(batch_size, device=last_hidden_states.device), sequence_lengths]
tokenizer = AutoTokenizer.from_pretrained('Qwen/Qwen3-Embedding-0.6B', padding_side='left')
model = AutoModel.from_pretrained('Qwen/Qwen3-Embedding-0.6B')
texts = [
"机器学习是人工智能的一个子集。",
"Python是一种流行的编程语言。",
"今天天气很晴朗。",
"人工智能正在改变各行各业。"
]
batch_dict = tokenizer(
texts,
padding=True,
truncation=True,
max_length=8192,
return_tensors="pt",
)
outputs = model(**batch_dict)
embeddings = last_token_pool(outputs.last_hidden_state, batch_dict['attention_mask'])
embeddings = F.normalize(embeddings, p=2, dim=1)
scores = (embeddings @ embeddings.T)
print(scores.tolist())
输出:
[[1.0, 0.4834885597229004, 0.3609130382537842, 0.6805511713027954], [0.4834885597229004, 1.0000001192092896, 0.44289979338645935, 0.4494439363479614], [0.3609130382537842, 0.44289979338645935, 1.0000001192092896, 0.4508340656757355], [0.6805511713027954, 0.4494439363479614, 0.4508340656757355, 1.0]]
我们通过计算文本相互之间的相似性分数得到这个矩阵。为了便于理解,我们只看矩阵的第一行。如您所见,相同文本的相似性分数始终为1,次高分是0.68,它介于关于人工智能和关于机器学习的句子之间,而关于天气和人工智能的句子之间的相似性分数并不高,这很符合常理。
Qwen3-Reranker-0.6B
我们可以将通过嵌入模型进行向量搜索所获得的检索块传递给重排器模型。重排器模型会根据查询对每个检索块进行评分,以重新排序文档列表并分配优先级,或者使用这些分数来筛选检索到的文档块。为了更好地理解,我们将在接下来的部分直接演示这个模型的实际应用。
使用通义千问模型构建RAG
我们将使用三个指定的通义千问3.0模型,基于Analytics Vidhya博客文章(约40篇)构建一个RAG。我们将按顺序处理数据并使用这些模型。为了高效处理,我们将在使用模型时进行加载/卸载,以节省内存。让我们看看具体步骤,然后深入研究脚本。
步骤1:下载数据。这里是我的仓库链接,你可以在其中找到数据和脚本。
步骤2:安装依赖:!pip install faiss-cpu PyPDF2
步骤3:解压数据到文件夹:!unzip Data.zip
步骤4:为了方便执行,您可以直接将qwen_rag.py脚本添加到Colab环境中,并使用以下命令运行:!python qwen_rag.py
脚本解析:
- 我们使用
PYPDF2库来加载PDF格式的文章内容。我们定义了一个函数来读取.txt或.pdf格式的博客内容。 - 我们将内容分割成大小为800、重叠为100的文档块,以保持连续文档的上下文相关性。
- 我们使用
FAISS来创建一个向量库,并借助我们的查询,检索出基于相似性的前15个文档。 - 现在,我们使用重排器对这15个文档进行重排,并通过以下函数获取前3个文档:
defrerank_documents(query, candidates, k_rerank=3):
"""使用重排器模型对文档进行重排"""
print("正在对文档进行重排...")
tokenizer, model = load_reranker_model()
# 准备输入
pairs = []
for doc, _ in candidates:
pair = f"<Instruct>: 给定一个网络搜索查询,检索能回答该查询的相关段落\n<Query>: {query}\n<Document>: {doc['content']}"
pairs.append(pair)
# 分词
inputs = tokenizer(pairs, padding=True, truncation=True, max_length=8192, return_tensors="pt").to(device)
# 获取分数
with torch.no_grad():
outputs = model(**inputs)
logits = outputs.logits[:, -1, :]
# 获取“是/否”词元的分数
token_false_id = tokenizer.convert_tokens_to_ids("no")
token_true_id = tokenizer.convert_tokens_to_ids("yes")
true_scores = logits[:, token_true_id]
false_scores = logits[:, token_false_id]
batch_scores = torch.stack([false_scores, true_scores], dim=1)
batch_scores = torch.nn.functional.log_softmax(batch_scores, dim=1)
scores = batch_scores[:, 1].exp().tolist()
# 卸载重排器模型
del tokenizer, model
clear_memory()
print("重排器模型已卸载")
# 按分数排序
documents = [doc for doc, _ in candidates]
doc_scores = list(zip(documents, scores))
doc_scores.sort(key=lambda x: x[1], reverse=True)
return doc_scores[:k_rerank]
一旦我们获得了这3个排名靠前的文档,我们就将它们传递给指令模型,以从我们的检索增强生成器中获取最终输出。
输出:
问题:LoRA和QLoRA有什么区别?
回答:LoRA(Low-Rank Adaptation,低秩适应)和QLoRA(Quantized Low-Rank Adaptation,量化低秩适应)都是参数高效的微调技术,用于使大型语言模型(LLM)适应特定任务。尽管它们有相似之处,但在方法和效率上有所不同。
1. **LoRA (低秩适应)**:
* LoRA在预训练模型的每一层的自注意力模块中引入低秩矩阵(A和B)。这些矩阵充当适配器,使模型能够为特定任务进行适应和专业化,同时最大限度地减少所需的额外参数数量。
* LoRA通过专注于优化可训练的低秩矩阵而不是微调所有参数来减少参数开销。这使得它在内存上更高效,计算成本也更低。
* LoRA允许预训练模型在多个任务之间共享,从而方便在部署过程中高效地进行任务切换。
* 与完全微调的模型相比,LoRA不会引入任何额外的推理延迟,使其适用于实时应用。
2. **QLoRA (量化低秩适应)**:
* QLoRA是LoRA的扩展,它进一步引入了量化,以在微调过程中提高参数效率。它在LoRA原则的基础上,引入了4位NormalFloat(NF4)量化和双重量化技术。
* NF4量化利用预训练神经网络权重的固有分布,将所有权重转换为适合NF4范围(-1到1)的固定分布。这使得有效的量化成为可能,而无需昂贵的量化估计算法。
* 双重量化通过量化量化常数本身来解决量化常数的内存开销。这在不影响性能的情况下显著减少了内存占用。
* QLoRA通过引入量化实现了更高的内存效率,这对于在资源受限的设备上部署大型模型特别有价值。
* 尽管其参数高效,QLoRA仍保持了高模型质量,在各种下游任务上的表现与完全微调的模型相当甚至更好。
总而言之,LoRA专注于通过低秩适应来减少可训练参数的数量,而QLoRA则通过整合量化技术进一步增强了这种效率,使其更适合在计算资源有限的设备上部署。
来源:fine_tuning.txt, Parameter-Efficient Fine-Tuning of Large Language Models with LoRA and QLoRA.pdf, Parameter-Efficient Fine-Tuning of Large Language Models with LoRA and QLoRA.pdf
注意:您可以参考日志文件rag_retrieval_log.txt,以获取有关检索到的文档、与查询的相似性分数以及重排器分数的更多信息。
总结
通过结合使用通义千问3.0的指令、嵌入和重排器模型,我们构建了一个实用的RAG管道,充分利用了它们的优势。凭借256K的上下文长度和多语言支持,通义千问系列在实际任务中展现了其多功能性。作为下一步,您可以尝试增加传递给指令模型的文档数量,或者针对不同用例使用思维模型。模型的输出也很有前景。我建议您尝试使用**忠实度(Faithfulness)和答案相关性(Answer Relevancy)**等指标来评估RAG,以确保LLM在您的任务/用例中大部分没有出现幻觉。
普通人如何抓住AI大模型的风口?
领取方式在文末
为什么要学习大模型?
目前AI大模型的技术岗位与能力培养随着人工智能技术的迅速发展和应用 , 大模型作为其中的重要组成部分 , 正逐渐成为推动人工智能发展的重要引擎 。大模型以其强大的数据处理和模式识别能力, 广泛应用于自然语言处理 、计算机视觉 、 智能推荐等领域 ,为各行各业带来了革命性的改变和机遇 。
目前,开源人工智能大模型已应用于医疗、政务、法律、汽车、娱乐、金融、互联网、教育、制造业、企业服务等多个场景,其中,应用于金融、企业服务、制造业和法律领域的大模型在本次调研中占比超过 30%。

随着AI大模型技术的迅速发展,相关岗位的需求也日益增加。大模型产业链催生了一批高薪新职业:

人工智能大潮已来,不加入就可能被淘汰。如果你是技术人,尤其是互联网从业者,现在就开始学习AI大模型技术,真的是给你的人生一个重要建议!
最后
只要你真心想学习AI大模型技术,这份精心整理的学习资料我愿意无偿分享给你,但是想学技术去乱搞的人别来找我!
在当前这个人工智能高速发展的时代,AI大模型正在深刻改变各行各业。我国对高水平AI人才的需求也日益增长,真正懂技术、能落地的人才依旧紧缺。我也希望通过这份资料,能够帮助更多有志于AI领域的朋友入门并深入学习。
真诚无偿分享!!!
vx扫描下方二维码即可
加上后会一个个给大家发

大模型全套学习资料展示
自我们与MoPaaS魔泊云合作以来,我们不断打磨课程体系与技术内容,在细节上精益求精,同时在技术层面也新增了许多前沿且实用的内容,力求为大家带来更系统、更实战、更落地的大模型学习体验。

希望这份系统、实用的大模型学习路径,能够帮助你从零入门,进阶到实战,真正掌握AI时代的核心技能!
01 教学内容

-
从零到精通完整闭环:【基础理论 →RAG开发 → Agent设计 → 模型微调与私有化部署调→热门技术】5大模块,内容比传统教材更贴近企业实战!
-
大量真实项目案例: 带你亲自上手搞数据清洗、模型调优这些硬核操作,把课本知识变成真本事!
02适学人群
应届毕业生: 无工作经验但想要系统学习AI大模型技术,期待通过实战项目掌握核心技术。
零基础转型: 非技术背景但关注AI应用场景,计划通过低代码工具实现“AI+行业”跨界。
业务赋能突破瓶颈: 传统开发者(Java/前端等)学习Transformer架构与LangChain框架,向AI全栈工程师转型。

vx扫描下方二维码即可

本教程比较珍贵,仅限大家自行学习,不要传播!更严禁商用!
03 入门到进阶学习路线图
大模型学习路线图,整体分为5个大的阶段:

04 视频和书籍PDF合集

从0到掌握主流大模型技术视频教程(涵盖模型训练、微调、RAG、LangChain、Agent开发等实战方向)

新手必备的大模型学习PDF书单来了!全是硬核知识,帮你少走弯路(不吹牛,真有用)

05 行业报告+白皮书合集
收集70+报告与白皮书,了解行业最新动态!

06 90+份面试题/经验
AI大模型岗位面试经验总结(谁学技术不是为了赚$呢,找个好的岗位很重要)

07 deepseek部署包+技巧大全

由于篇幅有限
只展示部分资料
并且还在持续更新中…
真诚无偿分享!!!
vx扫描下方二维码即可
加上后会一个个给大家发

1281

被折叠的 条评论
为什么被折叠?



