当前位置:首页>python>科研技能加点03丨LLM本地部署与Python交互

科研技能加点03丨LLM本地部署与Python交互

  • 2026-09-21 00:58:48
科研技能加点03丨LLM本地部署与Python交互

欢迎来到「科研技能加点」。本专栏致力于拆解科研过程中需要用到的实用技能,从方法原理到软件实操,帮助你不仅懂原理还能上手操作。每一项技能都是思维的延伸,帮助更好地探索未知。本期我们介绍的是:本地大模型部署与 Python 交互。

在大语言模型(LLM)日益融入科研工作流的今天,你是否遇到过以下痛点:

1.你想用 AI 辅助文献综述、数据标注或实验设计,但每次调用GPT、Claude、Gemini或DeepSeek的云端 API 都要花钱。虽然单次不贵,但一旦任务复杂,也是一笔不小的开销。更重要的是,如果你的研究涉及敏感数据,将数据发送到云端可能存在隐私泄露的风险;

2.你听说过可以在本地运行大模型,但一搜教程全是命令行操作:conda create、CUDA_HOME、torch.cuda.is_available()…… 对于非计算机专业的科研人来说,光是配环境就足以劝退;

3.即使你找到了一个能本地运行的模型,也不知道如何在 Python 脚本中通过代码自动化调用它。模型的聊天窗口不等于 API——你需要的不是手动一条条输入问题,而是能用代码批量、程序化地调用模型,才能真正将 LLM 嵌入你的科研分析流程中。

如果有一个方法,让你用一个图形界面软件一键部署 90 亿参数的大模型,完全免费、不需要联网,然后用不到 50 行 Python 代码就能实现自动化调用——你想不想试试看?

技能名片
名称
LLM本地部署与 Python 交互
难度系数
★☆☆☆☆
适用场景
批量自动化文本处理AI AgentLLM相关实验分析
编程语言
Python
前置知识
Python 基础

01 核心原理拆解

1) 什么是 LLM 本地部署?

我们日常使用 ChatGPT、DeepSeek、Claude 等 AI 工具时,每次提问都会通过网络发送到远端的服务器,由服务器上的大模型处理后再把回答传回来——这就是云端部署。

而本地部署,就是把大模型的模型文件下载到你自己的电脑上,让它直接在你的 CPU 或 GPU 上运行推理。整个过程不经过任何外部服务器,你的 prompt 和数据自始至终都在你的电脑里。

1. 本地部署的优势很明显:

隐私安全:你的 prompt 和数据不会离开你的电脑。这在处理未发表数据、临床记录、商业机密时至关重要。

几乎零成本:一旦模型下载完成,后续调用几乎完全免费。做 10 次实验和做 10 万次实验的成本一样——都是你的电费。

无需网络环境:在飞机上、在没有稳定网络的实验室里、在出差途中,都能正常使用。

可控性高:你可以固定模型版本、锁定参数配置,或做一系列自定义设置,确保实验的可重复性。云端 API 的模型版本可能随时更新,导致同样的 prompt 在不同时间产生不同结果。

2. 本地部署同样存在劣势:

模型能力较弱:受限于本地硬件,你能运行的模型通常在 7B-14B 参数级别。而云端的 GPT-4o(据估计数千亿参数)、DeepSeek-V3(671B 参数)等顶级模型,在复杂推理、长文理解和多语言能力上仍然显著领先。

需要硬件资源:至少需要一块 6GB 显存的独立显卡才能流畅运行。虽然也支持纯 CPU 推理,但速度会慢 5-10 倍。

2) 模型那么大,我的电脑能跑吗?

你可能听说过大模型的参数量动辄数十亿、数百亿。以目前主流的开源模型为例:

模型
参数量
全精度大小
Qwen3.5-9B
90 亿
~18 GB
Llama 3-8B
80 亿
~16 GB
DeepSeek-R1-14B
140 亿
~28 GB
Qwen3-32B
320 亿
~64 GB

18GB 的模型文件——光是加载到显存就超过了绝大多数消费级显卡的容量(RTX 4060 只有 8GB 显存)。而绝大多数的用户并没有专业级硬件,如何才能顺利的本地运行?这就要引入一个关键技术——模型量化。

1. 量化的本质:降低每个参数的存储精度

