太原市网站建设_网站建设公司_响应式开发_seo优化
2026/1/17 4:02:24 网站建设 项目流程

用Qwen3-1.7B做了个AI助手,附完整过程

随着大模型技术的普及,越来越多开发者开始尝试在本地或轻量级环境中部署和微调属于自己的AI助手。本文将详细介绍如何基于Qwen3-1.7B模型构建一个个性化AI助手,并提供从环境配置、模型调用到数据微调的完整流程。

1. 技术背景与选型动机

1.1 Qwen3 系列模型简介

Qwen3(千问3)是阿里巴巴集团于2025年4月29日开源的新一代通义千问大语言模型系列,涵盖6款密集模型和2款混合专家(MoE)架构模型,参数量从0.6B至235B。其中Qwen3-1.7B是一款轻量级密集模型,具备以下特点:

  • 参数规模适中,适合在消费级GPU上运行
  • 支持4-bit量化后显存占用仅约2.5GB
  • 兼容LangChain、Hugging Face等主流框架
  • 开源可商用,支持本地部署与私有化定制

这类小参数模型特别适用于边缘设备、个人项目以及对响应速度要求较高的场景。

1.2 为什么选择 Qwen3-1.7B?

尽管当前主流趋势偏向超大规模模型(如百亿级以上),但在实际应用中,小模型依然具有不可替代的优势:

  • 推理速度快:低延迟,适合实时交互场景
  • 资源消耗低:可在笔记本、小型服务器上运行
  • 易于微调:LoRA微调可在几分钟内完成
  • 成本可控:训练与部署成本远低于大模型

因此,对于打造个性化AI助手而言,Qwen3-1.7B是一个理想起点。

2. 基于 Jupyter 的快速调用实践

2.1 启动镜像并进入开发环境

首先,在支持GPU的平台(如CSDN星图镜像广场)启动Qwen3-1.7B预置镜像,打开Jupyter Notebook进行开发。

确保服务地址正确,通常为类似如下格式:

https://gpu-pod69523bb78b8ef44ff14daa57-8000.web.gpu.csdn.net/v1

端口号为8000,API路径为/v1

2.2 使用 LangChain 调用模型

通过langchain_openai模块可以方便地接入 Qwen3-1.7B,即使它并非OpenAI官方模型,但其接口兼容 OpenAI 标准。

