本地部署一个开源模型
实践要求:
- 在本地部署一个轻量级的开源模型(推荐Qwen3-0.6B),并尝试调整采样参数并观察其对输出的影响。
- 选择一个具体任务(如文本分类、信息抽取、代码生成等),设计并对比以下不同的提示策略(如Zero-shot、Few-shot、Chain-of-Thought)对输出结果的效果差异。
- 从性能、成本、可控性、隐私等维度比较闭源模型和开源模型
- 如果你要构建一个企业级的客服智能体,你会选择哪种类型的模型?需要考虑哪些因素?
首先,在本地部署一个轻量级的开源模型
加载Qwen3-0.6B模型,在这里可以查看到所有模型,搜索Qwen后,可以在详细介绍里查看这个模型的信息及示例。
from transformers import AutoModelForCausalLM, AutoTokenizer;
import torch;
model_name = "Qwen/Qwen3-0.6B"
# load the tokenizer and the model
tokenizer = AutoTokenizer.from_pretrained(model_name)
device = "cuda" if torch.cuda.is_available() else "cpu"
model = AutoModelForCausalLM.from_pretrained(
model_name,
torch_dtype="auto",
device_map="auto",
)
# prepare the model input
prompt = "给我一个FIFA的简介"
messages = [
{"role": "user", "content": prompt }
];
text = tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=False,
enable_thinking=True
);
print('test', text);
# 编码输入文本
model_inputs = tokenizer([text], return_tensors="pt").to(device);
# 使用模型生成回答
# max_new_tokens 控制了模型最多能生成多少个新的Token
generated_ids = model.generate(
model_inputs.input_ids,
max_new_tokens=512
);
# 将生成的 Token ID 截取掉输入部分
# 这样我们只解码模型新生成的部分
generated_ids = [
output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
]
# 解码生成的 Token ID
response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
print("\n模型的回答:")
print(response)
此时本地运行后,得到结果

此时将enable_thinking改为False,再次运行:

发现还是有思考的过程,搜索后了解到还需要将add_generation_prompt设置为True。
这是因为,模板只有在 add_generation_prompt=True 时才会去插入assistant的起始符,而 enable_thinking=False 的效果(强制插入一个空的 <think></think> 块,提示模型跳过思考直接回答)也是绑定在这段逻辑里的。belike:
{% if add_generation_prompt %}
{{ '<|im_start|>assistant\n' }}
{% if enable_thinking is defined and enable_thinking is false %}
{{ '<think>\n\n</think>\n\n' }}
{% endif %}
{% endif %}

将add_generation_prompt=True,enable_thinking=False后,可以看到大模型对FIFA的理解比较宽泛,由国际足联->Football For All。
还可以发现,生成的结果很容易有事实性的错误。
于是,我给问题加上一个系统的prompt:
{
"role": "system",
"content": "你是一个严谨的中文助手。只回答有把握的事实;如果不知道,就明确说明不知道,不要编造。"
}
输出结果:

