qwen3-0.6B初探
一个标准的 Hugging Face / ModelScope 模型文件夹通常包含以下几类文件,它们各自扮演着不同的角色:
-
模型权重文件(大脑本体)
model.safetensors(1.39G):这是模型真正的“知识”所在。它是一个二进制文件,里面存储了模型训练好的所有参数(权重)。safetensors是目前推荐的格式,因为它比传统的.bin格式加载速度更快,且更安全。
-
模型架构与配置文件(说明书)
config.json:模型的“架构说明书”。它定义了模型长什么样、怎么运行,比如包含多少层、隐藏层维度、注意力头数等核心参数。没有它,代码就不知道如何搭建模型。generation_config.json:模型生成文本时的“行为规则”。它包含了默认的生成参数,比如温度(temperature)、最大生成长度等,控制着模型回答时的风格。
-
分词器文件(翻译官)
tokenizer.json/tokenizer_config.json:分词器的核心配置和词表。它们的作用是将你输入的自然语言(文字)转换成模型能懂的数字信号(Token ID),并在模型输出后将数字翻译回文字。merges.txt:定义了分词的合并规则,配合词表实现 BPE(字节对编码)分词算法。
-
辅助与元数据文件
README.md:模型的使用说明文档,通常包含模型的用途、限制、使用示例和版权信息。LICENSE:许可证文件,说明该模型的使用条款(例如 Qwen3 系列通常遵循 Apache 2.0 协议,允许免费商用)。
为什么代码里没写路径,它还能找到模型?
在之前的代码中,我们写的是
这就像你在网购平台搜索商品一样:
model_name="Qwen/Qwen3-0.6B"。这就像你在网购平台搜索商品一样:
- 如果你只输入商品名(
Qwen/Qwen3-0.6B),系统会默认去网上的大仓库(ModelScope 或 Hugging Face)帮你下载。 - 如果你把本地文件夹的绝对路径(比如
D:/my_models/Qwen3-0.6B)填进去,系统就会直接去你的电脑硬盘里找它,不再联网下载。
如何修改代码来使用你本地下载的模型?
非常简单!你只需要把
QwenChatbot 类初始化时的默认路径,改成你电脑上存放模型的真实文件夹路径就可以了。假设你下载的模型文件夹叫
Qwen3-0.6B,放在桌面的 models # 修改前(去网上找): # def __init__(self, model_name="Qwen/Qwen3-0.6B"): # 修改后(去你电脑的本地找): class QwenChatbot: def __init__(self, model_name=r"D:\models\Qwen3-0.6B"): # ⬅️ 这里换成你电脑上的真实路径 print("🤖 机器人正在加载大脑和翻译官,请稍等...") # ... 后面的代码保持不变
附:原
# 第一步:从工具箱里拿出我们需要的工具 # AutoModelForCausalLM:这是机器人的“大脑” # AutoTokenizer:这是机器人的“翻译官”,负责把我们的话变成机器能懂的数字 from modelscope import AutoModelForCausalLM, AutoTokenizer import torch # 引入 torch 库,这是用来控制机器人运行速度的“加速器” # 第二步:定义一个机器人的“图纸”(在编程里叫“类”) class QwenChatbot: # 这是机器人的“出生说明书”(初始化方法) # 当你第一次启动它时,它就会按照这里的步骤准备自己 def __init__(self, model_name="Qwen/Qwen3-0.6B"): print("🤖 机器人正在加载大脑和翻译官,请稍等...") # 1. 加载翻译官 self.tokenizer = AutoTokenizer.from_pretrained(model_name) # 2. 加载大脑(⚠️ 重点优化:加了 device_map="auto" 和 torch_dtype) # device_map="auto":意思是“请自动帮我找一台合适的电脑(或显卡)来运行我” # torch_dtype=torch.bfloat16:意思是“请用省内存的模式加载大脑”,这样小电脑也能跑得动! self.model = AutoModelForCausalLM.from_pretrained( model_name, device_map="auto", torch_dtype=torch.bfloat16 ) # 3. 让大脑进入“考试模式”(⚠️ 重点优化:加了 eval()) # eval() 的意思是告诉大脑:“现在是回答问题时间,不要做多余的动作(比如随机忘记东西)” self.model.eval() # 4. 准备一个“小本本”(历史记录),用来记住我们之前聊过什么 self.history = [] print("✅ 机器人准备就绪!可以开始聊天啦!\n") # 这是机器人的“说话功能” def generate_response(self, user_input): # 1. 把新说的话和“小本本”上的旧话拼在一起 messages = self.history + [{"role": "user", "content": user_input}] # 2. 让翻译官把拼好的话,变成机器人能看懂的格式 text = self.tokenizer.apply_chat_template( messages, tokenize=False, add_generation_prompt=True ) # 3. 把文本变成数字(⚠️ 重点优化:把数字放到和大脑相同的电脑设备上) # 如果不加 .to(self.model.device),大脑和数字不在同一个房间,机器人会报错罢工哦! inputs = self.tokenizer(text, return_tensors="pt").to(self.model.device) # 4. 大脑开始思考并回答问题(最多想 32768 个词) response_ids = self.model.generate( **inputs, max_new_tokens=32768 )[0][len(inputs.input_ids[0]):].tolist() # 5. 把机器人想出来的数字,翻译回我们能看懂的文字 response = self.tokenizer.decode(response_ids, skip_special_tokens=True) # 6. 把刚才的对话记到“小本本”上(⚠️ 重点优化:防止小本本太厚被撑爆) # 如果聊得太久,小本本(历史记录)超过了 10 条,我们就把最旧的一条擦掉! self.history.append({"role": "user", "content": user_input}) self.history.append({"role": "assistant", "content": response}) # 如果历史记录超过 20 个(也就是 10 轮对话),就删掉最早的 2 个 if len(self.history) > 20: self.history = self.history[2:] # 7. 把机器人的回答交给你 return response # 第三步:启动机器人!(只有直接运行这个文件时,下面的代码才会执行) if __name__ == "__main__": # 1. 制造一个机器人 chatbot = QwenChatbot() # 2. 问它第一个问题(默认开启深度思考模式) user_input_1 = "How many r's in strawberries?" print(f"👦 你: {user_input_1}") response_1 = chatbot.generate_response(user_input_1) print(f"🤖 机器人: {response_1}") print("-" * 30) # 3. 问它第二个问题,并加上 /no_think 标签 # 意思是:“这个问题很简单,你不用深度思考,直接回答我!” user_input_2 = "Then, how many r's in blueberries? /no_think" print(f"👦 你: {user_input_2}") response_2 = chatbot.generate_response(user_input_2) print(f"🤖 机器人: {response_2}") print("-" * 30) # 4. 问它第三个问题,并加上 /think 标签 # 意思是:“这个问题很难,请你开启深度思考模式,仔细想一想再回答!” user_input_3 = "Really? /think" print(f"👦 你: {user_input_3}") response_3 = chatbot.generate_response(user_input_3) print(f"🤖 机器人: {response_3}")
活到老,学到老。

浙公网安备 33010602011771号