Ollama本地大模型部署指南:从入门到实战应用
1. 项目概述:为什么Ollama是本地大模型部署的“瑞士军刀”?
如果你最近对在本地电脑上运行大型语言模型(LLM)感兴趣,那么“Ollama”这个名字大概率已经出现在你的视野里了。它不是一个模型,而是一个工具,一个能让你在个人电脑上,用一条简单的命令,就把Llama 3、Mistral、Qwen这些动辄数十亿参数的“庞然大物”跑起来的框架。简单来说,Ollama把本地部署大模型这件事,从一项需要深厚技术背景的“系统工程”,简化成了近乎“开箱即用”的体验。我最初接触它,是因为厌倦了云端API的延迟、费用和隐私顾虑,想找一个能离线、自由“折腾”模型的方案。经过几个月的深度使用,从命令行交互到集成进开发流程,Ollama确实成了我本地AI工作流中不可或缺的一环。它适合谁呢?如果你是开发者,想快速集成LLM能力到自己的应用中;如果你是研究者或学生,希望低成本、高自由度地实验不同模型;或者你只是一个技术爱好者,想在自己的Mac、Windows或Linux机器上拥有一个私人的、不受限制的AI助手,那么Ollama都值得你花时间深入了解。
2. 核心架构与运行机制拆解
2.1 设计哲学:化繁为简的封装艺术
Ollama的核心设计理念非常明确: 抽象与封装 。它将模型部署中所有复杂、脏乱的细节都隐藏了起来,为用户提供了一个极其干净的接口。这具体体现在几个层面:
首先, 统一的模型包格式 。Ollama引入了 .Modelfile 的概念,你可以把它理解为一个模型的“食谱”或“配方”。这个文件不仅定义了使用哪个基础模型文件(比如 llama3:8b ),还可以在其中指定系统提示词、参数模板、适配器(如LoRA)等。Ollama服务在拉取模型时,实际上是根据这个“配方”在后台构建一个完整的、可执行的模型镜像。这种设计让模型的管理变得像Docker管理容器一样清晰和模块化。
其次, 全栈集成 。一个完整的LLM服务栈通常包括模型文件、推理引擎、API服务层。Ollama将这些全部打包。它底层基于高性能的C++推理库(如 llama.cpp 的GGML/GGUF版本),提供了高效的CPU/GPU推理能力;中间层用Go语言编写,负责模型的生命周期管理、API服务暴露;最上层则提供了干净的RESTful API和命令行工具。你不需要自己去编译 llama.cpp ,不需要去配置复杂的Python环境,更不需要去写HTTP服务器代码。
最后, 跨平台一致性 。无论是macOS、Windows还是Linux,Ollama都提供了一致的安装和操作体验。在macOS上,它通过Metal后端充分利用Apple Silicon芯片的GPU;在Windows上,它可以通过DirectML或CUDA(如果有N卡)来加速;在Linux上,则支持CUDA和Vulkan。这种一致性极大地降低了用户的学习和迁移成本。
2.2 工作流全景:从拉取到推理的幕后故事
当你执行 ollama run llama3:8b 这条看似简单的命令时,背后发生了一系列精密的操作:
-
模型解析与拉取 :Ollama首先会检查本地是否已有
llama3:8b的镜像。如果没有,它会连接至Ollama的官方模型库(或你配置的私有镜像库),根据llama3:8b这个标签找到对应的Modelfile和模型权重文件(通常是GGUF格式),并下载到本地~/.ollama/models目录下。GGUF格式是llama.cpp社区推出的新一代模型格式,它统一了量化方案,并内置了元数据,使得模型加载和配置更加高效。 -
运行时环境准备 :下载完成后,Ollama会根据模型所需的计算资源(如GPU层数、内存大小)和当前系统的硬件情况,动态决定模型的加载方式。例如,对于一个70亿参数的4位量化模型,它会评估是全部加载到GPU显存,还是部分加载到显存、部分留在内存,亦或是纯CPU推理,并据此初始化
llama.cpp的推理上下文。 -
服务化暴露 :模型加载成功后,Ollama会在本地启动一个HTTP服务器(默认端口11434)。这个服务器提供了与OpenAI API兼容的聊天补全接口(
/v1/chat/completions)和嵌入接口(/v1/embeddings),以及Ollama自有的生成接口(/api/generate)。这意味着,任何兼容OpenAI API的客户端(如LangChain、OpenAI Python库、ChatGPT Next Web等)几乎可以无缝切换到Ollama。 -
交互式会话管理 :在命令行运行模式下,Ollama会启动一个交互式会话,维护对话历史上下文,并处理流式输出,让你感觉像是在和一个本地终端里的AI对话。
注意 :Ollama默认的模型库托管在境外,对于国内用户,下载速度可能很慢甚至失败。一个关键的实操技巧是,在拉取模型前,可以通过环境变量
OLLAMA_HOST或修改配置文件,将镜像源设置为国内可访问的镜像站,这是顺利使用Ollama的第一步,也是很多新手遇到的第一个“坑”。
3. 从零开始:安装、配置与基础操作实录
3.1 跨平台安装指南与避坑要点
Ollama的安装过程极其简单,但不同平台仍有细节需要注意。
macOS (Apple Silicon 优先) : 最推荐的方式是直接访问官网下载 .dmg 安装包。安装后,Ollama会作为后台服务自动运行。你可以在终端直接使用 ollama 命令。对于Apple Silicon Mac,Ollama的Metal后端优化得非常好,运行7B/8B模型非常流畅。一个常见问题是,安装后命令未找到,这通常是因为终端会话没有刷新PATH。解决方法是新开一个终端窗口,或者手动执行 source ~/.zshrc (或 ~/.bash_profile )。
Linux : 官方提供了一键安装脚本: curl -fsSL https://ollama.com/install.sh | sh 。这个脚本会自动检测你的发行版(Ubuntu, Debian, CentOS, Arch等)并添加相应的软件源进行安装。在Linux上,你需要特别注意用户组权限。安装脚本通常会创建一个 ollama 用户组,并将当前用户加入。如果运行模型时遇到权限错误,可以手动执行 sudo usermod -aG ollama $USER ,然后 注销并重新登录 使组权限生效。
Windows : 从官网下载安装程序,以管理员身份运行。Windows版本自带了一个简单的图形界面,可以查看已下载的模型和运行状态。在Windows上,最大的“坑”在于防病毒软件和防火墙可能会拦截Ollama的后台服务或网络请求。如果在使用API时遇到连接问题,需要去Windows Defender防火墙设置中,为 ollama app 和 ollama serve 添加入站和出站规则,允许其通过。
3.2 模型管理核心命令详解
安装成功后,模型管理是日常最频繁的操作。以下是核心命令的深度解析:
-
ollama list:列出本地所有模型。这里显示的不是原始的.gguf文件,而是Ollama构建好的“镜像”。输出会包含模型名称、大小、修改日期。一个有用的技巧是,结合ollama list | grep llama来快速筛选特定系列的模型。 -
ollama pull <model-name>:拉取模型。<model-name>的格式是<仓库名>/<模型名>:<标签>,例如ollama pull llama3:8b。标签可以是latest、8b、8b-instruct-q4_0等。 这里有一个非常重要的经验 :直接拉取llama3:8b时,Ollama默认会选择它认为最适合你硬件的一个量化版本(比如q4_0)。但如果你明确知道你需要更高的精度(如q8_0)或更小的体积(如q2_K),你应该指定完整标签,如ollama pull llama3:8b:q8_0。你可以去Ollama的官方模型库网站查看每个模型有哪些可用的标签。 -
ollama run <model-name>:运行模型并进入交互式聊天。这是最常用的测试命令。进入后,直接输入问题即可。按Ctrl+D可以结束会话。在这个模式下,Ollama会维护一个会话上下文,你可以进行多轮对话。但要注意,上下文长度是有限的(取决于模型和配置),过长的对话历史会被丢弃。 -
ollama rm <model-name>:删除本地模型镜像。这只会删除Ollama管理的镜像,不会影响你手动下载的GGUF文件。如果你磁盘空间紧张,定期清理不用的模型是个好习惯。 -
ollama cp <source-model> <new-model-name>:复制一个模型。这个命令在你基于现有模型创建自定义模型(通过Modelfile)时非常有用,你可以先复制一个基础镜像,然后在其基础上修改。
3.3 自定义模型创建:深入Modelfile
Ollama真正的威力在于自定义模型。通过编写一个 Modelfile ,你可以打造专属的AI助手。
创建一个名为 Modelfile 的文本文件,内容如下:
FROM llama3:8b
# 设置系统提示词,定义助手的行为和身份
SYSTEM “””你是一个专业的软件开发助手,精通Python和Go。你的回答应该简洁、准确,并提供可运行的代码示例。如果用户的问题不明确,你会主动询问以澄清需求。“””
# 设置温度参数,控制输出的随机性。0.1意味着创造性很低,输出非常确定。
PARAMETER temperature 0.1
# 设置上下文窗口大小,这里是4096个token。
PARAMETER num_ctx 4096
# 定义一个消息模板,告诉模型如何组织对话历史。这里是ChatML格式,被许多模型支持。
TEMPLATE “””{{ if .System }}<|start_header_id|>system<|end_header_id|>
{{ .System }}<|eot_id|>{{ end }}{{ if .Prompt }}<|start_header_id|>user<|end_header_id|>
{{ .Prompt }}<|eot_id|>{{ end }}<|start_header_id|>assistant<|end_header_id|>
{{ .Response }}<|eot_id_id|>“””
保存后,在终端执行:
ollama create my-coder -f ./Modelfile
这条命令会基于 llama3:8b 创建一个名为 my-coder 的新模型镜像。之后,你就可以通过 ollama run my-coder 来运行你这个定制化的编程助手了。
实操心得 : SYSTEM 提示词是塑造模型行为的关键。写一个好的系统提示词,比后续用大量对话去纠正要高效得多。建议从明确角色、规定格式、限制范围三个方面来构思。 TEMPLATE 的配置需要参考具体模型的训练格式,如果格式不匹配,模型的表现可能会大打折扣。对于Llama 3,上述的ChatML格式是适用的。如果你不确定,一个保守的做法是暂时不定义 TEMPLATE ,使用模型默认的格式。
4. 高级集成:将Ollama融入你的开发生态
4.1 作为后台服务与API调用
大多数时候,我们不会一直待在命令行里交互,而是希望将Ollama作为后台服务,通过API来调用。启动服务很简单:
ollama serve
这个命令会以后台模式运行Ollama服务,监听 11434 端口。现在,你可以用任何HTTP客户端与之交互。
使用cURL进行测试 :
curl http://localhost:11434/api/generate -d ‘{
“model”: “llama3:8b”,
“prompt”: “为什么天空是蓝色的?”,
“stream”: false
}’
这个调用使用了Ollama原生的 /api/generate 端点。参数 stream 设置为 false ,意味着等待完整响应后再返回。对于长文本生成,建议将 stream 设为 true ,这样可以实现类似打字机效果的流式输出,并避免请求超时。
更强大的方式:兼容OpenAI API 。 Ollama的 /v1/chat/completions 端点几乎完全兼容OpenAI的聊天补全API。这意味着你可以直接使用OpenAI的官方Python库,只需改变 base_url 和 api_key (Ollama不需要key,可以填任意值)。
from openai import OpenAI
client = OpenAI(
base_url=‘http://localhost:11434/v1/,
api_key=‘ollama’, # 可以任意填写,但不能为空
)
response = client.chat.completions.create(
model=“llama3:8b”,
messages=[
{“role”: “system”, “content”: “你是一个有用的助手。”},
{“role”: “user”, “content”: “写一个Python函数计算斐波那契数列”}
],
stream=False,
temperature=0.7
)
print(response.choices[0].message.content)
这种兼容性是一个“杀手级”特性,它让你现有的、基于OpenAI API的代码可以几乎零成本地迁移到本地模型上,为开发测试和成本控制提供了巨大便利。
4.2 与LangChain等框架深度集成
对于构建复杂的AI应用,LangChain是目前最流行的框架之一。Ollama与LangChain的集成非常顺畅。
首先,你需要安装LangChain和相关的社区包:
pip install langchain langchain-community
然后,你可以使用 ChatOllama 类来封装Ollama模型:
from langchain_community.chat_models import ChatOllama
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
# 1. 初始化Ollama模型
llm = ChatOllama(
model=“llama3:8b”,
base_url=“http://localhost:11434”,
temperature=0,
num_predict=512, # 控制最大生成token数
)
# 2. 构建提示词模板
prompt = ChatPromptTemplate.from_messages([
(“system”, “你是一个严谨的历史学家。”),
(“user”, “{input}”)
])
# 3. 创建链
chain = prompt | llm | StrOutputParser()
# 4. 调用
result = chain.invoke({“input”: “简述文艺复兴的主要影响。”})
print(result)
通过LangChain,你可以轻松地将Ollama模型与向量数据库、工具调用(Function Calling)、智能体(Agent)等组合起来,构建出功能强大的本地AI应用。例如,你可以用 OllamaEmbeddings 来生成本地嵌入向量,结合Chroma或FAISS向量数据库,实现一个完全离线的RAG(检索增强生成)系统。
4.3 图形化客户端选择:Open WebUI与Continue
对于不喜欢命令行的用户,有几个优秀的图形化客户端可以选择。
Open WebUI (原名Ollama WebUI):这是一个功能极其丰富的自托管Web界面,可以理解为本地部署的“ChatGPT”。它支持多模型切换、对话历史管理、模型文件上传、RAG集成、插件系统等。部署非常简单,通常通过Docker一键完成:
docker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui ghcr.io/open-webui/open-webui:main
部署后,在浏览器访问 http://localhost:3000 ,首次登录需要注册一个管理员账户,然后在设置中正确配置Ollama的API地址(通常是 http://host.docker.internal:11434 ),即可开始使用。
Continue :这是一个专注于辅助编程的IDE插件(支持VS Code和JetBrains全家桶)。它可以直接连接本地的Ollama服务,在IDE中提供代码补全、解释、重构、生成测试等能力。对于开发者来说,Continue提供了最贴近工作流的AI编程体验。配置方法就是在Continue插件设置中,将“模型提供商”选为Ollama,并填入本地地址。
个人体会 :Open WebUI适合通用聊天和探索,而Continue是开发者的生产力利器。我通常同时使用两者,Open WebUI用于知识问答和头脑风暴,Continue则在我写代码时提供实时帮助。
5. 性能调优与资源管理实战
5.1 量化模型选择:精度、速度与内存的平衡
模型量化是能在消费级硬件上运行大模型的关键。Ollama拉取的模型基本都是量化后的GGUF格式。常见的量化等级有:
- q4_0 :4位整数量化,高压缩比,速度较快,精度损失相对可接受。是默认推荐选项。
- q8_0 :8位整数量化,精度损失很小,模型体积比原版FP16小一半,速度比q4_0慢一些。
- q2_K :2位量化,极致压缩,体积最小,但精度损失较大,可能影响复杂任务的表现。
- q5_K_M :5位混合量化,在精度和速度之间取得较好平衡,通常比q4_0精度更高。
如何选择?我的经验法则是: 先看显存,再看任务 。
- 如果你的GPU显存充足(例如24GB以上),可以尝试非量化或
q8_0版本,获得最佳效果。 - 如果显存紧张(如8GB),
q4_0是通用性最强的选择。 - 如果只有CPU或集成显卡,内存是瓶颈,那么
q4_0或q5_K_M是主流选择。对于纯CPU推理,q8_0有时因为更好的缓存利用,速度可能不输于q4_0,且精度更高,值得一试。 - 对于创意写作、头脑风暴等任务,可以接受一定的精度损失,
q4_0足够。但对于代码生成、逻辑推理等要求精确的任务,如果硬件允许,尽量选择q5_K_M或q8_0。
你可以通过 ollama pull <model>:<tag> 来拉取不同量化版本的模型,例如 ollama pull llama3:8b-instruct-q4_0 。
5.2 关键运行参数详解与配置
在运行或通过API调用模型时,可以通过参数精细控制其行为。以下是最关键的几个:
-
num_ctx(上下文窗口) :决定了模型能“记住”多长的对话历史。设置为4096意味着模型会考虑最近的4096个token。更大的上下文允许更长的对话和文档处理,但也会显著增加内存/显存占用和计算时间。 不要盲目设大 ,根据你的实际需要调整。 -
num_predict(最大生成长度) :限制模型单次回复最多生成多少个token。防止模型“自言自语”停不下来。对于问答,256-512通常足够;对于长文生成,可能需要1024或更大。 -
temperature(温度) :控制输出的随机性。范围0-1。值越低(如0.1),输出越确定、保守、可重复;值越高(如0.9),输出越有创意、多样,但也可能更不连贯。代码生成通常用低温(0.1-0.3),创意写作可以用中高温(0.7-0.9)。 -
top_p(核采样) :另一种控制随机性的方法,与temperature可以配合使用。通常保持默认值0.9即可。 -
seed(随机种子) :设置一个固定的数字,可以使模型的输出变得确定。这在需要复现结果时非常有用。
你可以在 ollama run 时通过 --options 传递这些参数,例如:
ollama run llama3:8b --options num_ctx 4096 temperature 0.7
在API调用中,则将这些参数放在JSON请求体中。
5.3 硬件资源监控与瓶颈排查
运行大模型时,需要密切关注系统资源。
- GPU监控 :在Linux/macOS上,可以使用
nvidia-smi(N卡)或rocm-smi(AMD卡)来监控GPU利用率、显存占用和温度。在Windows上,可以使用任务管理器或GPU-Z。对于Mac,活动监视器可以查看GPU历史记录。 - CPU与内存监控 :使用
htop(Linux/macOS)或任务管理器(Windows)查看CPU使用率和内存占用。
常见的性能瓶颈及解决思路:
-
推理速度慢 :
- 检查是否使用了GPU :运行
ollama run llama3:8b时,观察启动日志,看是否有类似“Using GPU”或“BLAS = 1”的提示。如果没有,可能是GPU驱动或Ollama的GPU支持未正确配置。 - 尝试更小的量化版本 :从
q8_0切换到q4_0通常会带来明显的速度提升。 - 调整
num_threads参数 :对于CPU推理,可以通过环境变量OLLAMA_NUM_THREADS来设置使用的CPU线程数,通常设置为物理核心数。
- 检查是否使用了GPU :运行
-
显存/内存不足 :
- 现象 :模型加载失败,或推理过程中进程被杀死(OOM)。
- 解决方案 :
- 拉取更小量化等级的模型(如从
q8_0换到q4_0甚至q2_K)。 - 拉取参数更少的模型(如从
70b换到8b)。 - 减小
num_ctx的值。 - 对于多GPU系统,Ollama目前不支持原生模型并行。但你可以通过
GGML_GPU_LAYERS环境变量(对于某些后端)控制将多少层模型加载到GPU,其余留在CPU,这是一种“混合”推理模式,可以缓解显存压力。
- 拉取更小量化等级的模型(如从
6. 常见问题与解决方案速查表
在实际使用中,你肯定会遇到各种各样的问题。下面是我总结的一些高频问题及其解决方法。
| 问题现象 | 可能原因 | 排查步骤与解决方案 |
|---|---|---|
ollama run 下载模型极慢或失败 |
网络连接至Ollama官方仓库不畅 | 1. 配置国内镜像源: export OLLAMA_HOST=镜像站地址 (临时) 或修改Ollama服务配置。 2. 使用代理(需注意合规性)。 3. 手动下载GGUF文件,使用 ollama create 从本地文件创建。 |
启动服务报错: Error: listen tcp 127.0.0.1:11434: bind: address already in use |
端口11434被占用 | 1. 查找占用进程: lsof -i :11434 (macOS/Linux) 或 netstat -ano | findstr :11434 (Windows)。 2. 终止占用进程,或修改Ollama监听端口:启动时指定 ollama serve --host 0.0.0.0:11435 。 |
| 调用API超时或无响应 | 模型首次加载或生成文本过长 | 1. 首次运行需要加载模型,请耐心等待。 2. 对于长文本生成,务必使用 流式输出 ( stream: true ),避免客户端超时。 3. 检查Ollama服务进程是否正常运行。 |
| 模型输出乱码或胡言乱语 | 1. 模型文件损坏。 2. 提示词模板不匹配。 3. 温度参数过高。 |
1. 删除并重新拉取模型: ollama rm <model> 然后 ollama pull <model> 。 2. 检查Modelfile中的 TEMPLATE 是否适用于该模型系列,如不确定可先注释掉。 3. 降低 temperature 值(如设为0.1)再试。 |
| 在LangChain中调用Ollama报连接错误 | LangChain库版本或配置问题 | 1. 确保使用 langchain-community 包中的 ChatOllama 。 2. 检查 base_url 是否正确,确保包含 http:// 和端口号。 3. 升级 langchain 和 langchain-community 到最新版本。 |
| GPU未调用,推理速度很慢 | GPU驱动、CUDA或Ollama配置问题 | 1. 确认已安装正确的GPU驱动和CUDA(N卡)或ROCm(A卡)。 2. 查看Ollama启动日志,确认是否识别到GPU。 3. 对于Windows,确保安装了带有CUDA支持的Ollama版本。 |
| 对话进行到后面,模型“忘记”了前面的内容 | 超出了上下文窗口 ( num_ctx ) |
1. 增加 num_ctx 参数值(需硬件支持)。 2. 在应用中主动实现“上下文窗口滑动”,只保留最近N条消息历史发送给模型。 |
一个特别有用的调试技巧 :在启动 ollama serve 时,加上 -v 或 --verbose 参数,可以输出详细的调试日志,这对于排查模型加载、API请求过程中的问题非常有帮助。
7. 进阶玩法:构建私有知识库与持续对话
7.1 基于RAG的私有知识库问答
单纯使用模型的知识(预训练数据)是有限的。结合RAG技术,可以让Ollama模型“读懂”你的私人文档(PDF、Word、网页等)并据此回答。核心步骤:
- 文档加载与切分 :使用LangChain的文档加载器(如
PyPDFLoader,UnstructuredFileLoader)和文本分割器(RecursiveCharacterTextSplitter)。 - 向量化与存储 :使用Ollama的嵌入模型(如
nomic-embed-text)将文本块转化为向量,存入本地向量数据库(如ChromaDB)。 - 检索与生成 :当用户提问时,从向量库中检索相关文本块,连同问题和系统指令一起发送给Ollama模型生成答案。
这里是一个极简的示例代码框架:
from langchain_community.document_loaders import TextLoader
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain_community.embeddings import OllamaEmbeddings
from langchain_community.vectorstores import Chroma
from langchain.chains import RetrievalQA
from langchain_community.llms import Ollama
# 1. 加载文档
loader = TextLoader(“my_doc.txt”)
documents = loader.load()
# 2. 分割文本
text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
texts = text_splitter.split_documents(documents)
# 3. 创建向量库
embeddings = OllamaEmbeddings(model=“nomic-embed-text”, base_url=“http://localhost:11434”)
vectorstore = Chroma.from_documents(documents=texts, embedding=embeddings, persist_directory=“./chroma_db”)
# 4. 创建检索链
llm = Ollama(model=“llama3:8b”, base_url=“http://localhost:11434”)
qa_chain = RetrievalQA.from_chain_type(llm=llm, chain_type=“stuff”, retriever=vectorstore.as_retriever())
# 5. 提问
result = qa_chain.invoke({“query”: “我的文档中提到了哪些关键项目?”})
print(result[“result”])
7.2 实现带记忆的持续对话
默认情况下,每次API调用都是独立的。要实现多轮对话记忆,需要在应用层维护一个消息历史列表。一个简单的实现如下:
from openai import OpenAI
class Conversation:
def __init__(self, system_prompt=“”):
self.client = OpenAI(base_url=‘http://localhost:11434/v1/‘, api_key=‘ollama’)
self.messages = []
if system_prompt:
self.messages.append({“role”: “system”, “content”: system_prompt})
def chat(self, user_input):
self.messages.append({“role”: “user”, “content”: user_input})
response = self.client.chat.completions.create(
model=“llama3:8b”,
messages=self.messages,
stream=False,
temperature=0.7
)
assistant_reply = response.choices[0].message.content
self.messages.append({“role”: “assistant”, “content”: assistant_reply})
# 可选:限制历史记录长度,防止超出上下文窗口
if len(self.messages) > 10: # 简单保留最近10轮
self.messages = [self.messages[0]] + self.messages[-9:]
return assistant_reply
# 使用
conv = Conversation(“你是一个幽默的助手。”)
print(conv.chat(“你好!”))
print(conv.chat(“还记得我刚才打招呼了吗?”)) # 模型会记得
这个简单的类维护了一个消息列表,每次聊天都将新的用户消息和模型回复追加进去,并在下次请求时全部发送,从而实现了对话记忆。更复杂的实现还需要考虑上下文窗口的长度限制,当历史消息的token总数超过 num_ctx 时,需要智能地裁剪或总结旧消息。
经过这几个月的深度使用,Ollama给我的最大感受是“自由”和“可控”。它把大模型从云端的神坛上请了下来,放到了我们每个人的笔记本电脑里。你可以随时断网使用,可以毫无顾忌地喂给它任何敏感数据,可以随意修改系统提示词来定制它的性格,也可以尝试各种千奇百怪的模型而不用担心账单爆炸。当然,本地模型的性能无法与GPT-4这样的顶级闭源模型相比,但对于大多数日常问答、文本处理、代码辅助和创意激发来说,一个运行良好的7B或8B模型已经足够出色。如果你还没有尝试过,我强烈建议你从 ollama run llama3:8b 这条命令开始,亲手打开这扇本地AI世界的大门。
更多推荐


所有评论(0)