大模型的每个参数本质上是一个浮点数。在全精度下,每个参数用 16 位(2 字节) 存储(FP16,即 16-bit 浮点数),所以 90 亿参数的 Qwen3.5-9B 需要 9B × 2 字节 = 18GB 存储空间。

量化的核心思想是:用更少的二进制位来表示每个参数。如果我们把每个参数从 16 位压缩到 4 位,存储空间就缩小为原来的 1/4。

2. 不同的量化后缀是什么意思?

当你在 LM Studio 或 HuggingFace 下载模型时,会看到像 Q4_K_M、Q8_0、Q2_K 这样的后缀。你可能会一头雾水,同一个模型有不同规格的量化版本,这些版本到底是什么意思?我又应该选择哪个?

Q+数字:表示量化位宽(bit-width)。Q4 = 每个参数用 4 位存储,Q8 = 8 位,Q2 = 2 位。位数越少,文件越小,但精度损失越大。

K:表示使用 K-Quant 量化方法。这是 llama.cpp 项目开发的一种智能量化策略,它根据每个参数的重要性分配不同的精度。对模型输出影响大的关键参数保留更高精度,不太重要的参数压缩更狠。相比早期的均匀量化,K-Quant 在同等文件大小下能保留更多的模型质量。

M / S / L:表示质量档位。S表示压缩最激进,文件最小,质量损失最大;M表示压缩与质量的平衡点;L表示压缩最保守,文件较大但质量最接近原始模型。

所以 Q4_K_M 的完整含义就是:4-bit位宽 + K-Quant量化 + Medium档位。

具体到 Qwen3.5-9B 模型:

量化版本
每参数位宽
模型大小
质量影响
Q8_0
8 bit
~10.45 GB
极小,几乎无感
Q6_K
6 bit
~8.28 GB
有影响,但几乎无感
Q4_K_M4 bit~6.55 GB轻微,绝大多数任务不受影响

对于大多数科研应用,Q4_K_M 是最佳选择——它在质量和资源占用之间取得了最优平衡。8GB 显存的显卡(如 RTX 4060)即可流畅运行 9B 参数的模型。当然如果你有更大显存的GPU,也可以尝试下载Q8的版本,或直接下载Qwen3.5 27B或Qwen3.5 35B A3B获得目前最好的本地部署体验。

如果你的设备性能有限,也可以尝试Qwen3.5 4B,体验本地部署的乐趣~

3) 本地部署后可以干什么?

最直观的用法是对话,就像使用 ChatGPT 一样。你可以用它翻译文献、润色论文、头脑风暴、解释代码……所有你在云端 AI 工具中做的事情,本地模型都能做。

值得注意的是Qwen3.5是一个多模态的模型,这意味着本地部署的Qwen可以理解你发给它的图片,识别效果非常的好👍

Fig1. Qwen3.5本地部署的图片识别功能

对话只是起点,本地部署的LLM可以通过程序提供一个API接口,就像云端模型一样。有了这个API接口,任何程序都可以通过这个接口与模型通信——这意味着你的本地模型变成了一个可编程的 AI 服务。

发挥你的想象力,本地部署的模型就可以像云端模型一样:

接入 AI 编程工具。例如 Claude Code(Anthropic 推出的 AI 编程 Agent,可在终端中自主完成复杂编程任务)和Cursor(内置 AI 的代码编辑器,支持自动补全和对话式编程)等工具。进行免费的 AI 辅助编程。

接入 AI Agent 框架。例如 OpenClaw(开源的 AI Agent 平台,可以让模型自主调用工具、搜索网络、执行代码)。本地模型作为这些 Agent 的"大脑",可以在完全离线的环境下运行自动化流程。

编写 Python 脚本批量调用。用 Python 代码程序化地向本地模型发送请求,你可以批量处理数百份文献摘要、对数千条文本进行情感分类。或者像我们在下一篇中要做的那样:让模型扮演不同身份的心理学实验被试,一次性完成数万次实验调用。

02 手把手实操指南

在这一部分,我们将从零开始完成本地大模型的部署,并用 Python 实现自动化对话。整个过程预计 15-30 分钟(取决于模型下载速度)。

