
1. 序章我们为什么要在本地“养”一个大模型各位CSDN的朋友们大家好我是你们的老朋友一个热爱钻研AI技术的博主。最近我身边不少刚入行AI的朋友都向我抱怨一件事玩AI的成本太高了想调用个GPT-4的API写个小工具结果没测试几次账单就蹭蹭往上涨心疼得不行有些公司内部的项目想用大模型处理一些敏感数据又担心数据隐私泄露毕竟把核心数据传给第三方总觉得心里不踏实更别提有时候那不稳定的网络关键时刻API请求超时能把人急出心脏病。是不是感觉说到了你的心坎里这些问题归根结底都指向一个方向我们对云端大模型的依赖太强了。那么有没有一种方法能让我们像在自己电脑上装个Office一样轻松地把大模型“请”到我们自己的机器上呢答案是有而且比你想象的要简单得多这就要引出我们今天的主角——Ollama。你可以把Ollama想象成一个“大模型的魔法盒子”。它是一个开源工具能让你用极其简单的方式在自己的电脑上下载、安装、运行和管理各种主流的大语言模型比如阿里的Qwen通义千问、Meta的Llama 3、Google的Gemma等等。Ollama的出现彻底改变了本地部署大模型的游戏规则。它把曾经需要复杂环境配置、繁琐模型转换、高深技术门槛的“专业级”操作简化成了一两行命令。它就像大模型领域的“Docker”把模型和运行环境打包好让你一键启动即刻开聊。这篇指南就是我为所有想迈出“AI自由”第一步的朋友们准备的。我将用最接地气的方式带你从零开始把Ollama这个强大的工具彻底玩明白。这篇文章不玩虚的全是干货从安装的每一个细节到命令的每一种用法再到自定义模型和API调用的“骚操作”我都会掰开了、揉碎了讲给你听。准备好了吗让我们一起开启这趟激动人心的本地大模型之旅把AI真正变成我们自己的“私人助理”2. 深入浅出Ollama究竟是个什么“神仙”在咱们动手之前得先花几分钟搞清楚Ollama到底是个啥它凭什么能这么牛用最简单的一句话来概括Ollama就是大模型领域的Docker。我相信在座的各位开发者对Docker都不陌生。在没有Docker的时代我们要部署一个Web应用得先在服务器上装操作系统再装数据库再装各种依赖库配置环境变量……一套下来人基本就晕了而且换台机器还得重来一遍。Docker的出现把应用和它所有的依赖打包成一个轻量的“容器镜像”我们只需要一条docker run命令就能在任何支持Docker的机器上完美运行省去了所有繁琐的环境配置。Ollama做的就是完全一样的事情只不过对象从Web应用换成了大语言模型。一个大模型本身其实是一堆巨大的参数文件我们常说的7B、13B就是指参数量要让它跑起来你需要模型文件本身得从Hugging Face这类地方下载动辄几个G甚至几十个G。运行框架比如PyTorch或TensorFlow。底层驱动如果用GPU加速还得有正确的CUDA或ROCm驱动。加载和推理代码你需要写代码来加载模型、处理输入Tokenization、执行推理、解码输出。这一套流程对于新手来说每一步都可能踩坑。而Ollama的伟大之处就在于它的核心设计哲学极致简化与整合。整合BundlingOllama把“模型权重”、“配置参数”和“运行所需的一切”全部打包成一个单一的模型文件在Ollama里通过一个叫Modelfile的东西来定义。你不需要关心模型是什么格式比如GGUF也不需要关心它具体怎么加载。简化SimplicityOllama提供了一个极其简单的命令行工具。你想用阿里的通义千问模型只需要一条命令ollama run qwen。下载、配置、启动所有复杂的工作Ollama在后台默默帮你搞定。所以你可以把Ollama理解为一个本地大模型运行器和管理器。它在你的电脑上以后台服务的形式运行负责管理所有模型文件并提供了一个统一的命令行接口和REST API接口让你能轻松地与这些本地模型进行交互。有了这个“大模型管家”我们就可以把精力完全集中在“用”模型上而不是“装”模型上。这就是Ollama的魔力所在。3. 终极安装指南好了理论知识储备完毕下面进入全文最关键的实战环节安装Ollama。重要提示硬件要求在开始之前我们得先“掂量掂量”自己的电脑。虽然Ollama不挑食但大模型本身是个吃内存和显存的“大胃王”。内存RAM建议至少有16GB内存。8GB也能跑但只能玩一些小模型如3B而且可能会比较卡。32GB或以上则能更流畅地运行7B、13B甚至更大的模型。硬盘Storage每个模型文件大小在3GB到几十GB不等请确保你有足够的硬盘空间。建议至少有50GB的可用空间。显卡GPU这是强烈推荐的选项虽然Ollama也支持纯CPU运行但速度会非常慢体验很差。NVIDIA显卡最佳选择。需要安装正确的CUDA驱动。Ollama会自动检测并使用。AMD显卡在Linux上支持较好通过ROCmWindows上的支持正在逐步完善。Apple SiliconM1/M2/M3芯片苹果的M系列芯片内置了强大的GPUMetalOllama对其支持非常好是Mac用户的福音。3.1. Windows系统详细安装指南Windows用户是幸福的因为Ollama提供了图形化的安装包整个过程非常无脑。第一步检查NVIDIA驱动如果你有N卡这是最重要的一步也是最多人出问题的地方。Ollama需要通过NVIDIA的CUDA工具包来使用你的显卡。在桌面点击鼠标右键选择“NVIDIA 控制面板”。 打开后点击左下角的“系统信息”。 在弹出的窗口中查看“组件”选项卡。你会看到一个类似NVCUDA64.DLL或NVCUDA.DLL的条目后面跟着你的CUDA驱动版本号。请确保你的驱动版本至少是 11.2 或更高。 如果你的驱动版本过低或者根本没有“NVIDIA 控制面板”请访问 NVIDIA官网驱动下载页面选择你的显卡型号下载并安装最新的“Game Ready”或“Studio”驱动程序。安装完成后重启电脑。小白避坑指南问我怎么知道我电脑有没有NVIDIA显卡答右键点击“此电脑” - “属性” - “设备管理器”展开“显示适配器”看看。如果有NVIDIA GeForce/RTX/Quadro等字样就是N卡。如果只有Intel HD Graphics或AMD Radeon Graphics那你可能无法使用NVIDIA的GPU加速。第二步下载并安装Ollama打开你的浏览器访问Ollama的官方网站https://ollama.com/ 网站会自动检测到你的操作系统是Windows并显示一个大大的“Download for Windows”按钮。点击它。下载完成后你会得到一个名为OllamaSetup.exe的文件。双击运行它。 接下来就是标准的Windows软件安装流程一路点击“Next”或“Install”即可。安装程序会自动将Ollama添加到系统路径并将其设置为开机自启动的后台服务。第三步验证安装安装完成后我们需要验证一下Ollama是否正常工作。按下Win R键输入cmd然后回车打开命令提示符窗口。 在窗口中输入以下命令并回车ollama--version如果你看到类似ollama version is 0.1.40这样的版本号信息恭喜你Ollama命令行工具已经安装成功Ollama在安装后会自动在后台运行一个服务。你可以在任务栏的右下角找到一个小小的“羊驼”图标这就是Ollama的服务进程。Windows常见安装问题与排查问题1在cmd中输入ollama提示“不是内部或外部命令”。原因环境变量没有配置成功。解决方案手动添加。通常Ollama安装在C:\Users\你的用户名\AppData\Local\Ollama目录下。将这个路径添加到系统的Path环境变量中然后重启cmd窗口。如果嫌麻烦最简单的办法是卸载重装一遍Ollama。问题2运行模型时感觉非常慢风扇狂转但任务管理器显示GPU利用率很低。原因Ollama没有成功调用NVIDIA显卡正在使用CPU进行计算。解决方案确认驱动重新执行“第一步检查NVIDIA驱动”确保驱动版本正确。查看日志Ollama的日志文件位于C:\Users\你的用户名\.ollama\logs目录下。打开最新的日志文件搜索关键词cuda或gpu。如果你看到类似Found NVIDIA GPU的信息说明识别成功。如果看到的是no NVIDIA GPU detected那大概率是驱动问题。重启服务右键点击任务栏的Ollama图标选择“Quit”。然后从开始菜单重新启动Ollama。3.2. macOS 与 Linux 系统安装对于macOS和Linux用户安装过程同样非常直接。macOS用户直接从Ollama官网下载.dmg安装包像安装普通Mac应用一样拖拽到“应用程序”文件夹即可。Ollama会自动处理好命令行工具的配置。Linux用户官方提供了一键安装脚本在终端中运行curl -fsSL https://ollama.com/install.sh | sh即可完成安装和服务配置。由于不同用户的系统环境千差万别如果在macOS或Linux上遇到任何安装问题欢迎在评论区留言我会尽力帮助大家解答。4. 核心命令精讲成为Ollama指挥官Ollama的命令行接口CLI设计得非常直观。掌握了下面几个核心命令你就掌握了99%的日常操作。我会用最详尽的方式为你拆解每一个命令。4.1.ollama run- 你的第一个AI对话这是最核心、最常用的命令。它的作用是运行一个指定的模型如果本地没有这个模型它会自动帮你下载。用途启动并与一个模型进行交互式聊天或者让模型处理单个提示。语法ollama run model_name[:tag] [prompt]model_name: 必需。模型的名字比如qwen,llama3,gemma。[:tag]: 可选。模型的标签或版本。默认是latest。比如qwen:7b表示70亿参数的版本qwen:4b表示40亿参数的版本。你可以在 Ollama模型库 找到所有可用的模型和标签。[prompt]: 可选。如果你在命令后面直接跟上文字Ollama会处理完这段文字并输出结果然后退出而不是进入交互式聊天。实战演练启动交互式聊天最常用打开你的终端或CMD输入ollama run qwen:4b背后发生了什么Ollama首先检查你本地有没有一个叫qwen且标签为4b的模型。 发现没有于是它会连接到Ollama服务器开始下载模型文件。你会看到一个进度条显示下载的各个层layers。 下载完成后Ollama会加载模型到内存如果是第一次可能会有一个编译或准备的过程。加载完毕你会看到一个提示符 Send a message (/? for help)表示你可以开始聊天了如何聊天直接输入你的问题比如你好介绍一下你自己然后回车。模型会思考片刻然后输出答案。你可以一直聊下去。想退出聊天输入/bye即可。处理单个任务适合脚本假设你想让模型帮你写一个Python的hello world并且不希望进入聊天模式。ollama run qwen:4b写一个打印hello world的Python函数模型会直接输出代码然后程序结束返回到你的命令行提示符。这个用法在写自动化脚本时非常有用。高手小贴士在交互式聊天中输入/?可以查看所有可用的内部命令比如/set,/show,/bye等可以用来调整模型参数或查看信息。 如果你想运行的模型非常大而你的网络又不太好run命令可能会因为下载时间太长而显得卡顿。这时更好的做法是先用下面的pull命令把模型下载好。4.2.ollama pull- 提前“备货”这个命令就像git pull或者docker pull它的作用是只下载模型而不立即运行它。用途预先下载模型到本地以便之后可以快速启动。语法ollama pull model_name[:tag]实战演练假设你晚上准备用通义千问70亿参数的模型但它比较大你可以在白天工作的时候就让电脑在后台下载。ollama pull qwen:7b执行后你会看到和run命令首次运行时一样的下载进度条。下载完成后命令结束。之后你再执行ollama run qwen:7b模型会瞬间启动因为文件已经躺在你的硬盘里了。4.3.ollama list- 查看你的“军火库”当你下载的模型越来越多你可能需要一个命令来查看自己本地到底有哪些模型。用途列出所有已经下载到本地的Ollama模型。语法ollama list实战演练ollama list你会看到一个清晰的表格包含以下信息NAME: 模型的名字和标签如qwen:4b。ID: 模型的唯一标识符。SIZE: 模型文件在硬盘上占用的空间。MODIFIED: 模型的最后修改时间。4.4.ollama rm- “清理门户”模型文件都很大硬盘空间宝贵。当你不再需要某个模型时可以用rm命令删除它。用途删除本地的一个或多个模型。语法ollama rm model_name[:tag]实战演练删除一个特定版本的模型ollamarmqwen:4bOllama会确认并删除qwen:4b这个模型释放硬盘空间。 删除一个模型的所有版本如果你下载了qwen:7b,qwen:4b,qwen:1.8b想把所有qwen相关的都删掉可以只写模型名ollamarmqwen警告这个操作会删除所有名为qwen的本地模型请谨慎使用。高手小貼士ollama rm是不可逆的。删除前最好用ollama list确认一下。4.5.ollama cp- “克隆”与“微调”的起点cp命令copy的缩写非常有趣。它允许你为一个已有的模型创建一个“副本”并给它一个新的名字。这在你想要基于一个基础模型进行自定义时特别有用。用途复制一个本地模型为创建自定义模型做准备。语法ollama cp source_model destination_model实战演练假设你很喜欢qwen:7b但你想创建一个专门用来帮你写代码的“编程版Qwen”。你可以先复制一份ollamacpqwen:7b my-qwen-coder执行后再运行ollama list你会发现多了一个名为my-qwen-coder:latest的模型。它的ID和qwen:7b完全一样因为它们目前指向的是同一个底层文件。但现在你可以对my-qwen-coder进行修改通过我们后面要讲的Modelfile而不会影响到原始的qwen:7b模型。这个命令是通往高级玩法的第一步。4.6.ollama show- 揭开模型的神秘面纱你想知道一个模型的“内幕”吗比如它的系统提示词是什么它的温度参数temperature设置的是多少show命令可以满足你的好奇心。用途显示一个模型的详细信息包括它的Modelfile内容。语法ollama show model_name[:tag]实战演练让我们看看qwen:7b的配置信息ollama show qwen:7b你会看到一大段输出包含了Modelfile的各种指令比如FROM ...: 它基于哪个基础模型文件。TEMPLATE ...: 它的对话模板结构。PARAMETER ...: 它的默认参数如temperature,top_p,stop等。SYSTEM ...: 它的默认系统提示词。通过show命令你可以学习到官方模型是如何配置的为我们自己创建模型提供灵感。4.7.ollama ps- 谁在“吃”我的显存ps(process status) 命令可以告诉你当前有哪些模型正在运行即被加载到了内存/显存中。用途查看当前正在运行的模型进程。语法ollama ps实战演练当你运行了一个模型后比如ollama run qwen:4b不要关闭这个终端。另外打开一个新的终端输入ollamaps你会看到类似下面的输出告诉你qwen:4b正在运行占用了多少内存以及它已经运行了多久。这在你同时运行多个模型或者排查性能问题时非常有用。高手小贴士Ollama默认在一段时间没有活动后会自动从内存中卸载模型以释放资源。你可以通过ps命令来确认模型是否还在运行。5. 第一个实战项目与通义千问(Qwen)进行一场深度对话理论说了这么多是时候来点真格的了我们将一起动手完成从下载到与优秀的国产大模型——阿里的通义千问(Qwen)——进行对话的全过程。第一步拉取Qwen模型我们采用好习惯先pull后run。Qwen有多个版本我们选择70亿参数的qwen:7b它在性能和资源消耗上取得了很好的平衡适合大多数现代PC。打开你的终端/CMD执行ollama pull qwen:7b根据你的网速这可能需要几分钟到十几分钟。你会看到类似这样的下载过程看到success就表示大功告成第二步启动并对话现在激动人心的时刻到了。执行run命令ollama run qwen:7b由于模型已经下载好了Ollama会直接开始加载模型。这个过程会占用大量内存和显存。你可以打开任务管理器Windows或活动监视器macOS来观察资源变化。加载完成后你会看到熟悉的提示符 Send a message (/? for help)现在让我们来考验一下通义千问的能力。作为国产模型它的中文能力非常出色。示例对话1生活小助手你我晚上想做个西红柿炒鸡蛋但我是个厨房新手能给我一个详细的步骤吗Qwen可能会给你类似下面这样的回答当然可以西红柿炒鸡蛋是一道非常经典的家常菜简单又美味。下面是一个新手也能轻松掌握的详细步骤 **准备材料** * 西红柿2个中等大小 * 鸡蛋3个 * 小葱1根 * 盐约3-4克一小勺 * 糖约5克一小勺用于中和西红柿的酸味 * 食用油适量 **制作步骤**1. **准备工作** * 将西红柿洗净在顶部划一个十字花刀然后用开水烫一下这样很容易就能把皮剥掉。去皮后切成小块备用。 * 将鸡蛋打入碗中加少许盐约1克用筷子或打蛋器充分搅打均匀直到蛋液表面出现一层细密的泡沫。 * 小葱切成葱花。2. **炒鸡蛋** * 热锅中倒入比平时炒菜多一点的油油温七成热时油面微微冒烟倒入蛋液。 * 蛋液下锅后不要马上翻动等它稍微凝固后用铲子迅速划散炒成大块的鸡蛋块。炒好后盛出备用。3. **炒西红柿** * 锅里留底油如果油不够可以再加一点。放入葱花爆香。 * 倒入切好的西红柿块用中火翻炒直到西红柿变软炒出红色的汤汁。 * 加入一小勺糖和剩下的盐翻炒均匀。4. **混合出锅** * 将之前炒好的鸡蛋倒回锅中和西红柿一起快速翻炒均匀让鸡蛋充分吸收西红柿的汤汁。 * 翻炒约30秒后即可关火出锅。 **小贴士** * 喜欢汤汁多一点的可以在炒西红柿的时候加少量水。 * 剥西红柿皮会让口感更好。 * 炒鸡蛋时油温高一点炒出来的鸡蛋更蓬松。 祝你成功示例对话2创意写作你我正在写一篇题为《人为什么活着》的演讲稿帮我想一句有吸引力的开场白。Qwen可能会给你的输出是不是非常强大现在你拥有了一个7x24小时待命、反应迅速、无需联网、并且绝对保护你隐私的AI伙伴。你可以随时退出聊天输入/bye下次再通过ollama run qwen:7b回来继续。6. 进阶玩法释放Ollama的全部潜能玩转了基础命令你已经是一个合格的Ollama用户了。但要想成为高手我们还得学习两个“杀手锏”Modelfile和REST API。6.1. 使用Modelfile定制你的专属模型还记得我们之前用ollama cp创建了一个副本吗现在是时候让它变得独一无二了。Modelfile就是Ollama中用于定义和创建模型的“配方文件”它和Dockerfile的理念如出一辙。Modelfile的核心指令解析FROM(必需): 指定你创建的模型基于哪个基础模型。这必须是Ollama本地已经存在的模型。PARAMETER: 设置模型的默认运行参数。这会覆盖基础模型中的参数。常用的有temperature: 控制输出的随机性。值越高如1.0回答越有创意和多样性值越低如0.2回答越确定和保守。top_p: 一种替代temperature的采样方法控制生成文本的“焦点”。stop: 定义一个或多个字符串当模型生成这些字符串时会自动停止。比如可以设置为用户:防止模型角色扮演时自己生成下一轮对话。SYSTEM: 设置一个系统级的指令。这个指令会在每次会话开始时被加载告诉模型它应该扮演什么角色、遵循什么规则。这是进行角色扮演Role-Playing和能力定制的核心。TEMPLATE: 定义模型的完整对话模板。Ollama使用这个模板来组织用户的输入、历史记录和系统提示然后喂给模型。你可以通过修改它来改变模型的交互方式。ADAPTER: (高级) 用于应用LoRA等微调适配器。这允许你加载一个小的、经过特定任务训练的“补丁”来改变基础模型的行为而无需重新训练整个模型。实战项目打造一个“Python代码审查专家”模型我们的目标是创建一个名为code-reviewer的模型。它基于qwen:7b但它的唯一使命是以一种严格但友好的方式审查用户提供的Python代码并给出优化建议。第一步创建Modelfile文件在你的电脑上任意位置创建一个名为Modelfile的纯文本文件没有后缀名。然后输入以下内容# 基于强大的通义千问7B基础模型FROM qwen:7b# 设置参数让审查意见更具确定性和专业性PARAMETER temperature0.2PARAMETER top_p0.9# 定义一个非常严格的系统提示词赋予模型“代码审查专家”的人格SYSTEM 你是一位资深的Python代码审查专家你的名字叫“码神”。 你将收到用户提供的一段Python代码。 你的任务是分析代码中潜在的错误、风格问题遵循PEP8规范、性能瓶颈和安全漏洞。 你必须以结构化的格式提供反馈1. **总体评价:** 对代码质量进行一句话的简短总结。2. **优点:** 列出2-3点代码做得好的地方。3. **改进建议:** 以编号列表的形式给出具体的、可操作的建议。对于每条建议请提供“修改前”和“修改后”的代码块以清晰地展示变化并解释*为什么*推荐这样修改。4. **最终评分:** 对代码进行1到10分的评分1需要完全重写,10完美。 你的语气应该专业、有建设性且富有鼓励性。不要进行闲聊只专注于代码审查本身。# 自定义对话模板确保用户的代码被正确地放入上下文中# 对于Qwen这类聊天模型通常不需要修改默认模板Ollama会自动处理。# 但如果需要可以像下面这样自定义。为保持简单我们先注释掉。# TEMPLATE # [INST] {{ .System }}# 这是我希望你审查的Python代码# python# {{ .Prompt }}# # [/INST]# 第二步使用ollama create构建模型保存好Modelfile文件后打开终端并cd到Modelfile所在的目录。然后执行以下命令ollama create code-reviewer-f./Modelfileollama create: 这是创建自定义模型的命令。code-reviewer: 这是你给新模型起的名字。-f ./Modelfile:-f参数指定了你的Modelfile文件的路径。Ollama会读取你的Modelfile并基于qwen:7b创建一个新的模型层。这个过程非常快。完成后你可以用ollama list看到你的新模型code-reviewer:latest已经出现在列表中了。第三步运行和测试你的专属模型现在让我们来检验一下成果ollama run code-reviewer启动后我们给它一段有待优化的Python代码。直接把下面的代码粘贴到聊天框里defprocess_data(l):result[]foriinl:ifi%20:result.append(i*i)returnresult my_list[1,2,3,4,5,6]print(process_data(my_list))看看我们的“码神”会给出怎样的专业反馈看到了吗我们没有对qwen:7b进行任何重新训练仅仅通过一个精心设计的Modelfile就把它从一个通用聊天机器人变成了一个专注、专业的代码审查工具。这就是Modelfile的强大之处。你可以举一反三创建“小红书文案生成器”、“英语翻译专家”、“SQL生成器”等等任何你想要的专属模型。6.2. 通过REST API将Ollama集成到你的代码中Ollama不仅仅是一个命令行工具它本质上是一个API服务器。这意味着任何能够发送HTTP请求的程序都可以与Ollama进行交互。这为我们将本地大模型集成到自己的应用程序网站、桌面工具、自动化脚本等中打开了无限可能。Ollama默认在http://localhost:11434上提供服务。第一步使用curl测试APIcurl是一个强大的命令行工具用于发送网络请求。我们可以用它来快速测试Ollama的API端点。Ollama最核心的两个API端点是/api/generate: 用于生成文本类似ollama run model prompt。/api/chat: 用于进行多轮对话。测试/api/chat端点并开启流式响应流式响应streaming是与大模型交互的最佳方式用户可以像在ChatGPT网站上一样看到文字一个一个地蹦出来体验更好。curlhttp://localhost:11434/api/chat-d{ model: qwen:7b, messages: [ { role: user, content: 你好你是谁 } ], stream: true }messages: 这是一个数组可以包含多轮对话历史。role可以是user、assistant或system。stream: 设置为true。执行后你会看到终端立刻开始打印出一连串的JSON对象每个对象都包含一小部分回答在message.content字段里。这就是流式传输。第二步编写Python脚本构建一个命令行聊天程序现在让我们用Python的requests库来编写一个完整的、支持流式对话的命令行聊天程序。新建一个Python文件比如ollama_chat.py然后写入以下代码importrequestsimportjson# Ollama API的URLOLLAMA_API_URLhttp://localhost:11434/api/chat# 对话历史用于支持多轮对话conversation_history[]defchat_with_ollama(prompt:str): 发送用户输入到Ollama API并流式处理响应。 # 将用户的当前输入添加到对话历史中conversation_history.append({role:user,content:prompt})# 构建请求体payload{model:qwen:7b,# 你可以换成任何你本地有的模型messages:conversation_history,stream:True# 开启流式响应}try:# 使用 streamTrue 来接收流式响应withrequests.post(OLLAMA_API_URL,jsonpayload,streamTrue)asresponse:response.raise_for_status()# 如果请求失败如404, 500则抛出异常full_responseprint(\n助手: ,end,flushTrue)# 逐行迭代响应内容forlineinresponse.iter_lines():ifline:# 解码每一行它们是JSON字符串chunkjson.loads(line.decode(utf-8))# 提取消息内容contentchunk[message][content]print(content,end,flushTrue)full_responsecontent# 检查对话是否结束ifchunk.get(done,False):# 将完整的助手回答添加到历史记录中conversation_history.append({role:assistant,content:full_response})print()# 换行exceptrequests.exceptions.RequestExceptionase:print(f\n[错误] 无法连接到Ollama API:{e})exceptjson.JSONDecodeErrorase:print(f\n[错误] 解析JSON响应失败:{e})if__name____main__:print(Ollama 命令行聊天程序)print(模型: qwen:7b | 输入 exit 或 quit 退出。)print(-*50)whileTrue:user_inputinput(你: )ifuser_input.lower()in[exit,quit]:print(再见!)breakchat_with_ollama(user_input)代码逐行解析我们导入了requests和json库。OLLAMA_API_URL定义了API地址。conversation_history是一个列表用于存储整个对话的上下文。这是实现多轮对话的关键。chat_with_ollama函数是核心逻辑它接收用户输入prompt并将其作为user角色的消息添加到conversation_history。 它构建了与curl示例中类似的payload但messages字段现在包含了完整的对话历史。requests.post函数中streamTrue是关键它告诉requests库不要一次性下载所有内容而是保持连接按块接收。response.iter_lines()会迭代服务器发来的每一行数据。 Ollama流式输出的每一行都是一个独立的JSON对象所以我们用json.loads()来解析它。 我们从解析后的chunk中提取message.content这就是模型生成的文本片段。print(content, end, flushTrue)实现了打字机效果。end防止print自动换行flushTrue强制立即输出到屏幕。 当一个chunk中包含done: true时表示模型已经说完了这句话。此时我们将完整的回答full_response作为assistant角色的消息存入历史记录为下一轮对话做准备。主程序部分if __name__ __main__:创建了一个无限循环不断接收用户输入调用chat_with_ollama函数直到用户输入exit或quit。运行你的聊天程序在终端中确保你的Ollama服务正在运行然后执行这个Python脚本python ollama_chat.py现在你就有了一个完全由你自己代码驱动、后端是本地Qwen模型的聊天机器人了你可以试着和它进行多轮对话比如因为它保存了对话历史所以能记住你之前说过的话。这个简单的脚本就是你构建更复杂AI应用如集成到Flask网站、Discord机器人、自动化工作流等的起点。