通义千问1.5-1.8B-Chat-GPTQ-Int4 使用CSDN博客文章进行领域知识微调
通义千问1.5-1.8B-Chat-GPTQ-Int4 使用CSDN博客文章进行领域知识微调想让大模型更懂你的专业领域吗比如你想让它精通后端开发、前端框架或者某个特定的技术栈回答得更专业、更贴切。今天我们就来手把手教你一个实用技巧利用技术社区里海量的公开博客文章为你自己的通义千问模型“开小灶”进行领域知识微调。这个过程就像给模型做一次定向的知识补充。我们以CSDN上的技术博客为例从如何获取和清洗这些文章数据到编写微调脚本最后在云端GPU上完成训练带你走完全程。即使你之前没怎么接触过模型微调跟着步骤走也能让你的模型变得更“懂行”。1. 准备工作理解我们要做什么在开始动手之前我们先花几分钟把整个事情的脉络理清楚。这能帮你更好地理解每一步的目的而不是机械地敲命令。简单来说大模型就像一位知识渊博但领域宽泛的“通才”。它知道很多但对某个非常垂直、非常新的技术细节可能就不如天天泡在相关论坛里的“专家”了。我们的目标就是通过微调让这位“通才”在你关心的领域变得更像“专家”。微调不是从头训练一个模型那需要海量数据和算力。我们是在一个已经训练好的、能力很强的基座模型比如通义千问1.5-1.8B-Chat基础上用一批新的、高质量的领域数据比如CSDN上关于“Spring Cloud”的精品文章对它进行“再教育”。模型会调整它内部的一部分参数从而学会这些新知识并在回答相关问题时能调用这些知识给出更专业的回复。我们这次会使用一种叫LoRALow-Rank Adaptation的高效微调方法。它的好处是训练速度快需要的显存少而且只会新增一小部分参数不会改动原始模型的大部分“记忆”。训练完成后你可以很方便地加载或卸载这个“知识扩展包”非常灵活。整个流程可以拆解成几个关键步骤找数据、洗数据、准备训练脚本、跑训练、测试效果。下面我们就一步步来。2. 第一步获取与清洗领域数据数据是微调的“粮食”粮食的质量直接决定模型“学习”的效果。我们的目标是获取CSDN上特定主题的高质量技术文章。2.1 数据获取思路完全手动复制粘贴显然不现实。我们可以通过编写简单的爬虫脚本来批量获取。这里需要特别注意任何数据获取行为都必须遵守网站的服务条款和robots.txt协议尊重版权仅用于个人学习与研究且不应对目标网站造成访问压力。一个常见的思路是通过CSDN的搜索功能找到特定关键词下的文章列表页然后解析列表页获取文章链接最后再逐个访问文章详情页抓取标题和正文内容。下面是一个高度简化的、用于演示原理的示例。在实际操作中你需要处理反爬机制、分页、动态加载等问题并确保请求频率友好。import requests from bs4 import BeautifulSoup import time import json def fetch_article_links(keyword, max_pages3): 获取文章链接列表示例需根据实际网页结构调整 base_url fhttps://so.csdn.net/so/search?q{keyword} links [] for page in range(1, max_pages 1): # 注意实际URL结构可能不同这里仅为示例 url f{base_url}tblogp{page} try: resp requests.get(url, headers{User-Agent: Mozilla/5.0}) soup BeautifulSoup(resp.text, html.parser) # 这里需要根据实际的HTML结构找到文章链接的标签 # 例如可能是 classmain-item 下的 a 标签 for item in soup.find_all(a, class_some-article-class): # 请替换为真实class href item.get(href) if href and article/details in href: links.append(href) time.sleep(1) # 礼貌性延迟避免请求过快 except Exception as e: print(f获取第{page}页失败: {e}) return links def fetch_article_content(article_url): 获取单篇文章的标题和正文 try: resp requests.get(article_url, headers{User-Agent: Mozilla/5.0}) soup BeautifulSoup(resp.text, html.parser) # 提取标题需要根据实际页面结构调整选择器 title_tag soup.find(h1, class_title-article) # 常见标题class title title_tag.text.strip() if title_tag else No Title # 提取正文CSDN文章正文通常在 idarticle_content 或 classblog-content-box 的div里 content_div soup.find(div, idarticle_content) or soup.find(div, class_blog-content-box) if content_div: # 清理正文中的脚本、样式等无关标签 for tag in content_div([script, style, aside, nav]): tag.decompose() content content_div.get_text(separator\n, stripTrue) else: content return {title: title, content: content, url: article_url} except Exception as e: print(f抓取文章 {article_url} 失败: {e}) return None # 示例抓取“Docker”相关的文章 if __name__ __main__: keyword Docker print(f开始抓取关键词 {keyword} 相关的文章链接...) article_links fetch_article_links(keyword, max_pages2) # 少量测试 print(f找到 {len(article_links)} 篇文章链接。) articles [] for link in article_links: print(f正在抓取: {link}) article_data fetch_article_content(link) if article_data and article_data[content]: articles.append(article_data) time.sleep(1.5) # 增加延迟保持友好 # 保存为JSON文件 with open(fcsdn_articles_{keyword}.json, w, encodingutf-8) as f: json.dump(articles, f, ensure_asciiFalse, indent2) print(f数据已保存至 csdn_articles_{keyword}.json 共 {len(articles)} 篇。)重要提示上述代码仅为演示逻辑CSDN的页面结构可能随时变化你需要使用浏览器的开发者工具F12检查元素更新标签选择器。务必遵守网站规定控制抓取速度和数量。2.2 数据清洗与格式化抓取下来的原始文本通常包含很多“噪音”比如广告、版权声明、无关的推荐链接、代码注释中的乱码等。我们需要清洗这些数据并将其转换成模型训练需要的格式。对于通义千问Chat模型通常的微调数据格式是包含“instruction”指令、“input”输入和“output”输出的对话格式。我们可以将博客文章内容巧妙地构造成这种格式。import json import re def clean_text(text): 基础文本清洗 if not text: return # 移除多余的空白字符包括换行符和空格 text re.sub(r\s, , text) # 移除常见的无关短语根据实际情况扩充 noise_phrases [ 版权声明本文为博主原创文章, 遵循 CC 4.0 BY-SA 版权协议, 转载请附上原文出处链接, 如有侵权请联系删除, 感谢您的阅读, 如果觉得有帮助请点个赞 ] for phrase in noise_phrases: text text.replace(phrase, ) return text.strip() def format_to_conversation(article_data): 将单篇文章数据格式化为对话样本 title article_data.get(title, ) content clean_text(article_data.get(content, )) # 如果内容太短可能质量不高可以过滤掉 if len(content) 300: return None # 构建一个简单的指令-输出对 # 指令要求模型根据标题生成或总结内容 # 输入标题可选 # 输出文章正文 formatted_sample { instruction: 请根据以下技术主题生成一篇详细的技术博客文章。, input: title, output: content } # 另一种常见格式是问答对可以从文章中提取或生成QA # 例如将小标题作为问题后续段落作为答案这里简化处理 return formatted_sample # 加载并处理抓取的数据 input_file csdn_articles_Docker.json output_file cleaned_training_data.jsonl formatted_samples [] with open(input_file, r, encodingutf-8) as f: raw_articles json.load(f) for article in raw_articles: sample format_to_conversation(article) if sample: formatted_samples.append(sample) # 保存为JSONL格式每行一个JSON对象这是许多训练工具支持的格式 with open(output_file, w, encodingutf-8) as f: for sample in formatted_samples: f.write(json.dumps(sample, ensure_asciiFalse) \n) print(f数据清洗与格式化完成。共生成 {len(formatted_samples)} 条训练样本已保存至 {output_file})清洗后你就得到了一份干净的、格式规范的训练数据集。数据质量比数量更重要几百篇高质量文章的效果可能优于几千篇低质量文章。3. 第二步准备微调环境与脚本有了数据我们接下来准备训练环境。本地训练大模型对显卡要求很高因此我们选择在云端的GPU平台上进行。这里以星图GPU平台为例它提供了预置的环境和资源能省去很多环境配置的麻烦。3.1 环境与模型准备首先你需要一个支持PyTorch和深度学习库的环境。星图平台的镜像通常已经配置好了基础环境。我们主要需要安装一些特定的微调库。我们将使用transformers、datasets和peftParameter-Efficient Fine-Tuning库。peft库包含了LoRA等高效微调方法的实现。# 在星图平台的Notebook或终端中通常基础环境已具备 # 可能需要安装或更新以下库 pip install transformers datasets accelerate peft -U pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 # 根据CUDA版本选择接下来下载我们要微调的基础模型通义千问1.5-1.8B-Chat的GPTQ-Int4量化版本。量化模型体积更小加载和推理更快适合在资源有限的情况下进行微调。from transformers import AutoTokenizer, AutoModelForCausalLM model_name_or_path Qwen/Qwen1.5-1.8B-Chat-GPTQ-Int4 # 模型在Hugging Face上的名称 # 加载tokenizer和模型 tokenizer AutoTokenizer.from_pretrained(model_name_or_path) model AutoModelForCausalLM.from_pretrained( model_name_or_path, device_mapauto, # 自动分配到可用设备GPU trust_remote_codeTrue # 通义千问模型需要此参数 ) print(模型与分词器加载完毕。)3.2 编写LoRA微调脚本现在我们来编写核心的训练脚本。我们会使用peft库来配置LoRA参数并使用transformers的TrainerAPI来管理训练过程。创建一个名为train_lora.py的脚本文件import json from datasets import Dataset from transformers import ( AutoTokenizer, AutoModelForCausalLM, DataCollatorForSeq2Seq, TrainingArguments, Trainer ) from peft import LoraConfig, TaskType, get_peft_model import torch # 1. 加载模型和分词器 model_name_or_path Qwen/Qwen1.5-1.8B-Chat-GPTQ-Int4 tokenizer AutoTokenizer.from_pretrained(model_name_or_path, trust_remote_codeTrue) # 设置padding token如果tokenizer没有 if tokenizer.pad_token is None: tokenizer.pad_token tokenizer.eos_token model AutoModelForCausalLM.from_pretrained( model_name_or_path, device_mapauto, torch_dtypetorch.float16, # 使用半精度浮点数节省显存 trust_remote_codeTrue ) # 2. 加载并预处理数据集 def load_and_preprocess_data(file_path): data [] with open(file_path, r, encodingutf-8) as f: for line in f: data.append(json.loads(line)) def preprocess_function(examples): # 构建模型输入的文本格式。通义千问Chat格式通常为 # |im_start|system\n{system_message}|im_end|\n|im_start|user\n{user_message}|im_end|\n|im_start|assistant\n{assistant_message}|im_end| texts [] for inst, inp, outp in zip(examples[instruction], examples[input], examples[output]): # 如果input不为空则与instruction拼接作为用户输入 user_msg f{inst}\n{inp} if inp else inst # 构建完整对话文本 message [ {role: system, content: 你是一个技术专家请根据用户要求生成专业的技术内容。}, {role: user, content: user_msg}, {role: assistant, content: outp} ] text tokenizer.apply_chat_template(message, tokenizeFalse, add_generation_promptFalse) texts.append(text) return {text: texts} dataset Dataset.from_list(data) tokenized_dataset dataset.map( preprocess_function, batchedTrue, remove_columnsdataset.column_names ) return tokenized_dataset train_dataset load_and_preprocess_data(cleaned_training_data.jsonl) print(f训练数据集加载完成样本数{len(train_dataset)}) # 3. 配置LoRA lora_config LoraConfig( task_typeTaskType.CAUSAL_LM, # 因果语言模型任务 r8, # LoRA的秩rank影响参数量通常8或16 lora_alpha32, # 缩放参数 lora_dropout0.1, # Dropout概率 target_modules[q_proj, k_proj, v_proj, o_proj], # 对Transformer的注意力模块应用LoRA biasnone ) model get_peft_model(model, lora_config) model.print_trainable_parameters() # 打印可训练参数量应该只占原模型很小一部分 # 4. 配置训练参数 training_args TrainingArguments( output_dir./qwen1.5-1.8b-csdn-lora, # 输出目录 num_train_epochs3, # 训练轮数根据数据集大小调整 per_device_train_batch_size4, # 每个GPU的批次大小根据显存调整 gradient_accumulation_steps4, # 梯度累积步数模拟更大批次 warmup_steps100, # 学习率预热步数 logging_steps50, # 每多少步打印一次日志 save_steps500, # 每多少步保存一次检查点 save_total_limit2, # 最多保存的检查点数量 learning_rate2e-4, # 学习率LoRA通常可以设大一点 fp16True, # 使用混合精度训练节省显存并加速 push_to_hubFalse, # 不上传到Hugging Face Hub report_tonone, # 不报告到其他平台 remove_unused_columnsFalse, ) # 5. 创建Trainer并开始训练 trainer Trainer( modelmodel, argstraining_args, train_datasettrain_dataset, tokenizertokenizer, data_collatorDataCollatorForSeq2Seq(tokenizertokenizer, paddingTrue), ) print(开始训练...) trainer.train() print(训练完成) # 6. 保存LoRA适配器权重 model.save_pretrained(./qwen1.5-1.8b-csdn-lora-final) print(LoRA权重已保存。)这个脚本涵盖了从数据加载、LoRA配置到训练启动的全过程。你需要根据自己实际的GPU显存大小调整per_device_train_batch_size和gradient_accumulation_steps参数。4. 第三步在星图GPU平台运行训练脚本准备好了我们把它放到云端GPU上运行。上传资源将你的cleaned_training_data.jsonl数据集和train_lora.py训练脚本上传到星图GPU平台为你分配的工作空间比如通过JupyterLab的文件上传功能。调整参数可选根据你的数据集大小和GPU型号比如V100 16GB A100等你可能需要回头调整脚本中的num_train_epochs、per_device_train_batch_size等参数。显存不够就调小批次大小或增加梯度累积步数。启动训练在平台的终端Terminal中运行以下命令cd /your/work/path # 进入你的工作目录 python train_lora.py训练开始后终端会输出损失值loss等日志信息。看到loss值稳步下降并逐渐趋于平稳通常意味着训练正在有效进行。整个过程可能需要几十分钟到几小时取决于数据量、epoch数和GPU性能。训练完成后会在指定的输出目录./qwen1.5-1.8b-csdn-lora-final生成保存的LoRA权重文件通常是adapter_model.bin和adapter_config.json。5. 第四步测试与使用微调后的模型训练结束我们来验证一下效果。编写一个简单的测试脚本加载基础模型和我们刚训练好的LoRA权重进行对话测试。创建一个test_model.py文件from transformers import AutoTokenizer, AutoModelForCausalLM from peft import PeftModel import torch # 加载基础模型和分词器 base_model_name Qwen/Qwen1.5-1.8B-Chat-GPTQ-Int4 tokenizer AutoTokenizer.from_pretrained(base_model_name, trust_remote_codeTrue) base_model AutoModelForCausalLM.from_pretrained( base_model_name, device_mapauto, torch_dtypetorch.float16, trust_remote_codeTrue ) # 加载LoRA权重 lora_model_path ./qwen1.5-1.8b-csdn-lora-final model PeftModel.from_pretrained(base_model, lora_model_path) model model.merge_and_unload() # 可选将LoRA权重合并到基础模型中方便后续单独部署 model.eval() # 定义对话函数 def chat_with_model(user_input): messages [ {role: system, content: 你是一个精通Docker容器技术的专家。}, # 可以根据微调领域修改 {role: user, content: user_input} ] text tokenizer.apply_chat_template(messages, tokenizeFalse, add_generation_promptTrue) inputs tokenizer(text, return_tensorspt).to(model.device) with torch.no_grad(): outputs model.generate( **inputs, max_new_tokens512, # 生成的最大长度 do_sampleTrue, # 使用采样 temperature0.8, # 温度参数控制随机性 top_p0.9 # 核采样参数 ) response tokenizer.decode(outputs[0][inputs[input_ids].shape[1]:], skip_special_tokensTrue) return response # 进行测试 test_questions [ 请详细解释Dockerfile中COPY和ADD指令的区别。, 如何优化Docker镜像的体积, Docker容器和虚拟机的主要区别是什么 ] for q in test_questions: print(f用户: {q}) answer chat_with_model(q) print(f模型: {answer}\n{-*50})运行这个测试脚本观察模型的回答。与微调前相比你应该能感觉到在微调数据涉及的领域比如Docker模型的回答更具体、更专业可能还会使用一些领域内的特定术语和最佳实践更像一个技术博客作者的口吻。6. 一些经验与总结走完这一遍你应该已经成功用CSDN博客数据给通义千问模型做了一次领域知识微调。回顾一下整个过程的关键在于数据的质量、LoRA参数的合理配置以及训练资源的有效利用。数据方面清洗和格式化比单纯追求数量更重要。尽量选择那些结构清晰、内容详实、代码规范的优质博文。在构造训练样本时多思考如何让“指令-输出”对更贴合你希望模型学会的任务比如直接总结、问答、或者代码生成。训练过程中如果遇到显存不足OOM的错误首要任务是减小per_device_train_batch_size或者尝试使用梯度检查点gradient_checkpointingTrue等技巧。学习率、训练轮数这些超参数可以根据loss曲线进行微调避免欠拟合或过拟合。最后这个微调出来的模型可以看作是你的“领域增强版”通义千问。你可以把它用于智能技术客服、代码助手、文档摘要等场景。这个方法具有很强的扩展性不只是CSDN任何高质量的、结构化的领域文本如技术文档、论文、论坛精华帖都可以作为“粮食”来喂养模型让它持续进化更贴合你的专属需求。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