没有独立显卡?LM Studio 也支持纯 CPU 推理,只是速度会慢 5-10 倍。对于学习和小规模实验仍然可用。

1) 安装 LM Studio

前往 lmstudio.ai 下载安装。LM Studio 支持 macOS、Windows 和 Linux,全程无需命令行操作。

Fig2. LMstudio官网,点击红框内按钮下载安装

安装完成后打开软件,你会看到一个简洁的主界面。

Fig3. LMstudio主界面

2) 下载 Qwen3.5-9B 模型

在 LM Studio 顶部搜索栏中输入 qwen3.5-9b,在搜索结果中选择合适的量化版本下载。

Fig4. 下载模型界面

如何选择量化版本? LMstudio也给大家做好推荐了(选择带有绿色小火箭的模型可以获得最佳体验):

Fig5. LMstudio对于GPU显存与量化模型大小的匹配

3) 加载模型并启动本地服务器

1. 在 LM Studio 左侧点击开发者标签页

2. 在顶部点击‘Load Model’, 选择已下载的 Qwen3.5-9B 模型

Fig6. 进入开发者标签页点击Load Model

3. 进入加载模型的设置界面,我们只需要重点关注三个设置(Context Length,GPU offload和CPU Thread Pool Size)

Fig7. 模型设置页面

Context Length决定了模型单次推理能处理的最大 Token 数量。增加该值会显著增大 KV Cache的显存占用,虽然不会改变模型权重本身的参数量,但过长的上下文容易导致显存溢出。

GPU Offload控制的是将模型多少层的计算任务卸载到 GPU。数值越高,推理速度越快,但显存占用也线性增加。建议留出 1-2GB 显存给系统开销和 KV Cache,不建议拉满至 100% 显存占用。

CPU Thread Pool Size参数指定了 CPU 并行计算时使用的线程数。通常建议设置为 CPU 的物理核心数。设置过高可能引发线程争抢和上下文切换开销,反而导致速度下降或系统卡顿。

4. 点击Load Model

Fig8. 模型加载成功界面

启动成功后,你会看到Load Model窗口 Ready 的提示。这意味着你的电脑现在运行着一个本地 AI 服务器,任何程序都可以通过 http://127.0.0.1:1234 与它对话。

4) 安装 Python 依赖

pip install httpx

我们这里只需要httpx,这个包原生支持异步调用(async/await),在后续大规模实验中可以实现并发请求。

5) 完整代码实现

# ============================================================# 科研技能加点 03上 | 本地大模型部署与 Python 交互# 作者:桐. | 公众号:桐 Lab# ============================================================import httpx# --- 第一步:配置连接 ---http_client = httpx.Client(proxy=None, timeout=300.0)LM_STUDIO_BASE = "http://127.0.0.1:1234"MODEL_NAME = "qwen/qwen3.5-9b"# 验证连接:确认 LM Studio 服务器正在运行resp = http_client.get(f"{LM_STUDIO_BASE}/v1/models")model_ids = [m["id"] for m in resp.json().get("data", [])]print(f"[OK] 连接成功!可用模型: {model_ids}")<br><br># --- 第二步:Hello World —— 你的第一次本地 AI 对话 ---resp = http_client.post(f"{LM_STUDIO_BASE}/api/v1/chat",    json={"model": MODEL_NAME,"input": "你好!请用一句话介绍你自己。","system_prompt": "你是一个友好的AI助手。","reasoning": "off",          # 关闭思考模式"temperature": 0.7,"max_output_tokens": 200,"store": False    },    timeout=120.0)outputs = resp.json().get("output", [])parts = [o["content"] for o in outputs if o.get("type") == "message"]print("模型回复:", "\n".join(parts))<br><br># --- 第三步:封装通用调用函数 ---defcall_llm(system_msg, prompt, temperature=0.7):"""通过 LM Studio REST API 调用本地模型"""    resp = http_client.post(f"{LM_STUDIO_BASE}/api/v1/chat",        json={"model": MODEL_NAME,"input": prompt,            # 用户消息"system_prompt": system_msg, # 系统提示词"reasoning": "off",          # 关闭思维链推理"temperature": temperature,"max_output_tokens": 200,"store": False        },        timeout=120.0    )    outputs = resp.json().get("output", [])    parts = [o["content"] for o in outputs if o.get("type") == "message"]return"\n".join(parts).strip()<br><br># --- 第四步:体验 temperature 的效果 ---print("\n--- temperature = 0(保守、稳定)---")for i inrange(3):    result = call_llm("你是一个诗人。", "写一句关于月亮的诗。", temperature=0)print(f"  第{i+1}次: {result}")print("\n--- temperature = 1.0(创意、多变)---")for i inrange(3):    result = call_llm("你是一个诗人。", "写一句关于月亮的诗。", temperature=1.0)print(f"  第{i+1}次: {result}")