看起来简短很多。
接下来我们选择“信息抽取”这个任务:
在微信读书上复制一段较复杂的文本作为prompt:
在漫长的人类进化的过程中,人类的生存环境充满了未知与危险。那些能够有效识别并规避风险的个体更有可能存活下来,并将自己的基因传递下去。在这一过程中,一种被称为“误报优于漏报”的进化原则便形成了。在资源有限、危机四伏的原始森林中,最有效的生存策略是保持警觉而非放松。
还以“远古祖先听到附近草丛中传来沙沙的声响”这一场景为例。如果祖先将风吹草动误判为有猛兽潜伏在周围并选择躲避,那么他们付出的代价仅仅是片刻的时间损失和轻微的精力消耗;但如果祖先将真正潜伏的猛兽误判为无害的风声而掉以轻心,那么付出的代价可能是致命的。正是这种代价的不对称性,使那些具有适度焦虑倾向的个体在自然选择中获得了显著的优势。这些个体对潜在的威胁更加敏感,更倾向于采取预防措施,因此更有可能避开危险、获得更长的生存时间与更多的繁殖机会。经过无数代的自然选择,这种对不确定性保持警觉的心理特质逐渐被固化在人类的基因库中,成为我们与生俱来的生物遗产。
zero-shot–给大模型两个提示,如下:
messages = [
{"role": "system", "content": "请给用户输入的文本做信息提取" },
{"role": "user", "content": prompt }
];
运行查看大模型返回结果:
信息提取结果如下:
1. **人类进化背景**:在漫长的人类进化过程中,人类的生存环境充满了未知与危险。
2. **生存策略**:能够有效识别并规避风险的个体更有可能存活下来,并将基因传递下去。这种策略被称为“误报优于漏报”。
3. **原始森林环境**:在资源有限、危机四伏的原始森林中,最有效的生存策略是保持警觉而非放松。
4. **误判与代价**:以“远古祖先听到草丛中传来沙沙声响”为例,如果误判为有猛兽潜伏,代价是时间损失和精力消耗;如果误判为无害风声,代价可能是致命。
5. **自然选择优势**:这种代价的不对称性使具有适度焦虑倾向的个体在自然选择中获得优势。他们对潜在威胁更敏感,更倾向于采取预防措施。
6. **基因固化**:经过无数代的自然选择,这种对不确定性保持警觉的心理特质逐渐被固化在人类的基因库中,成为人类的生物遗产。
Few-shot–给大模型两个提示,如下:
messages = [
{"role": "system", "content": '''请给用户输入的文本做信息提取,请参照以下例子:
文本:2026世界人工智能大会暨人工智能全球治理高级别会议将于7月17日至20日在上海举行,目前布展工作进入冲刺阶段。本届大会落地世博、张江、西岸“三地四馆”,展览总面积首次突破10万平方米,1100余家企业将携3000余项展品集中亮相,其中超过300款产品将实现全球首发。
信息提取结果:
1.段落主旨:2026世界人工智能大会暨人工智能全球治理高级别会议即将在上海开幕,目前布展进入最后冲刺阶段。本届展会规模创历届之最,展出面积、参展企业数、展品总量及全球首发产品数量均实现大幅突破。
2.段落内容标签:AI科技会展。
3.可关注隐含信息:
a.展览面积破10万平米为“首次”,显示本届大会规模显著升级;
b.300款全球首发产品,表明大会已成为AI新品首发的重要平台;
c.“人工智能治理高级别会议”并列主题,凸显对全球治理议题的重视;
d.“三地四馆”暗示多场馆联动,展区分布可能按主题或功能划分。
'''},
{"role": "user", "content": prompt }
];
运行查看大模型返回结果:
模型的回答:
1. 段落主旨:人类在漫长进化过程中形成了“误报优于漏报”的进化原则,以保持警觉应对未知风险,从而在资源有限、危机四伏的原始环境中生存并繁衍。
2. 段落内容标签:人类进化与适应策略。
3. 可关注隐含信息:
a. “误报优于漏报”体现人类应对风险的策略;
b. “远古祖先听到声响”说明人类对威胁的警觉性;
c. “代价的不对称性”强调生存策略的重要性;
d. “基因库中固化”体现人类适应性特征。
通过给一个案例,我们可以让大模型给出我们想要的信息结构。
Chain-of-Thought—-给大模型两个提示,和zero-shot的主要区别在给模型提示增加一句“请一步一步思考并回答”,记得将enable_thinking改为True,如下:
messages = [
{"role": "system", "content": "请给用户输入的文本做信息提取,请一步一步思考并回答" },
{"role": "user", "content": prompt }
];
结果:
模型的回答:
<think>
好的,我需要处理用户提供的文本,提取关键信息。首先,用户的问题是要求信息提取,所以我要仔细阅读并理解内容。
文本主要讲的是人类在进化过程中如何适应环境,特别是误报优于漏报的进化原则。还举了远古祖先的例子,说明在资源有限和危险多的情况下,保持警觉的重要性。最后提到这种特质被固化在人类基因中,成为生物遗产。
接下来,我需要确定哪些信息是提取的。可能的要点包括:人类进化中的环境挑战、误报优于漏报的进化原则、原始森林中的生存策略、祖先的例子、代价的不对称性、自然选择的结果等。
需要注意的是,用户可能希望得到结构清晰的信息列表,所以应该分点说明。同时,要确保信息准确,不遗漏重要细节。例如,例子中的“远古祖先听到附近草丛中传来沙沙的声响”需要保留,而代价的描述也要准确。
最后,检查是否有冗余的信息,确保每个提取的信息都是独立且明确的。这样用户就能得到一个全面的信息提取结果。
</think>
以下是信息提取的结果:
1. **进化背景**:人类在漫长进化过程中,生存环境充满未知与危险,个体需通过识别与规避风险来生存。
2. **进化原则**:形成"误报优于漏报"的进化原则,即优先识别潜在威胁而非放松警惕。
3. **生存策略**:在资源有限、危机四伏的原始森林中,保持警觉而非放松是生存的关键策略。
4. **远古例子**:以"远古祖先听到草丛中沙沙声响"为例,误判为危险(代价:时间+精力)或真正危险(代价:致命)的对比。
5. **代价差异**:这种代价的不对称性使具有适度焦虑倾向的个体在自然选择中获得优势,更易规避威胁。
6. **基因固化**:这种对不确定性的警觉特质逐渐成为人类基因库的一部分,成为生物遗传特征。
chain-of-thought下的prompt,通过展示思考过程,进一步给出了信息。比如在思考时模型强调了“代价的描述要准确”,zero-shot对代价的描述是“以‘远古祖先听到草丛中传来沙沙声响’为例,如果误判为有猛兽潜伏,代价是时间损失和精力消耗;如果误判为无害风声,代价可能是致命。”只是对原文做了简要概述,而chain-of-thought进一步得出了“这种代价的不对称性使具有适度焦虑倾向的个体在自然选择中获得优势,更易规避威胁”的推论。
比较闭源模型和开源模型
| 维度 | 闭源模型(GPT、Claude、Gemini等) | 开源模型(Qwen、Llama、DeepSeek等) |
|---|---|---|
| 性能上限 | 顶尖旗舰模型通常在综合能力、复杂推理、多模态、长链条agent任务上暂时领先,尤其是最难的任务(高难度数学、复杂代码库理解) | 顶尖开源模型(如DeepSeek、Qwen最新旗舰版)在常规任务上已逼近甚至持平部分闭源模型,差距在快速缩小,某些垂直任务(经过微调后)甚至反超 |
| 成本结构 | 按token计费,零硬件投入,但高频/大规模调用时总成本会线性甚至更快增长 | 一次性硬件+运维投入较高,但边际调用成本趋近于零;量越大越划算,存在”盈亏平衡点” |
| 速度/延迟 | 依赖网络请求,受厂商服务器负载、限流策略影响,高峰期可能变慢或排队 | 本地部署时延迟稳定可控,无网络往返开销;但需要自己保障硬件性能和并发能力,configuration不当反而更慢 |
| 上下文长度 | 旗舰闭源模型普遍支持较长的上下文窗口(部分可达百万token级别),且长上下文下的效果通常经过专门优化 | 开源模型的长上下文能力参差不齐,顶尖模型也能做到很长,但普遍在超长上下文下的”检索准确率”衰减更明显,需要针对性验证 |
| 部署方式 | 只能通过云端API/网页/App访问,无法私有化部署,强依赖厂商基础设施的可用性 | 可以本地部署、私有云部署、混合云部署,部署形态灵活,也可以离线运行(无网环境下依然可用) |
| 生态成熟度 | 配套工具链(Agent框架、插件市场、企业级SLA、官方SDK)通常打磨得更完整,文档和客服支持更省心 | 社区生态活跃(Hugging Face、ModelScope、各种微调/量化/推理框架),但工具链质量参差不齐,遇到问题往往要自己在社区论坛/GitHub issue里找答案 |
| 可控性 | 无法修改底层权重,只能靠Prompt、少量API参数(temperature等)、或厂商提供的有限微调服务来调整行为,模型更新节奏也不由用户掌控 | 可以自由微调、蒸馏、量化、剪枝、改架构,甚至可以基于开源权重训练出完全定制化的私有模型,升级节奏自己说了算 |
| 安全性/隐私 | 调用时数据要传输到厂商服务器,存在数据出域风险,合规敏感行业(金融、医疗、政务)使用受限,需要考察厂商的数据保留政策 | 可以完全在内网/本地部署,数据不出域,更容易满足强监管场景的合规要求;但安全性也依赖自己的运维水位——权重被窃取、部署环境被攻破的风险要自己扛 |
| 透明度/可审计性 | 训练数据、方法、有时连模型卡都语焉不详,是黑盒,出现偏见或错误行为时难以溯源排查 | 部分开源模型公开训练数据构成、训练方法甚至完整技术报告,可审计性更强,出问题时更容易定位原因(但也不是所有”开源”模型都完全公开训练数据,这点因厂商而异,需要具体确认) |
| 迭代速度 | 厂商持续推送新版本,用户”躺着”享受能力提升,但也被动接受行为变化(有时旧prompt在新版本上效果会漂移) | 需要自己跟进社区新checkpoint并做适配测试,主动权更大但维护成本也更高 |
如果你要构建一个企业级的客服智能体,你会选择哪种类型的模型?需要考虑哪些因素?
企业级的客服智能体,特点是要反应快、保证用户数据安全、调用量大。
我第一反应是选择开源模型做私有化部署,因为:
客服面向用户,用户提出的问题需要智能体对企业知识熟悉度高,开源模型定制程度高;
客服是面向用户的窗口,用户提出的问题本身也是包含信息的,私有化部署可以将用户提的问题分类收集,帮助企业更好发展;
用户数据安全是需要坚定保证的,开源模型私有化部署可以更好的对数据安全做监管;
调用量多少,开源私有化部署可以自己控制。
不过开源模型定制化,需要企业有一定的开发能力,还是要根据不同的企业做调整。