相关新闻

手把手教你用SD卡给i.MX6ULL开发板烧录Uboot和Linux系统(附分区避坑指南)

手把手教你用SD卡给i.MX6ULL开发板烧录Uboot和Linux系统(附分区避坑指南)

从零构建:i.MX6ULL开发板SD卡系统烧录实战与深度避坑指南 如果你刚刚拿到一块i.MX6ULL开发板,面对空白的存储介质和一堆源码文件,可能会感到无从下手。系统移植是嵌入式Linux开发中最具挑战性的一环,而SD卡启动方式因其灵活性和便…

2026/7/5 22:47:41 阅读更多 →
抖音评论数据采集与智能导出工具:高效解决方案与实战技巧

抖音评论数据采集与智能导出工具:高效解决方案与实战技巧

抖音评论数据采集与智能导出工具:高效解决方案与实战技巧 【免费下载链接】TikTokCommentScraper 项目地址: https://gitcode.com/gh_mirrors/ti/TikTokCommentScraper 在当今社交媒体数据分析领域,评论数据的采集与分析已成为内容运营、市场调研…

2026/5/17 10:53:07 阅读更多 →
ViT图像分类-中文-日常物品行业落地:快递驿站包裹图像自动分拣与异常检测联动

ViT图像分类-中文-日常物品行业落地:快递驿站包裹图像自动分拣与异常检测联动