6) 关键参数说明

参数
含义
建议取值
temperature
控制回答的随机性。越高 → 越有创意;越低 → 越稳定
0.7(通用),0(需一致性),1.0(需多样性)
reasoning
LM Studio 原生参数,控制思维链推理
"off"
 关闭思考模式,可以加速输出
max_output_tokens
限制回答最大长度
200(简短回答),1000(长文生成)
system_prompt
系统级指令,定义模型的角色和行为
根据实验需求自定义
store
是否保存到 LM Studio 对话历史
False
(批量调用时建议关闭)

7) 常见问题排查

问题
可能原因
解决方案
ConnectionRefusedError
LM Studio 服务未启动
打开 LM Studio → 开发者 → Load Model
响应极慢(>30秒/次)
未关闭思考模式
确认 JSON 中 "reasoning": "off" 已设置
CUDA out of memory
显存不足
换用更小参数量的Qwen模型
model not found
模型名称不匹配
先运行验证连接代码,查看返回的实际模型名称

03 结果展示

运行上述代码后,你将看到类似以下输出:

[OK] 连接成功!可用模型: ['qwen/qwen3.5-9b']模型回复: 你好!我是一个由阿里巴巴开发的 AI 助手,随时准备为你提供友好、精准且实用的帮助。--- temperature = 0(保守、稳定)---  第1次: 把清辉揉碎,撒进你未眠的窗棂。  第2次: 把清辉揉碎,撒进你未眠的窗棂。  第3次: 把清辉揉碎,撒进你未眠的窗棂。--- temperature = 1(创意、多变)---  第1次: 银钩悬处,夜将墨色温柔地折叠。  第2次: 月光把夜色剪成两半,一半是沉睡的窗棂,一半是流浪的梦影。  第3次: 我是一枚在夜空坠落的银币,悄悄叩响你窗前的梦。

注意 temperature = 0 时,三次输出完全相同——低温度让模型锁定在概率最高的输出上。而 temperature = 1.0 时,每次都是截然不同的创意结果。

你还可以试试改变 system_prompt,让模型扮演不同角色:

# 让模型扮演一个 25 岁的心理学研究生call_llm("你是一名25岁的心理学研究生,性格开朗。","你对人工智能的未来怎么看?")# 让模型扮演一个 50 岁的临床医生call_llm("你是一名50岁的临床医生,行事谨慎。","你对人工智能的未来怎么看?")

不同的角色设定会让模型产生不同风格的回答——这就是下一篇我们将要深入探讨的人物画像技术的雏形。

一个小思考,你觉得一个 9B 参数的小模型,面对"600 人的生死抉择"时,会像人类一样被措辞影响吗?还是冷静地做出理性选择? 欢迎在评论区讨论你的答案,下一篇我们会揭晓实验结果。

04 总结与资源

今天我们用一个免费的图形界面工具 LM Studio + 不到 50 行 Python 代码,完成了本地大模型的全流程部署:从下载安装、模型选择、服务器启动,到 Python 自动化调用和参数探索。

但这只是开始。一个本地运行的LLM,意味着你可以免费且无限制的让它扮演任何人,回答任何问题,做任何实验

下一篇预告:我们将利用今天搭建好的工具,让这个 9B 参数的本地模型扮演来自不同文化背景的心理学实验被试,复现 5 个经典心理学实验。一个 AI 面对人类的认知偏差实验,会表现出和人类一样的非理性吗? 答案下篇揭晓~

Note:“工具是思维的延伸,掌握它,是为了更好地探索未知的边界。”在操作过程中遇到任何问题欢迎在评论区或私信与我讨论。我是桐,希望我们可以一起进步!

最新文章

随机文章