纲要
- 闭源模型与开源本地模型的选型权衡
- 硬件配置对本地推理性能的影响
- 本地推理框架
Ollama的核心优势 - 本地模型部署全流程
Ollama安装与验证- 模型拉取与管理
- API 服务启动与健康检查
- LangChain 接入本地模型
langchain-ollama集成包安装ChatOllama同步调用与流式输出- 模型参数配置与 Token 用量统计
- 完整可运行 Demo 示例
- 关键技术与生产环境建议
闭源模型与开源本地模型的选型权衡
在 AI Agent 应用开发中,模型选型是决定系统架构与成本的关键环节。当前主流的模型服务可分为闭源 API 模型与开源本地部署模型两类,二者在多个维度上存在显著差异。
| 对比维度 | 闭源模型(GPT-4、Claude) | 开源本地模型(DeepSeek、Llama) |
|---|---|---|
| 使用方式 | 通过 HTTP API 远程调用 | 本地部署推理服务,通过接口调用 |
| 成本构成 | 按 Token 消耗量计费 | 硬件采购与运维成本 |
| 数据隐私 | 数据传输至第三方服务器 | 数据完全保留在本地环境 |
| 硬件依赖 | 仅需稳定的网络连接 | 依赖 GPU 算力或大容量内存 |
| 定制化能力 | 受限于 API 提供的功能边界 | 支持模型微调、量化压缩与完全控制 |
选用开源本地模型的典型场景包括:企业内部数据安全合规要求严格的业务、长期高频调用下的成本控制需求、以及网络受限或完全离线的运行环境。然而,本地部署的前提是拥有足够的计算资源,否则推理速度将显著影响用户体验。
硬件配置对本地推理性能的影响
本地推理的响应速度主要由 GPU 显存容量与计算单元性能决定。以下为 Llama 系列模型在不同硬件环境下的实测 Token 生成速率(单位:token/s):
| 硬件 | 7B 参数模型(token/s) | 65B 参数模型(token/s) |
|---|---|---|
| Apple M1 | 9.00 | 1.00 |
| Apple M2 | 28.57 | 3.08 |
| NVIDIA A100 (80GB) | 276.00 | 29.77 |
从数据中可以得出以下结论:
- 消费级设备(如 Apple M1/M2)足以流畅运行 7B 级别的量化模型,但在处理 65B 及以上的大参数模型时,生成速度会急剧下降至不可用水平。
- 专业级 GPU(如 NVIDIA A100)凭借充足的显存与强大的计算单元,在推理速度上具备数量级优势,适合生产环境部署。
若计划本地运行 DeepSeek-R1 671B 等超大模型,通常需要配置多卡高端 GPU 集群。对于日常开发与原型验证场景,推荐使用 7B~13B 的量化版本,能够在性能与资源消耗之间取得良好平衡。
推理框架:为什么选择 Ollama
Ollama 是目前社区认可度最高的本地推理框架之一,其核心特性包括:
- 极简安装:提供主流操作系统的安装包,一键完成部署。
- 内置模型仓库:官方仓库覆盖
Llama、DeepSeek、Phi、Mistral等主流开源模型,拉取即用。 - 自动硬件加速:自动检测并利用 GPU 进行推理加速,同时支持 CPU 回退模式。
- OpenAI 兼容 API:默认在
http://localhost:11434提供 REST API,接口风格与 OpenAI 保持一致,便于无缝迁移。 - 活跃的社区生态:版本迭代频繁,持续跟进最新模型与量化技术。
本地模型部署全流程
以下以部署 DeepSeek-R1 7B 模型为例,演示完整的本地部署步骤。
安装 Ollama
访问 Ollama 官方网站下载对应操作系统的安装包。安装完成后,在终端中执行以下命令验证安装是否成功:
ollama --version
若正常输出版本号信息,则表示安装完成。
拉取模型
执行以下命令从 Ollama 仓库下载 DeepSeek-R1 7B 模型文件:
ollama pull deepseek-r1:7b
下载完成后,可通过以下命令查看已安装的本地模型列表:
ollama list
输出示例:
NAME ID SIZE MODIFIED
deepseek-r1:7b ... 4.7 GB ...
启动 API 服务
运行以下命令启动 Ollama 服务进程,模型将以 REST API 形式在 localhost:11434 对外提供服务:
ollama serve
服务启动后,可使用 curl 发送请求进行健康检查与功能验证:
curl http://localhost:11434/api/generate -d '{
"model": "deepseek-r1:7b",
"prompt": "你好",
"stream": false
}'
若服务返回包含模型输出的 JSON 响应,则表示部署成功,可以进入下一步的代码集成。
LangChain 接入本地模型
LangChain 官方提供了 langchain-ollama 集成包,用于在 LangChain 框架中统一调用 Ollama 部署的本地模型。
安装依赖
在 Python 虚拟环境中执行以下命令安装集成包:
pip install langchain-ollama
同步调用
使用 ChatOllama 类初始化模型实例,并通过 invoke 方法进行同步推理:
from langchain_ollama import ChatOllama
llm = ChatOllama(model="deepseek-r1:7b")
response = llm.invoke("用一句话介绍什么是 AI Agent")
print(response.content)
流式输出
对于需要实时反馈的交互场景,可使用 stream 方法实现增量式输出:
for chunk in llm.stream("写一首关于春天的五言绝句"):
print(chunk.content, end="", flush=True)
项目结构
一个最小化的本地模型接入项目结构如下:
├── main.py
└── requirements.txt
requirements.txt 内容:
langchain-ollama>=0.2.0
完整可运行 Demo
将以下代码保存为 main.py,确保 Ollama 服务已启动且目标模型已完成下载。
from langchain_ollama import ChatOllama
# 初始化本地 DeepSeek-R1 7B 模型
llm = ChatOllama(
model="deepseek-r1:7b",
temperature=0.7,
num_predict=256,
# base_url="http://localhost:11434", # 默认值,可省略
)
print("=== 同步调用 ===")
response = llm.invoke("请用一句话解释什么是强化学习")
print("回答:", response.content)
# 输出 Token 用量统计(若模型返回了 usage_metadata)
if hasattr(response, "usage_metadata") and response.usage_metadata:
print("Token 用量:", response.usage_metadata)
print("\n=== 流式输出 ===")
prompt = "请写一首关于秋天的七言绝句"
print("用户:", prompt)
print("助手: ", end="")
for chunk in llm.stream(prompt):
print(chunk.content, end="", flush=True)
print()
运行说明:
- 确保已安装
langchain-ollama依赖包。 - 在终端中保持
ollama serve服务运行状态。 - 若本地尚未下载
deepseek-r1:7b模型,请先执行ollama pull deepseek-r1:7b。 - 对于性能较弱的设备,可适当调小
num_predict参数(控制最大生成长度),或切换至更轻量的模型(如phi3、tinyllama)。
API 速览
本节汇总博客中涉及的核心 API,便于开发者快速查阅。
ChatOllama
所属库:langchain_ollama
构造方法:
ChatOllama(
model: str,
base_url: Optional[str] = "http://localhost:11434",
temperature: float = 0.7,
num_predict: Optional[int] = None,
top_k: Optional[int] = None,
top_p: Optional[float] = None,
stop: Optional[List[str]] = None,
**kwargs
)
核心参数说明:
| 参数名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
model | str | 必填 | 指定要调用的本地模型名称,需与 ollama list 中的名称一致 |
base_url | Optional[str] | "http://localhost:11434" | Ollama 服务的基础 URL |
temperature | float | 0.7 | 控制生成随机性,取值 0~1,值越大输出越多样 |
num_predict | Optional[int] | None | 最大生成 Token 数,用于控制响应长度 |
top_k | Optional[int] | None | Top-K 采样参数,限制候选词数量 |
top_p | Optional[float] | None | Top-P 核采样参数,控制累积概率阈值 |
核心方法:
| 方法签名 | 说明 | 返回值 |
|---|---|---|
invoke(input: str) -> BaseMessage | 同步调用模型,等待完整响应返回 | BaseMessage,内容通过 .content 获取 |
stream(input: str) -> Iterator[BaseMessageChunk] | 流式调用模型,逐步返回生成片段 | 迭代器,每个片段包含增量内容 |
batch(inputs: List[str]) -> List[BaseMessage] | 批量调用,并行处理多条输入 | List[BaseMessage] |
关键要点
- 选型决策:本地开源模型在数据隐私保护、长期成本控制和离线部署方面具备显著优势,但需要充分考虑硬件投入与推理性能之间的平衡。
- 框架选型:
Ollama大幅简化了本地模型的部署与运维复杂度,其 OpenAI 兼容的 API 设计使得与 LangChain 等上层框架的集成更加顺畅。 - 接入方式:通过
langchain-ollama提供的ChatOllama类,开发者可以沿用与调用闭源 API 模型完全一致的编程接口,实现模型服务的无缝切换。 - 生产环境建议:在正式生产环境中,建议将
Ollama服务独立部署于高性能 GPU 服务器上,并通过内网供团队内多个应用共享调用,以提升资源利用率。
参考文档
官方文档
参考链接
总结
本文围绕 AI Agent 开发中本地大模型部署与 LangChain 接入这一主题,系统阐述了闭源模型与开源本地模型的选型标准、硬件性能对推理速度的影响、Ollama 框架的部署流程,以及通过 langchain-ollama 集成包完成同步调用与流式输出的具体实现。
技术栈涵盖 Ollama 0.5+、LangChain 0.3+ 及 langchain-ollama 0.2+,提供完整的可运行代码示例与 API 参数速览,为开发者从零搭建本地推理服务提供可直接落地的参考方案。
286



被折叠的 条评论
为什么被折叠?