ViT图像分类-中文-日常物品行业落地:快递驿站包裹图像自动分拣与异常检测联动 在快递驿站日益繁忙的今天,每天需要处理成千上万的包裹,传统的人工分拣方式不仅效率低下,还容易出错。工作人员需要肉眼识别包裹上的标签信息&#x…

2026/5/17 10:53:07 阅读更多 →

最新新闻

5分钟在Windows搭建RTMP流媒体服务器:Nginx-RTMP-Win32完整指南

5分钟在Windows搭建RTMP流媒体服务器:Nginx-RTMP-Win32完整指南

5分钟在Windows搭建RTMP流媒体服务器:Nginx-RTMP-Win32完整指南 【免费下载链接】nginx-rtmp-win32 Nginx-rtmp-module Windows builds. 项目地址: https://gitcode.com/gh_mirrors/ng/nginx-rtmp-win32 想在Windows平台上快速搭建自己的流媒体直播服务器吗…

2026/7/6 15:10:00 阅读更多 →
用经验驾驭AI:大龄程序员的第二春

用经验驾驭AI:大龄程序员的第二春

用经验驾驭AI:大龄程序员的第二春 前几天,团队里一个刚毕业的小伙子凑过来看我写代码。他盯着屏幕看了半天,突然冒出一句:“哥,你这个写代码的方式好奇怪,全是用中文描述需求,让AI生成代码&…

