《Linux操作系统编程详解》《笔试/面试常见算法:从基础到进阶》《Python干货分享》
🎬 艾莉丝的简介:

文章目录

1 ~> 大模型接入架构对比
1.1 远程接入 DeepSeek 架构
1.1.1 架构组成
- 本地端:自研 LLMManager 模块,封装请求发送逻辑
- 传输层:公网网络链路
- 服务端:DeepSeek 官方服务器,包含 deepseekServer 网关与大模型推理引擎
1.1.2 调用流程
- 本地 LLMManager 构造推理请求
- 请求通过公网发送至 DeepSeek 官方服务器
- deepseekServer 解析请求,转发至对应大模型
- 大模型执行推理计算,生成响应内容
- 响应沿原路返回至本地 LLMManager
1.1.3 核心特征
- 依赖公网传输,存在网络延迟与带宽开销
- 需要 API 密钥进行身份鉴权
- 模型算力与运维由第三方厂商承担
1.2 Ollama 本地接入架构
1.2.1 前置依赖
- 本地安装 Ollama 工具,启动 OllamaServer 后台服务
- 通过
ollama pull命令从 Ollama 官方模型仓库下载目标模型(如 deepseek-r1:1.5b)到本地
1.2.2 架构组成
- 本地端:自研 LLMManager 客户端模块
- 中间层:本地 OllamaServer 服务,负责模型管理、请求转发、生命周期管控
- 模型层:本地存储的大模型文件,按需加载到内存
1.2.3 部署形态
- 单机本地部署:OllamaServer 运行在本机,全程通过本地环路通信,无网络开销
- 局域网部署:OllamaServer 部署在局域网服务器,内网内多终端共享调用
- 私有云部署:OllamaServer 部署在企业自有云服务器,通过私有网络访问
1.2.4 核心特征
- 无需 API 密钥鉴权,通过 HTTP 接口与 OllamaServer 交互
- 用户不直接对接大模型,所有交互由 OllamaServer 代理
- 模型数据与推理全链路可控,适合数据敏感场景
1.3 两种接入模式核心差异
- 部署位置:远程接入依赖第三方官方服务器;Ollama 接入可部署在本机、局域网、私有云
- 鉴权方式:远程接入必须使用 API 密钥;Ollama 本地接入默认无鉴权,可通过网络配置控制访问
- 网络依赖:远程接入必须依赖公网;Ollama 单机部署无网络依赖
- 模型管理:远程接入模型由厂商管理;Ollama 接入可自主选择、管理模型版本
2 ~> Ollama 核心运行原理与模型生命周期
2.1 首次请求(冷启动)流程
- LLMManager 向 OllamaServer 发送 HTTP 推理请求,请求中携带目标模型名称
- OllamaServer 解析请求参数,提取模型名称
- 校验模型文件是否存在,若模型未加载到内存,则执行模型加载操作
- OllamaServer 将完整请求参数转发给已加载的大模型
- 大模型执行推理计算,生成响应结果
- OllamaServer 接收结果并返回给 LLMManager
2.2 二次请求(热加载)流程
- 若模型处于内存存活期内,OllamaServer 直接将请求转发给已加载的模型
- 跳过模型加载步骤,大幅降低响应延迟
- 每次请求会重置模型的存活计时器
2.3 模型内存生命周期机制
- 默认存活时长:5 分钟(5m)
- 超时策略:超过存活时长无请求,模型自动从内存卸载,释放硬件资源
- 可配置性:通过环境变量自定义存活时长,支持永久存活、请求后立即卸载等策略
3 ~> Ollama 核心环境变量配置
3.1 配置总览
Ollama 通过系统环境变量控制服务行为、模型管理、并发策略等核心特性,所有配置均在服务启动时生效。
3.2 详细配置项
| 环境变量名 | 功能说明 | 默认值 | 配置建议 |
|---|---|---|---|
| OLLAMA_MODELS | 模型文件的本地存储目录 | Windows:%USERPROFILE%.ollama\models | 建议迁移至非系统盘,避免占用系统盘空间,如D:\ApplyTool\ProgramTool\ollama\models |
| OLLAMA_HOST | Ollama 服务监听的网络地址 | 127.0.0.1 | 仅本地访问保持默认;需局域网 / 内网访问时设置为0.0.0.0 |
| OLLAMA_PORT | Ollama 服务监听的 TCP 端口 | 11434 | 端口冲突时可修改为其他可用端口,如 8080 |
| OLLAMA_ORIGINS | 允许的 HTTP 请求来源,多个来源用半角逗号分隔 | 无限制 | 本地开发场景可设置为*;生产环境建议配置明确的域名 / IP 白名单 |
| OLLAMA_KEEP_ALIVE | 模型加载到内存后的存活时长 | 5m(5 分钟) | 高频调用场景建议设置为24h;设为0表示单次请求结束后立即卸载;设为负数表示模型永久驻留内存 |
| OLLAMA_NUM_PARALLEL | 同时处理的并发请求数量 | 1(串行处理) | 根据 CPU/GPU 算力与业务并发需求调整,避免并发过高导致推理性能下降 |
| OLLAMA_MAX_QUEUE | 请求等待队列的最大长度 | 512 | 根据业务峰值并发量调整,超出队列长度的请求将被直接丢弃 |
| OLLAMA_DEBUG | Debug 详细日志输出开关 | 关闭(0) | 开发调试与问题排查阶段设置为1,输出详细运行日志 |
| OLLAMA_MAX_LOADED_MODELS | 同时加载到内存中的最大模型数量 | 1 | 根据显存 / 内存容量与多模型业务场景调整 |
4 ~> OllamaLLMProvider 类设计与初始化实现
4.1 类设计思路
4.1.1 继承关系
继承自基类LLMProvider,遵循统一的大模型接入抽象接口,实现 Ollama 平台的具体接入逻辑。
4.1.2 核心成员变量
_modelName:目标模型的名称标识,与 Ollama 模型名一致_modelDesc:模型的文本描述信息,用于上层展示_endpoint:Ollama 服务的 HTTP 接口根地址_isAvailable:模型初始化状态与可用性标记
4.1.3 设计原则
配置与代码解耦:所有模型相关参数通过外部配置文件传入,切换模型仅需修改配置,无需改动业务代码。
4.2 头文件定义(OllamaLLMProvider.h)
#ifndef OLLAMA_LLM_PROVIDER_H
#define OLLAMA_LLM_PROVIDER_H
#include "LLMProvider.h"
#include <string>
#include <map>
#include <vector>
#include <functional>
namespace ai_chat_sdk {
class OllamaLLMProvider : public LLMProvider {
public:
// 初始化模型
virtual bool initModel(const std::map<std::string, std::string>& modelConfig) override;
// 检测模型是否可用
virtual bool isAvailable() const override;
// 获取模型名称
virtual std::string getModelName() const override;
// 获取模型描述
virtual std::string getModelDesc() const override;
// 发送消息 - 全量同步返回
virtual std::string sendMessage(const std::vector<std::string>& messages,
const std::map<std::string, std::string>& requestParam) override;
// 发送消息 - 流式增量返回
virtual std::string sendMessageStream(const std::vector<std::string>& messages,
const std::map<std::string, std::string>& requestParam,
std::function<void(const std::string&, bool)> callback) override;
protected:
std::string _modelName; // 模型名称
std::string _modelDesc; // 模型描述
std::string _endpoint; // Ollama服务端点地址
bool _isAvailable = false;// 模型可用性标记
};
} // namespace ai_chat_sdk
#endif // OLLAMA_LLM_PROVIDER_H
4.3 初始化函数实现(OllamaLLMProvider.cpp)
4.3.1 初始化执行步骤
- 校验配置中是否存在
model_name字段,缺失则打印错误日志并返回失败 - 读取
model_name赋值给成员变量_modelName - 校验配置中是否存在
model_desc字段,缺失则打印错误日志并返回失败 - 读取
model_desc赋值给成员变量_modelDesc - 校验配置中是否存在
endpoint字段,缺失则打印错误日志并返回失败 - 读取
endpoint赋值给成员变量_endpoint - 标记
_isAvailable为 true,返回初始化成功
4.3.2 实现代码
#include "../include/OllamaLLMProvider.h"
#include "../include/util/myLog.h"
namespace ai_chat_sdk {
bool OllamaLLMProvider::initModel(const std::map<std::string, std::string>& modelConfig) {
// 1. 初始化模型名称
if (modelConfig.find("model_name") == modelConfig.end()) {
ERR("OllamaLLMProvider::initModel: model_name is not found in modelConfig");
return false;
}
_modelName = modelConfig.at("model_name");
// 2. 初始化模型描述
if (modelConfig.find("model_desc") == modelConfig.end()) {
ERR("OllamaLLMProvider::initModel: model_desc is not found in modelConfig");
return false;
}
_modelDesc = modelConfig.at("model_desc");
// 3. 初始化服务端点
if (modelConfig.find("endpoint") == modelConfig.end()) {
ERR("OllamaLLMProvider::initModel: endpoint is not found in modelConfig");
return false;
}
_endpoint = modelConfig.at("endpoint");
// 4. 标记模型可用
_isAvailable = true;
return true;
}
bool OllamaLLMProvider::isAvailable() const {
return _isAvailable;
}
std::string OllamaLLMProvider::getModelName() const {
return _modelName;
}
std::string OllamaLLMProvider::getModelDesc() const {
return _modelDesc;
}
// 全量消息接口占位实现
std::string OllamaLLMProvider::sendMessage(const std::vector<std::string>& messages,
const std::map<std::string, std::string>& requestParam) {
// TODO 实现Ollama HTTP全量请求逻辑
return "";
}
// 流式消息接口占位实现
std::string OllamaLLMProvider::sendMessageStream(const std::vector<std::string>& messages,
const std::map<std::string, std::string>& requestParam,
std::function<void(const std::string&, bool)> callback) {
// TODO 实现Ollama HTTP流式请求逻辑
return "";
}
} // namespace ai_chat_sdk
5 ~> 消息交互接口规范
5.1 全量响应接口
- 接口形式:同步调用
- 返回值:完整的模型推理结果字符串
- 适用场景:短文本推理、对实时性要求不高的场景
5.2 流式响应接口
- 接口形式:异步回调模式
- 回调参数:
- 第一个参数:当前增量返回的文本片段
- 第二个参数:bool 类型,标记是否为最后一段响应(结束标识)
- 适用场景:长文本生成、对话类场景,提升用户体验
结尾
uu们,本文的内容到这里就全部结束了,艾莉丝在这里再次感谢您的阅读!
|
结语:希望对学习Linux相关内容的uu有所帮助,不要忘记给博主“一键四连”哦!
往期回顾:
🗡博主在这里放了一只小狗,大家看完了摸摸小狗放松一下吧!🗡 ૮₍ ˶ ˊ ᴥ ˋ˶₎ა
转载自 CSDN-专业IT技术社区
原文链接:https://blog.csdn.net/2401_89899187/article/details/164824439





