
欢迎来到「科研技能加点」。本专栏致力于拆解科研过程中需要用到的实用技能,从方法原理到软件实操,帮助你不仅懂原理还能上手操作。每一项技能都是思维的延伸,帮助更好地探索未知。本期我们介绍的是:本地大模型部署与 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) 模型那么大,我的电脑能跑吗?
你可能听说过大模型的参数量动辄数十亿、数百亿。以目前主流的开源模型为例:
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 模型:
| | | |
|---|
| | | |
| | | |
| Q4_K_M | 4 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 Model3. 进入加载模型的设置界面,我们只需要重点关注三个设置(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 | | "off" |
max_output_tokens | | |
system_prompt | | |
store | | False |
7) 常见问题排查
| | |
|---|
ConnectionRefusedError | | 打开 LM Studio → 开发者 → Load Model |
| | 确认 JSON 中 "reasoning": "off" 已设置 |
CUDA out of memory | | |
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:“工具是思维的延伸,掌握它,是为了更好地探索未知的边界。”在操作过程中遇到任何问题欢迎在评论区或私信与我讨论。我是桐,希望我们可以一起进步!