2026/7/6 15:07:57 阅读更多 →
朴素贝叶斯分类器 Python 实现:从零构建 2 个核心函数与拉普拉斯平滑

朴素贝叶斯分类器 Python 实现:从零构建 2 个核心函数与拉普拉斯平滑

朴素贝叶斯分类器 Python 实现:从零构建核心函数与拉普拉斯平滑实战1. 朴素贝叶斯算法原理精要朴素贝叶斯分类器基于贝叶斯定理构建,其核心公式为:P(y|x) P(x|y) * P(y) / P(x)其中:P(y|x)是给定特征x时类别y的后验概率P(x|y)是似…

2026/7/6 15:05:55 阅读更多 →
SDOI2010试题评价

SDOI2010试题评价

这套题之所以经典(或者说“臭名昭著”),是因为它完美展现了OI题目的两个极端:极致的思想之美与极致的工程之恶。 第一部分:噩梦的巅峰——猪国杀 题目定位: OI史上最复杂的模拟题,没有之一。它更像是一个软件工程项目的需求文档,而不是一道5个小时的竞赛题。 详细解剖…

2026/7/6 15:05:55 阅读更多 →
西安邮电大学历年考试试卷库:学生备考的终极指南与高效学习方法

西安邮电大学历年考试试卷库:学生备考的终极指南与高效学习方法