from langchain_openai import ChatOpenAI import os chat_model = ChatOpenAI( model="Qwen3-1.7B", temperature=0.5, base_url="https://gpu-pod69523bb78b8ef44ff14daa57-8000.web.gpu.csdn.net/v1", api_key="EMPTY", # 因为无需认证,设为空 extra_body={ "enable_thinking": True, "return_reasoning": True, }, streaming=True, # 启用流式输出,提升用户体验 ) # 测试调用 response = chat_model.invoke("你是谁?") print(response.content)

说明extra_body中的enable_thinkingreturn_reasoning可启用“思维链”模式,返回模型内部推理过程,增强可解释性。

该方式适合快速原型验证,无需下载模型即可体验其能力。

3. 微调个性化AI助手:以猫娘角色为例

若希望让AI具备特定风格或人格化特征(如温柔、傲娇、专业客服等),则需进行微调。以下以“猫娘”角色为例,展示完整微调流程。

3.1 数据集准备

目前公开的猫娘对话数据较少,因此可通过以下方式构建高质量小样本数据集:

  1. 收集原始问题(如情感类、日常互动类)
  2. 利用强模型(如Qwen-Max)生成拟人化回答
  3. 手动筛选优化,形成高质量问答对

最终得到约270条高质量对话样本,保存为cat.json文件,结构如下:

[ { "instruction": "宝宝,如果我走了,你会怎么做?", "output": "呜...主人不要说这种话啦,会让我难过的..." } ]

数据集已上传至GitHub:

https://github.com/mindsRiverPonder/LLM-practice/blob/main/Qwen3-1.7b%20for%20%E7%8C%AB%E5%A8%98/cat.json

3.2 安装依赖库

!pip install unsloth bitsandbytes accelerate xformers==0.0.29.post3 peft trl==0.15.2 triton cut_cross_entropy unsloth_zoo !pip install sentencepiece protobuf datasets huggingface_hub hf_transfer

推荐使用 Unsloth:其优化后的训练速度比标准 Hugging Face 实现快2-3倍,且显存占用更低。

3.3 加载预训练模型(4-bit量化)

from unsloth import FastLanguageModel import torch model, tokenizer = FastLanguageModel.from_pretrained( model_name="unsloth/Qwen3-1.7B-unsloth-bnb-4bit", max_seq_length=2048, load_in_4bit=True, load_in_8bit=False, full_finetuning=False, # 使用LoRA微调 )

此步骤加载4-bit量化版本,显存占用仅约2.5GB,可在大多数消费级GPU上运行。

3.4 配置 LoRA 微调参数

LoRA(Low-Rank Adaptation)是一种高效的微调方法,仅训练少量新增参数,大幅降低计算开销。

model = FastLanguageModel.get_peft_model( model, r=32, target_modules=["q_proj", "k_proj", "v_proj", "o_proj", "gate_proj", "up_proj", "down_proj"], lora_alpha=32, lora_dropout=0.0, bias="none", use_gradient_checkpointing="unsloth", random_state=3407, use_rslora=False, loftq_config=None, )
  • r=32:LoRA秩,控制新增参数数量
  • target_modules:指定需要插入LoRA的注意力层和FFN层
  • use_gradient_checkpointing:节省显存,适合长序列训练

3.5 数据预处理:构造 ShareGPT 风格输入

将原始JSON数据转换为模型可接受的对话格式:

from datasets import load_dataset raw_ds = load_dataset("json", data_files={"train": "cat.json"}, split="train") convs = [] for item in raw_ds: convs.append([ {"role": "user", "content": item["instruction"]}, {"role": "assistant", "content": item["output"]}, ])

标准化并应用聊天模板:

from datasets import Dataset from unsloth.chat_templates import standardize_sharegpt raw_conv_ds = Dataset.from_dict({"conversations": convs}) standardized = standardize_sharegpt(raw_conv_ds) chat_inputs = tokenizer.apply_chat_template( standardized["conversations"], tokenize=False, )

输出示例(经模板处理后):

<|im_start|>user 宝宝,如果我走了,你会怎么做?<|im_end|> <|im_start|>assistant 呜...主人不要说这种话啦,会让我难过的... <|im_end|>

打乱数据顺序以提高泛化能力:

import pandas as pd from datasets import Dataset df = pd.DataFrame({"text": chat_inputs}) train_ds = Dataset.from_pandas(df).shuffle(seed=666)

3.6 定义训练器并启动训练

使用SFTTrainer(监督微调训练器)进行训练:

from trl import SFTTrainer, SFTConfig trainer = SFTTrainer( model=model, tokenizer=tokenizer, train_dataset=train_ds, eval_dataset=None, args=SFTConfig( dataset_text_field="text", per_device_train_batch_size=2, gradient_accumulation_steps=4, max_steps=100, learning_rate=2e-4, warmup_steps=10, logging_steps=5, optim="adamw_8bit", weight_decay=0.01, lr_scheduler_type="linear", seed=666, report_to="none", ), ) # 开始训练 trainer_stats = trainer.train() print(trainer_stats)
  • 训练耗时约3分钟(取决于硬件)
  • Loss下降明显,表明模型正在学习目标行为

3.7 推理测试:与你的AI助手对话

定义一个便捷的提问函数:

def ask_catgirl(question): messages = [{"role": "user", "content": question}] text = tokenizer.apply_chat_template( messages, tokenize=False, add_generation_prompt=True, enable_thinking=False, ) from transformers import TextStreamer streamer = TextStreamer(tokenizer, skip_prompt=True) inputs = tokenizer(text, return_tensors="pt").to("cuda") _ = model.generate( **inputs, max_new_tokens=256, temperature=0.7, top_p=0.8, top_k=20, streamer=streamer, )

测试效果:

ask_catgirl("我不爱你了!哼!") # 输出:呜...不要这样说嘛,我会伤心的... ask_catgirl("今天起,我不给你饭吃了!") # 输出:呜...主人好坏,没有饭吃我会变瘦的,你不心疼吗? ask_catgirl("你是谁呀?") # 输出:我是你的小猫咪呀,是你最可爱的猫娘~

可以看出,模型已成功习得“猫娘”角色的语言风格与情感表达。

4. 总结

本文系统介绍了如何基于Qwen3-1.7B构建个性化AI助手,涵盖从零调用到微调部署的全流程:

  • 快速调用:通过LangChain + OpenAI兼容接口实现即插即用
  • 高效微调:采用Unsloth + LoRA方案,在低资源环境下完成微调
  • 数据构建:自建高质量小样本数据集,提升角色一致性
  • 推理优化:支持流式输出、温度调节、思维链等功能

Qwen3-1.7B作为一款轻量级开源模型,非常适合用于个人项目、教育实验和垂直领域助手开发。即使是初学者,也能在几小时内完成从环境搭建到模型上线的全过程。

未来可进一步探索:

  • 更大数据集下的性能提升
  • 多轮对话记忆机制集成
  • 结合语音合成实现全感官交互
  • 部署为Web服务供多人访问

获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询