Ollama本地搭建LLM: Deepseek
- 一、AI领域分层介绍和主流的大模型
- 1.第一层:基础学科与总称(最底层)
- 2.第二层:当前的范式革命(生成式浪潮)
- 3.第三层:当下最火的具体模型形态(LLM与多模态)
- 4.第四层:关键技术方法与架构(理解底层逻辑)
- 5.第五层:终极理想目标
- 6.主流大模型
- 二、环境准备
- 1.Ollama安装
- 2.选择适配自己的模型
- 三、调用本地大模型接口
- 1.chat接口参数详解
- 1.1 核心参数
- 1.2 options行为控制参数 (可选)
- 1.3 推理参数 (可选) deepseek说不支持,但是通过Ollama运行deepseek时确实是生效的
- 1.4出参
- 2.Python实现调用本地大模型
- 2.1 Python下载三方包
一、AI领域分层介绍和主流的大模型
1.第一层:基础学科与总称(最底层)
- AI(人工智能,Artificial Intelligence):整个领域的总称。目标是让机器模拟人类的智能行为。它是一个极其宽泛的学科,包含了下面所有内容。
- ML(机器学习,Machine Learning):AI的核心实现手段。不靠硬编码规则,而是让计算机通过数据“学习”规律。AI ≠ ML,但现代AI几乎都基于ML。
- DL(深度学习,Deep Learning):ML的一个子集。使用多层神经网络(模拟人脑)进行学习。图像识别、语音识别的大爆发都源于此。
2.第二层:当前的范式革命(生成式浪潮)
- GenAI(生成式人工智能,Generative AI):一种AI的能力范式。指能够生成新内容(文本、图像、音频、视频)的AI,而不是仅做分析或分类。ChatGPT、Midjourney都是GenAI的典型代表。
- AIGC(AI Generated Content,人工智能生成内容):GenAI的直接产出物/应用场景名词。它强调“内容”本身。AIGC是GenAI带来的直接结果。在中国产业界,AIGC这个词用得极多,GenAI更偏学术技术。
- Foundation Model(基础模型/大模型底座):指在海量数据上预训练出的超大规模模型(如GPT-4、文心一言),可作为基座,微调后适应各种下游任务。
3.第三层:当下最火的具体模型形态(LLM与多模态)
- LLM(大语言模型,Large Language Model):这里的大是指模型参数量比较大,都是10亿(b)为单位的。GenAI在文本领域的具体产品形态。特指基于海量文本训练、擅长处理自然语言的大型神经网络(如GPT系列、LLaMA、Qwen)。它是目前AIGC浪潮的绝对主力。
- SLM(小语言模型,Small Language Model):相对于LLM,参数更小、更轻量,可在手机端运行(如微软Phi系列、Google Gemma)。特点是推理快、成本低,适合垂直场景。
- 多模态模型(Multimodal Model):不仅能处理文本,还能同时理解图像、视频、音频的模型(如GPT-4o、Claude 3系列)。它是LLM的升级版,目标是“像人一样综合看世界”。
4.第四层:关键技术方法与架构(理解底层逻辑)
- Transformer:LLM和现代GenAI的绝对核心架构。2017年由Google提出,基于“自注意力机制”(Self-Attention),取代了传统的RNN/CNN,使得并行训练大规模数据成为可能。
- RLHF(基于人类反馈的强化学习,Reinforcement Learning from Human Feedback):让LLM“对齐”人类价值观的关键技术。通过人类标注排序答案的好坏,训练奖励模型,再用强化学习微调模型,让ChatGPT变得懂礼貌、拒绝有害问题。
- RAG(检索增强生成,Retrieval-Augmented Generation):解决LLM“胡说八道”(幻觉)和知识过时的核心技术。在LLM回答前,先去外部知识库(向量数据库)检索相关内容,拼到提示词里,让模型基于“查到的资料”回答,而不是硬背。企业私有化部署几乎必备。
- Agent(智能体/代理):让LLM拥有“行动”和“规划”能力。不止聊天,Agent能拆解复杂任务、调用外部工具(如查天气、订机票、写代码执行),像一个虚拟员工。
5.第五层:终极理想目标
- AGI(通用人工智能,Artificial General Intelligence):AI界的“圣杯”。指能够理解、学习并完成人类能做的任何智力任务的AI,具备人类水平的通用推理能力。目前所有LLM都还只是ANI(狭义人工智能,弱AI),远未达到AGI。
路漫漫其修远兮
6.主流大模型
OpenAI(GPT系列):
技术标杆与行业领跑者。其GPT系列模型在通用推理、复杂任务处理上长期领先。旗舰模型从GPT-4演进到GPT-5.5等版本,并拥有更经济高效的GPT-5.4 mini/nano等变体。它支持超长上下文(如922K tokens)和多模态能力,是处理高难度推理、规划和长文档分析的首选。Google(Gemini系列):
原生多模态与长上下文王者。Gemini系列最大的特点是原生多模态,能无缝处理文本、图像、音频、视频和代码。Gemini 2.5 Pro曾连续多月在LMArena排行榜上位居榜首,其最新版本Gemini 3.1 Pro在推理和编码能力上极具竞争力,成本效益较高。上下文窗口最高可达100万tokens。Anthropic(Claude系列):
编程与安全领域的佼佼者。Claude系列以强大的编码能力、复杂的指令遵循和高安全性著称。其旗舰版本Claude Opus 4.7在编程助手、代理循环(Agentic loops)等场景表现突出。Claude模型支持高达100万tokens的上下文窗口,并提供快速响应与扩展思维两种推理模式。Meta(Llama系列):
开源生态的领导者。Llama系列是开源大模型生态的标杆,其Llama 3.1 405B版本是当时世界上最大的开源AI模型之一。Llama 4进一步扩大了规模,其Behemoth版本总参数高达2万亿,Scout版本更是支持高达1000万token的上下文窗口,刷新了开源模型纪录。xAI(Grok系列):
实时信息与长上下文黑马。由马斯克创立,其Grok系列模型以长上下文窗口和性价比为特点。例如,Grok-4.1 Fast Non-Reasoning支持200万tokens的上下文,是处理超长文本的强力选择。Mistral:
欧洲开源劲旅。Mistral是欧洲AI领域的代表性力量,其开源模型Mistral Large 3拥有675B总参数,性能强劲。
🇨🇳 中国主流大模型
阿里巴巴(通义千问/Qwen系列):
开源与闭源双线出击。Qwen系列是全球最活跃的开源大模型之一,其闭源版本Qwen3.7 Max等也已进入全球顶尖闭源模型行列。它拥有强大的开源生态和社区驱动能力。深度求索(DeepSeek系列):
开源模型性价比之王。DeepSeek系列凭借高性能和开源策略广受关注,在多项评测中位列前茅。其V3.1等模型被认为是开源阵营的领先者。智谱AI(GLM系列):
国产模型技术先驱。智谱AI的GLM系列是国内最早的国产大模型之一,技术实力强劲。其GLM-4.6等模型在权威评测中紧随国际顶尖闭源模型之后。最新模型在推理能力上表现突出。字节跳动(豆包/Doubao系列):
应用生态与商业规模领先。豆包大模型背靠字节跳动庞大生态,在C端和B端市场均有广泛覆盖。其模型在综合能力评测中排名前列。百度(文心/ERNIE系列):
知识增强与产业落地先行者。文心系列以知识增强为核心技术路线,通过融合知识图谱提升在专业领域的理解能力。其ERNIE 4.5 Turbo在保持大规模参数的同时,推理效率大幅提升。腾讯(混元/Hunyuan系列):
多模态与实时交互。混元大模型以多模态实时交互为核心优势,在智能客服等场景中响应迅速。华为(盘古/Pangu系列):
行业大模型深度定制。盘古大模型主打行业定制,通过分层解耦架构支持快速定制金融、制造、能源等行业模型,在工业质检等场景表现优异。月之暗面(Kimi系列):
长文本处理专家。Kimi系列以超长上下文处理能力闻名,其Kimi-K3(max)等模型在多项评测中表现突出。
其他重要玩家:还包括科大讯飞(星火/Spark)、零一万物、MiniMax、阶跃星辰(StepFun)等,它们都在特定领域或技术上具有不俗实力。
二、环境准备
1.Ollama安装
Ollama官网:https://ollama.com/
Ollama是一个LLM的管理控制工具,作用类似于Docker,下面是他的一些常用命令
- 下载模型:ollama pull <模型名>,如:ollama pull llama3.2
- 下载并运行模型:ollama run <模型名>,如:ollama run llama3.2
- 下载并运行并查询完成后退出:ollama run <模型名> “<提示词>”,如:ollama run llama3.2 “你好?”
- 停止模型运行:Ollama stop <目标模型>,如:ollama stop llama3.2
- 查看运行中模型:Ollama ps
- 列出本地所有模型:ollama list 或 ollama ls
- 删除模型:ollama rm <模型名> 删除模型,如:Ollama rm llama3.2
- 查看模型详情:ollama show <模型名>,如:Ollama show llama3.2
- 复制模型:ollama cp <源模型> <目标模型>
- 创建自定义模型:ollama create <模型名> -f ,如:ollama create my-model -f ./Modelfile
以下是Ollama自身命令
- ollama serve 启动服务
- ollama -v 查看版本
- ollama help 查看帮助
根据自己的电脑系统下载对应版本即可
下载完成后不要双击安装,双击安装的话,默认会安装到c盘下,这里使用自定义安装
在OllamaSetup.ext所在文件夹,打开cmd,然后执行命令:.\OllamaSetup.exe /DIR=D:/AI/Ollama
.\OllamaSetup.exe /DIR=安装目录会弹出如下,安装即可
安装好后弹出如下页面,更改下模型的存储位置
更改完立即生效,无需手动保存。
2.选择适配自己的模型
登录Ollama官网https://ollama.com/,找到如下位置:
然后就可以下载自己想要的模型了,这里使用deepseek
搜索后可以看到deepseek有很多的版本,那要如何选择呢?
首先版本可以看出来,主要分为R版本和V版本。
- V系列(通用多面手):它的目标是快速、准确地完成各种日常任务,如聊天、写作、翻译、信息提取等。它像一个知识渊博、反应迅速的助手。
- R系列(推理专家):它的核心优势在于处理需要多步逻辑推导的复杂问题。面对数学证明、复杂代码调试等任务时,它会先进行一段深入的“内心独白”(即思维链),再给出最终答案。
当然还有一些其他的版本, - DeepSeek-Coder:专门针对代码生成、补全和调试等任务进行优化的模型。如果你需要AI辅助编程,这个模型是理想选择。
- DeepSeek-OCR:这是一个视觉-语言模型,专门用于执行光学字符识别(OCR) 任务。它能“看懂”图片中的文字并提取出来。在Ollama v0.13.0及以上版本中可用。
- DeepSeek-Math:一个专注于数学推理和问题求解的优化版本。
- DeepSeek-Chat:通用对话模型,可看作V系列的一个分支。
综合自己的需求选择,这里选用deepseek-v2
进入后可以看到还有三个可以选择的,那么选用哪个呢是 是16b呢还是236b呢,这里的latest就是16b,他们是一个。
至于选哪个还需要根据自己的电脑显存来决定
显卡的存储能里和大模型的参数选择,可以参照如下来看:
此外,上下文等其他可能也会消耗部分缓存,所以一般选用时不要定格选,这里我就选择了 deepseek-v2:16b
下面是使用Ollama进行下载该模型,单机如下位置
运行下图的命令
然后找到Ollama下载目录下打开cmd执行如下命令:
ollama run deepseek-v2:16b
完结之后就可以试试了
如果想要退出的话输入/bye或者/exit都是可以的。
如果想要使用别的大模型,直接run即可,到这里环境就ok了。
三、调用本地大模型接口
Ollama官方文档:https://docs.ollama.com/api/chat
Deepseek官方文档:https://api-docs.deepseek.com/zh-cn/
这里展示聊天接口的对接
1.chat接口参数详解
chat接口支持参数和释义如下,
Ollama官方相关描述:https://docs.ollama.com/api/chat#body-think-one-of-0
Deepseek官方描述:https://api-docs.deepseek.com/zh-cn/
1.1 核心参数
- model
这个参数一定是输入Ollama中,大模型的名字,如下圈出来的位置 - messages
这个参数也是核心,我们可以指定role和content。role表示角色,这个可以控制模型扮演的角色等
这个参数里,messages第一个对象是system,表示大模型的角色,注意deepseek不支持角色名称的定义,你告诉他你叫啥不会起作用,但是其他的设定是有用的。{"model":"deepseek-r1:14b","messages":[{"role":"system","content":"请用温柔的语气回答问题"},{"role":"user","content":"写一首诗"}],"stream":false}
第二个对象则是用户信息,以及用户的输入内容了。
还有一个特别重要的点:大模型正是通过message把以往的对话内容输入进去,才实现的上下文信息,这也导致了调用外部大模型后期的成本越来越高
1.2 options行为控制参数 (可选)
- stream boolean
是否启用流式输出。false 时等待完整响应。默认为 true。
流式输出,就是大模型响应时是一个字一个字输出出来的,平时使用浏览器页面访问时,默认就是这个模式,如果不需要可以设置成false - format string / object
强制模型输出为 “json” 或符合提供的 JSON schema,没啥大用。 - keep_alive string / number
模型响后保持在内存中的时间默认是"5m",也就是5分钟。-1 表示永久,0 表示立即退出GPU内存。
这个参数也挺重要的,正常使用模型时,会现将模型加载到显存中,然后开始思考问答问题,然后回答完问题后模型并不会立刻退出显存,而是会根据配置的keep_alive来决定在显存中待多久,如果是企业使用,重复加载会导致每次第一次请求访问会很慢,所以企业可以设置按小时或者直接设置为-1。如果自己本地测试,则就无所谓了。
下面是设置为了1小时
如下图,可以看到即使我的调用结束了,GPU的内存占用仍然是占着的{"model":"deepseek-r1:14b","messages":[{"role":"system","content":"请用温柔的语气回答问题"},{"role":"user","content":"写一首诗"}],"stream":false,"keep_alive":"1h"}
下面把参数改成0再试下,结果如下,改成0后,调用结束GPU内存瞬间就释放了
1.3 推理参数 (可选) deepseek说不支持,但是通过Ollama运行deepseek时确实是生效的
- temperature number (温度[ˈtemprətʃər])
控制随机性,值越高输出越多样。取值范围是0.0到2.0 。大部分模型的默认值是0.8或者1.0。
值越小,随机性越低,deepseek参数输入后不起作用(官方文档明确说明){"model":"deepseek-r1:14b","messages":[{"role":"system","content":"请用温柔的语气回答问题"},{"role":"user","content":"你是谁"}],"stream":false,"keep_alive":"1h","options":{"temperature":0.0}} - top_p 取值范围:0.0 - 1.0 核采样一个0到1的小数,过滤掉累积概率超过 p 的小概率词,默认0.9。 deepseek 不生效
大模型在生成回答时,会有很多可选择的词,比如回答你喜欢什么水果时,他可以说苹果,香蕉,橘子等。大模型在训练时就已经固化了很多神经元连接,或者说是记忆。比如加入训练时我喜欢吃苹果频率比较高是50,香蕉是30,橘子是20,值得注意的是一个提示词由大模型加载出来的备选词的概率之和一定是100%。
如果我们设置了top_p等于0.8,那么就代表着只会从高到底选取前80%的词汇作为备用,其他全部丢弃。
实际应用中,如果词汇都是专业且统一的,可变性较低的,可以将他的值设置较小一些。{"model":"deepseek-r1:14b","messages":[{"role":"system","content":"请用温柔的语气回答问题"},{"role":"user","content":"你是谁"}],"stream":false,"keep_alive":"1h","options":{"temperature":0.0,"top_p":0.9,}} - top_k number 限制采样时只考虑概率最高的 k 个词。正整数,默认40
这个参数和上面有些类似,它如果设置40,则表示从最高概率往下数只取前40个词。{"model":"deepseek-r1:14b","messages":[{"role":"system","content":"请用温柔的语气回答问题"},{"role":"user","content":"你是谁"}],"stream":false,"keep_alive":"1h","options":{"temperature":0.0,"top_p":0.9,"top_k":40}} - num_predict number 生成的最大 token 数,-1 表示无限制。正整数,默认128
值还可以为-2,一个特殊值,用于让模型生成Token来“填满”整个上下文窗口。
直白些就是回答当前问题,允许消耗的最大token数(只影响响应,不影响思考),一般是需要设置的,不能一个问题把钱给干没了,或者没完没了的思考。一般默认是128,表示一次回答最多消耗128个token。
假如我设置了最大消耗token为10
然后结果如下。但是发现输出内容是空的,思考就停止了,其实这里的原因是因为把思考内容返回了{"model":"deepseek-r1:14b","messages":[{"role":"system","content":"请用温柔的语气回答问题"},{"role":"user","content":"你是谁"}],"stream":false,"keep_alive":"1h","options":{"temperature":0.0,"top_p":0.9,"top_k":40,"num_predict":10}}
deepseek官方汉字和token的消化对照
笔者尝试了Ollama提供的api关闭方式不起作用,但是Ollama官方文档却名表表示支持关闭思考模式,文档误我啊
试了下只有Ollama中直接一次性问答,可以关闭思考,并且关闭成功了
而且验证generate接口,是支持api关闭think的。
seed number 随机种子,设置后可使输出结果可复现。 整数,默认-1 ,表示随机
参数是控制大模型输出可复现性的关键。简单来说,它让模型每次回答同一个问题时,给出近乎相同的答案,而不是每次都随机变化。
大模型生成文本的过程本质上是随机采样:每一步,模型会从词汇表中按概率随机挑一个词作为下一个输出。这个“随机”是由伪随机数生成器(PRNG)驱动的。默认情况下,每次运行时的随机数序列都是不同的,所以每次回答都不一样。
temperature 和 top_p 决定候选词的分布(哪些词被选中,概率如何变化),seed 只负责从最终分布中抽取具体哪一个词
如果你希望每次回答都完全一样,可以将 temperature 设为 0(此时模型总是选概率最高的词,不涉及随机采样),那就不需要 seed 了。但在需要随机性的情况下(比如创意写作),用 seed 可以保持一致性。
假如设置seed为2,表示每次从随机采样中取2对应的样本,但不保证100%一致,设置3表示取样本为3的样本,也不保证100%一致,一般应用在测试关键词的场景,或者对结果要求一致性较高的场景。{"model":"deepseek-r1:14b","messages":[{"role":"system","content":"简洁回答"},{"role":"user","content":"天空是什么颜色"}],"stream":false,"keep_alive":"1h","think":false,"options":{"temperature":0.8,"top_p":0.9,"top_k":40,"num_predict":1000},"seed":1}比如我做如上设置后(seed=1),每次运行结果并不如预期,应该是deepseek并不支持该参数,只是Ollama支持,我去deepseek官方文档也没找到这个参数。
num_ctx number 上下文窗口大小(token 数)。正整数,默认2048
一句话解释:模型在生成新内容时,最多能“回头看”多少个 Token(包括你输入的提示词和它已经生成的内容)。
工作机制:大模型不是逐字逐句阅读整本书,而是像看一个“滑动窗口”。num_ctx 就是窗口的大小。当窗口满了(例如达到 2048 Token),模型就会把最开头的内容“挤出”窗口,只关注窗口内的最新内容来预测下一个词。
默认值:2048(约等于 1500 个中文字符)。
影响:
设得太小(如 512):模型会“健忘”。如果你上传一篇长论文或进行多轮长对话,它会忘记前面的关键内容,导致回答逻辑断裂、答非所问。
设得太大(如 8192 或 32768):模型能处理超长文本,但显存(VRAM)消耗会急剧上升(大致与 Token 数成正比),推理速度也会变慢。如果你的显卡是 6GB 显存,强行设太大可能会导致内存溢出(OOM)报错。
如何设置:如果你的提示词有 1500 个 Token,你想让它生成 500 个 Token 的回答,那么 num_ctx 至少设为 2000(1500+500)。通常建议设为 4096 作为日常使用的平衡点。logprobs boolean 是否返回输出 token 的对数概率。 true/false,默认false
这主要是给高级开发者或研究者用的,
判断模型是否在“胡编”:如果连续几个词的 logprob 都非常低(负值很大),说明模型在不确定地猜测,生成的答案可能不可靠。
做“可信度校准”:你可以根据概率值对模型回答进行加权,决定是否采纳答案。
一句话解释:这是一个开关,决定是否告诉你模型在生成每一个 Token(词)时,对该选择的“确信程度”是多少。
理论基础:模型每次选词时,都会给词汇表里的词打一个对数概率(Log Probability)。这是一个负数(例如 -0.02 表示确信度极高,-10 表示确信度极低)。
为什么要用“对数”?因为多个词的概率相乘会变得极小,而使用对数可以把乘法变成加法(log(A*B) = log(A) + log(B)),便于计算机处理且不会下溢。{"model":"deepseek-r1:14b","messages":[{"role":"system","content":"请用温柔的语气回答问题"},{"role":"user","content":"说个笑话"}],"stream":false,"keep_alive":"1h","think":false,"options":{"temperature":0.0,"top_p":0.9,"top_k":40,"num_predict":1000},"seed":1,"logprobs":true}如上设置后,输出如下,可以看到每个token(词)时选取的可信度,可以看到都是很高的,表示可信度很高,答案不是胡诌的。
top_logprobs number 返回 top-k 个最可能 token 的概率,需 logprobs: true。 0-20,默认0
一句话解释:当 logprobs 开启后,这个参数决定在每个位置,除了最终选中的那个词外,还额外列出 Top-K 个“差一点点就被选中”的备选词,并附上它们的对数概率。
依赖关系:必须先设置 logprobs: true,这个参数才会生效。如果 logprobs: false,即使设了 top_logprobs 也无效。
取值范围:0 到 20。默认是 0(表示不返回任何备选词,只返回最终选中的那个词)。
输出示例(假设你设置 top_logprobs: 3):
当模型生成“苹果”这个词时,你会看到:
最终选中:苹果 (logprob: -0.2)
备选第1:梨 (logprob: -2.5)
备选第2:香蕉 (logprob: -4.0)
备选第3:橘子 (logprob: -6.0)
有什么用?主要用于调试和精细控制。
理解模型的“思考逻辑”:如果模型在“苹果”和“梨”之间极度纠结(概率非常接近),说明上下文存在歧义,你可能需要修改提示词。
构建“分支生成”:在进行多路生成(Beam Search)或检查模型是否存在“种族偏见”(看备选词里是否有不当词汇)时很有帮助。
1.4出参
调用 /api/chat 接口后,你会收到一个包含以下字段的 JSON 响应
下面是实际调用时的示例
以上则表示:
total_duration,总消耗纳秒数:20783219000,1秒等于10亿纳秒,则消耗了20秒
prompt_eval_count,提示词消耗8token
eval_count,总共消耗341个token
2.Python实现调用本地大模型
Deepseek官方文档位置:https://api-docs.deepseek.com/zh-cn/api/create-chat-completion
DeepSeek也遵循了 OpenAI定义的统一接口规范,因此也可以使用OpenAI提供的python三方库来调用DeepSeek。
2.1 Python下载三方包
说下两个概念
- PyPI: Python Package Index , python的三方包仓库,类似于java的jar包仓库
- pip: 官方提供的管理PyPI仓库的工具,python3对应pip3,类似于java的Maven3
pip常见命令:- pip install openai 安装软件包
- pip install openai=2.13.0 指定版本安装软件包
- pip uninstall openai 卸载软件包
- pip list 列出 下载的软件包
- pip show openai 展示软件包详情
打开cmd,输入以下命令:
pip3installopenai下载完成后,创建一个python文件,以下是官方文档上的代码,需要自己设置下自己的官方token(调用官方大模型时必须):
fromopenaiimportOpenAI client=OpenAI(api_key="<your API key>",base_url="https://api.deepseek.com")response=client.chat.completions.create(model="deepseek-v4-pro",messages=[{"role":"system","content":"You are a helpful assistant"},{"role":"user","content":"Hello"},],max_tokens=1024,temperature=0.7,stream=False)print(response.choices[0].message.content)