西安邮电大学历年考试试卷库:学生备考的终极指南与高效学习方法 【免费下载链接】XUPT-Exam-Collection 西安邮电大学历年 期中/期末考试 卷子共享库 项目地址: https://gitcode.com/gh_mirrors/xu/XUPT-Exam-Collection 西安邮电大学考试试卷库是一个专为西…

2026/7/6 15:05:55 阅读更多 →
[东软电量计开发]:ES32L0910开发调试指南(一)

[东软电量计开发]:ES32L0910开发调试指南(一)

简介 随着移动电源新国标的发布,移动电源各个摸底测试机构都在做新国标解读宣贯会,根据新规的要求,基本上原有的方案都要推翻,电芯要求、保护策略、智能管理、禁用等全方位升级。 于是,移动电源新方案都需要增加电量计,主要用来采集数据(电芯电压、电流、SOC、SOH、温度…

2026/7/6 15:03:54 阅读更多 →

日新闻

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2与MySQL单元测试兼容性:5个关键SQL语句差异与规避方案1. 单元测试中的数据库兼容性挑战在Java开发领域,单元测试是保证代码质量的重要环节。当应用涉及数据库操作时,测试环境的搭建往往成为开发者的痛点。H2数据库因其轻量级、内存模式和快…

2026/7/6 0:01:17 阅读更多 →
Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘 【免费下载链接】rbtray A fork of RBTray from http://sourceforge.net/p/rbtray/code/. 项目地址: https://gitcode.com/gh_mirrors/rb/rbtray 你是否厌倦了Windows任务栏上密密麻麻的图标&…

2026/7/6 0:01:17 阅读更多 →
Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C 运行时库一键安装终极指南:告别DLL缺失烦恼 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过这样的情况:下载了…

2026/7/6 0:05:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/6 8:11:50 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/6 8:11:52 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/6 6:52:56 阅读更多 →

月新闻