【人工智能】:搭建本地AI服务——Ollama、LobeChat和Go语言的全方位实践指南
前言
随着自然语言处理(NLP)技术的快速发展,越来越多的企业和个人开发者寻求在本地环境中运行大型语言模型(LLM),以确保数据隐私和提高响应速度。Ollama 作为一个强大的本地运行框架,支持多种先进的 LLM,并提供了易于使用的API接口。本文将详细介绍如何通过 Ollama 构建一个高效、安全的本地AI对话系统,包括Ollama的安装与配置、使用 Go 语言操作大模型以及与 LobeChat 的结合实现可视化管理。
一、Ollama 简介与优势
Ollama 是一款专注于本地部署的大型语言模型框架,旨在为用户提供一种无需依赖云端服务即可享受先进 AI 能力的方式。它具备以下特点:
- 隐私保护:所有处理都在用户的本地设备上完成,确保敏感信息不离开用户环境。
- 多模型支持:支持多个版本的 Llama 以及其他流行的 LLM,如 Phi 4, Gemma 2 等。
- 易用性:提供简单直观的命令行工具和 RESTful API,方便开发者快速上手。
- 性能优化:针对不同硬件配置进行了优化,能够充分利用现有资源提供最佳性能。
- 社区支持:活跃的开源社区提供了丰富的文档和支持,帮助开发者解决问题并分享经验。
二、安装与配置 Ollama
1.环境准备
在开始安装之前,请确认您的开发环境满足以下要求:
- 操作系统兼容性:支持的操作系统包括 Windows、macOS 和 Linux。请根据实际情况选择合适的安装方式。
- 硬件资源要求:根据所选模型大小,建议至少具备 8GB RAM 用于7B模型,16GB RAM用于13B模型,32GB RAM 用于 33B 模型。对于 GPU 加速,推荐使用 NVIDIA CUDA 兼容的显卡。
- 依赖库安装:确保已安装 Docker,以便能够轻松部署 LobeChat 服务。如果需要从源码编译 Ollama,则还需安装 GCC、CMake 等构建工具链。
- 网络连接:初次安装时需保证有稳定的互联网连接,以便下载必要的依赖项和更新。
2.安装步骤
根据不同的操作系统,安装步骤有所不同:
- macOS:
下载 Ollama for macOS 并解压、安装。
- Windows:
下载 Ollama for Windows 并安装。
- Linux:
可以通过官方脚本或手动安装:
curl -fsSL https://ollama.com/install.sh | sh
3.配置 Ollama 允许跨域访问
为了让其他服务正确连接到 Ollama,设置几个关键的环境变量:
- macOS:
由于 Ollama 的默认参数配置,启动时设置了仅本地访问,所以跨域访问以及端口监听需要进行额外的环境变量设置 OLLAMA_ORIGINS。使用 launchctl 设置环境变量:
-
launchctl setenv OLLAMA_ORIGINS "*"
完成设置后,需要重启 Ollama 应用程序。
- Windows:
由于 Ollama 的默认参数配置,启动时设置了仅本地访问,所以跨域访问以及端口监听需要进行额外的环境变量设置 OLLAMA_ORIGINS。
在 Windows 上,Ollama 继承了您的用户和系统环境变量。
- 首先通过 Windows 任务栏点击 Ollama 退出程序。
- 从控制面板编辑系统环境变量。
- 为您的用户账户编辑或新建 Ollama 的环境变量 OLLAMA_ORIGINS,值设为 * 。
- 点击OK/应用保存后重启系统。
- 重新运行Ollama。
- Linux:
由于 Ollama 的默认参数配置,启动时设置了仅本地访问,所以跨域访问以及端口监听需要进行额外的环境变量设置 OLLAMA_ORIGINS。如果 Ollama 作为 systemd 服务运行,应该使用systemctl设置环境变量:
-
通过调用sudo systemctl edit ollama.service编辑 systemd 服务。
sudo systemctl edit ollama.service
-
对于每个环境变量,在 [Service] 部分下添加 Environment:
[Service] Environment="OLLAMA_HOST=0.0.0.0" Environment="OLLAMA_ORIGINS=*"
-
保存并退出。
-
重载 systemd 并重启 Ollama:
sudo systemctl daemon-reload sudo systemctl restart ollama
4. 模型选择与下载
根据具体的业务需求选择合适的预训练模型。Ollama 支持多个版本的 Llama 以及其他流行的 LLM,如下表所示:
模型名称 | 参数量 | 大小 (GB) | 下载命令 |
---|---|---|---|
Llama 3.3 | 70B | 43GB | ollama run llama3.3 |
Llama 3.2 | 3B | 2.0GB | ollama run llama3.2 |
Llama 3.2 | 1B | 1.3GB | ollama run llama3.2:1b |
Solar | 10.7B | 6.1GB | ollama run solar |
选择好模型后,可以通过下命令下载并加载到本地环境中。请注意,较大的模型可能需要更多的时间和存储空间来完成下载及初始化过程。
5. Ollama 命令使用
提供了丰富的命令行工具,用于管理和操作模型。以下是常用的命令及其功能,以表格形式展示:
命令 | 描述 |
ollama --help | 查看帮助信息 |
ollama list | 列出所有可用模型 |
ollama pull <model> | 下载或更新指定模型 |
ollama start | 启动Ollama服务 |
ollama stop | 停止Ollama服务 |
ollama restart | 重启Ollama服务 |
ollama status | 检查服务状态 |
ollama delete <model> | 删除不再使用的模型 |
ollama generate --model <model> --prompt "提示文本" | 生成文本,基于指定模型和提示文本 |
这些命令可以帮助您更高效地管理Ollama环境,确保模型的正确下载、加载和服务的稳定运行。
我们使用 llama3.2 作为后面示例的大模型语言,执行命令:"ollama pull llama3.2",下载该模型语言。
三、使用 Go 语言操作大模型
1. Go 语言客户端示例
下面是一个简单的 Go 语言客户端示例,演示如何与 Ollama REST API 交互,发送文本请求并接收响应。请注意,某些API调用可能需要 API 密钥进行身份验证,具体取决于 Ollama 的服务配置。
package mainimport ("bufio""bytes""encoding/json""fmt""io""log""net/http""os""strings""time"
)// ChatRequest 是发送到 API 的请求体结构
type ChatRequest struct {Model string `json:"model"` // 模型的名称或标识符Messages []ChatMessage `json:"messages"` // 消息内容,包含具体的文本信息Stream bool `json:"stream"` // 是否以流的方式返回结果
}// ChatMessage 是请求和响应中消息的结构
type ChatMessage struct {Role string `json:"role"` // 角色,可以是"user"或"assistant"Content string `json:"content"` // 消息内容
}// ChatResponse 是从 API 接收到的响应体结构
type ChatResponse struct {Model string `json:"model"` // 模型的名称或标识符CreatedAt time.Time `json:"created_at"` // 响应创建的时间戳Message ChatMessage `json:"message"` // 生成的消息内容DoneReason string `json:"done_reason"` // 完成生成的原因Done bool `json:"done"` // 表示生成是否完成TotalDuration int64 `json:"total_duration"` // 总生成持续时间(毫秒)LoadDuration int `json:"load_duration"` // 模型加载持续时间(毫秒)PromptEvalCount int `json:"prompt_eval_count"` // 提示评估的次数PromptEvalDuration int `json:"prompt_eval_duration"` // 提示评估的持续时间(毫秒)EvalCount int `json:"eval_count"` // 评估的总次数EvalDuration int `json:"eval_duration"` // 评估的总持续时间(毫秒)
}func main() {// 读取器用于从标准输入读取用户输入reader := bufio.NewReader(os.Stdin)// 打印欢迎信息fmt.Println("欢迎使用AI!输入 'exit' 退出对话。")for {fmt.Print("我: ")userInput, err := reader.ReadString('\n')if err != nil {log.Fatalf("Error reading input: %v", err)}userInput = strings.TrimSpace(userInput)if userInput == "exit" {fmt.Println("Goodbye!")break}// 创建请求体requestBody := ChatRequest{Model: "llama3.2:latest",Messages: []ChatMessage{{Role: "user",Content: userInput,},},Stream: false, // 根据需要设置为 true 或 false}// 将请求体序列化为JSONjsonData, err := json.Marshal(requestBody)if err != nil {log.Fatalf("Error marshaling request body: %v", err)}// 创建HTTP请求apiURL := "http://localhost:11434/api/chat"req, err := http.NewRequest("POST", apiURL, bytes.NewBuffer(jsonData))if err != nil {log.Fatalf("Error creating request: %v", err)}// 设置请求头,包括Content-Type和API密钥(如果API需要)apiKey := "your_api_key_here" // 替换为实际的API密钥req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", apiKey))req.Header.Set("Content-Type", "application/json")// 发送HTTP请求并获取响应client := &http.Client{}resp, err := client.Do(req)if err != nil {log.Fatalf("Error making request: %v", err)}defer resp.Body.Close()// 读取响应体body, err := io.ReadAll(resp.Body)if err != nil {log.Fatalf("Error reading response body: %v", err)}// 解析响应体var response ChatResponseerr = json.Unmarshal(body, &response)if err != nil {log.Fatalf("Error unmarshaling response body: %v", err)}// 打印生成的文本,添加标记fmt.Printf("%s\n", response.Message.Content)}
}
这段代码展示了如何通过 HTTP POST 请求调用 Ollama 的服务端点 /api/chat,发送一段文本聊天内容,并接收由选定模型生成的回复。如果 Ollama 服务需要 API 密钥认证,确保在请求头中包含正确的 Authorization 字段。
2.API 密钥认证
在使用 Go 语言或其他编程语言与 Ollama 服务进行交互时,务必确认是否需要 API 密钥进行认证。如果需要,应按照 Ollama 提供的指南设置正确的认证信息,以确保 API 调用的安全性和合法性。对于生产环境,强烈建议使用安全的方式管理和传输 API 密钥,以防止泄露和滥用。
四、配置可视化 LobeChat
1. 安装 LobeChat
使用 Docker 容器化技术可以简化 LobeChat 的部署过程。通过添加环境变量 OLLAMA_PROXY_URL 来指定 Ollama 的服务地址,使得 LobeChat 可以通过这个代理与 Ollama 交互。完整的 Docker 命令如下所示:
docker run -d -p 3210:3210 -e OLLAMA_PROXY_URL=http://host.docker.internal:11434 lobehub/lobe-chat
这条命令会在本地机器的 3210 端口启动 LobeChat 服务,并将其与 Ollama 服务相连。
2.配置 LobeChat 模型
点击“会话设置”,选择“语言模型”,设置之前自己下载的语言模型;选择“默认助手”,模型选择“llama:3.2”。
3.测试与优化
完成上述步骤后,接下来就是对集成后的系统进行全面的功能测试。这包括但不限于单元测试、集成测试以及用户体验测试。根据测试结果进行必要的调整和优化,确保系统的稳定性和性能。特别是要注意以下几点:
- 对话质量:检查对话是否流畅,回复是否准确。
- 响应时间:测量从用户提问到机器人回应的时间间隔。
- 资源使用情况:监控CPU、内存等资源消耗,确保不会因频繁调用导致系统负载过高。
4. 用户界面定制
LobeChat 提供了灵活的前端定制选项,可以根据实际需求修改用户界面的设计和功能。例如,可以添加自定义样式、图标和按钮,增强用户体验;也可以集成第三方插件和服务,扩展平台的功能范围。此外,还可以根据用户反馈不断迭代改进 UI/UX 设计,使产品更加符合目标受众的需求。
五、应用场景与案例研究
企业级客服机器人
借助 LobeChat 与 Ollama 的集成,企业可以构建一个高度智能化且安全可靠的客服平台。所有对话都发生在本地环境中,既保护了客户隐私,又提高了沟通效率。例如,一家银行可以利用这一平台为客户提供全天候的金融服务咨询,确保信息安全的同时提升服务质量。
教育辅助工具
对于在线教育平台而言,这种集成可以帮助创建更加个性化的学习体验。例如,根据学生的答题情况实时提供反馈和建议,促进知识的有效传递。此外,还可以开发针对特定学科的智能辅导系统,帮助学生更好地掌握知识点。
智能家居控制
通过语音助手等形式,用户可以用自然语言指令控制家中的智能设备,享受便捷舒适的家居生活。例如,说出“打开客厅灯”,系统就能立即执行相应操作,极大地方便了日常生活。
医疗健康助手
在医疗领域,集成后的系统可以作为医生的助手,帮助分析病历、提供诊断建议或解释复杂的医学术语。它还可以用于患者的日常健康管理,提醒用药时间和预约日期,提高医疗服务的质量和效率。
总结
本文详细介绍了如何通过 Ollama 构建一个高效、安全的本地 AI 对话系统,涵盖了从安装配置到使用 Go 语言操作大模型,再到配置可视化 LobeChat 的全过程。通过这种集成,不仅提升了对话的质量和效率,还为客户提供了前所未有的个性化体验。希望这篇文章能帮助你深入了解Ollama及其应用潜力,如果你有任何问题或想要了解更多相关信息,请随时留言交流!
参考资料
LobeChat Docs
Ollama GitHub Repository
相关文章:

【人工智能】:搭建本地AI服务——Ollama、LobeChat和Go语言的全方位实践指南
前言 随着自然语言处理(NLP)技术的快速发展,越来越多的企业和个人开发者寻求在本地环境中运行大型语言模型(LLM),以确保数据隐私和提高响应速度。Ollama 作为一个强大的本地运行框架,支持多种先…...

数据结构——堆(介绍,堆的基本操作、堆排序)
我是一个计算机专业研0的学生卡蒙Camel🐫🐫🐫(刚保研) 记录每天学习过程(主要学习Java、python、人工智能),总结知识点(内容来自:自我总结网上借鉴࿰…...
Excel中函数ABS( )的用法
Excel中函数ABS的用法 1. 函数详细讲解1.1 函数解释1.2 使用格式1.3 参数定义1.4 要点 2. 实用演示示例3. 注意事项4. 文档下载5. 其他文章6. 获取全部Excel练习素材快来试试吧🥰 函数练习素材👈点击即可进行下载操作操作注意只能下载不能在线操作 1. 函…...

【数据分析】02- A/B 测试:玩转假设检验、t 检验与卡方检验
一、背景:当“审判”成为科学 1.1 虚拟场景——法庭审判 想象这样一个场景:有一天,你在王国里担任“首席审判官”。你面前站着一位嫌疑人,有人指控他说“偷了国王珍贵的金冠”。但究竟是他干的,还是他是被冤枉的&…...
Windows下的C++内存泄漏检测工具Visual Leak Detector (VLD)介绍及使用
在软件开发过程中,内存管理是一个至关重要的环节。内存泄漏不仅会导致程序占用越来越多的内存资源,还可能引发系统性能下降甚至程序崩溃。对于Linux平台来说,内存检测工具非常丰富,GCC自带的AddressSanitizer (asan) 就是一个功能…...

[苍穹外卖] 1-项目介绍及环境搭建
项目介绍 定位:专门为餐饮企业(餐厅、饭店)定制的一款软件产品 功能架构: 管理端 - 外卖商家使用 用户端 - 点餐用户使用 技术栈: 开发环境的搭建 整体结构: 前端环境 前端工程基于 nginx 运行 - Ngi…...

人物一致性训练测评数据集
1.Pulid 训练:由1.5M张从互联网收集的高质量人类图像组成,图像标题由blip2自动生成。 测试:从互联网上收集了一个多样化的肖像测试集,该数据集涵盖了多种肤色、年龄和性别,共计120张图像,我们称之为DivID-120,作为补充资源,还使用了最近开源的测试集Unsplash-50,包含…...
AI的出现,是否能替代IT从业者?
AI的出现,是否能替代IT从业者? AI在IT领域中的应用已成趋势,IT 从业者们站在这风暴之眼,面临着一个尖锐问题:AI 是否会成为 “职业终结者”?有人担忧 AI 将取代 IT 行业的大部分工作,也有人坚信…...

乘联会:1月汽车零售预计175万辆 环比暴跌33.6%
快科技1月18日消息,据乘联会的初步推算,2025年1月狭义乘用车零售总市场规模预计将达到约175万辆左右。与去年同期相比,这一数据呈现了-14.6%的同比下降态势;而相较于上个月,则出现了-33.6%的环比暴跌情况。 为了更清晰…...

LLM - 大模型 ScallingLaws 的 CLM 和 MLM 中不同系数(PLM) 教程(2)
欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/145188660 免责声明:本文来源于个人知识与公开资料,仅用于学术交流,欢迎讨论,不支持转载。 Scalin…...

开发神器之cursor
文章目录 cursor简介主要特点 下载cursor页面的简单介绍切换大模型指定ai学习的文件指定特定的代码喂给ai创建项目框架文件 cursor简介 Cursor 是一款专为开发者设计的智能代码编辑器,集成了先进的 AI 技术,旨在提升编程效率。以下是其主要特点和功能&a…...

使用 Ansys Motor-CAD 的自适应模板加速创新
应对现代电机设计挑战 电机设计不断发展,Ansys 正在通过创新解决方案引领潮流,不断突破可能的界限。随着电动汽车、工业自动化和可再生能源系统的快速增长,对优化电机的需求从未如此之高。工程师面临着越来越大的压力,他们需要开发…...

RabbitMQ前置概念
文章目录 1.AMQP协议是什么?2.rabbitmq端口介绍3.消息队列的作用和使用场景4.rabbitmq工作原理5.整体架构核心概念6.使用7.消费者消息推送限制(work模型)8.fanout交换机9.Direct交换机10.Topic交换机(推荐)11.声明队列…...

http转化为https生成自签名证书
背景 项目开发阶段前后交互采用http协议,演示环境采用htttps协议 ,此处为个人demo案例 组件 后端:springBoot 前端:vue web 服务:tomcat 部署环境:linux 生成自签名证书 创建目录 存储证书位置 # mkdir -p…...

《贪心算法:原理剖析与典型例题精解》
必刷的贪心算法典型例题! 算法竞赛(蓝桥杯)贪心算法1——数塔问题-CSDN博客 算法竞赛(蓝桥杯)贪心算法2——需要安排几位师傅加工零件-CSDN博客 算法(蓝桥杯)贪心算法3——二维数组排序与贪心算…...

【网络协议】【http】【https】RSA+AES-TLS1.2
【网络协议】【http】【https】RSAAES-TLS1.2 https并不是一个协议 而是在传输层之间添加了SSL/TLS协议 TLS 协议用于应用层协议(如 HTTP)和传输层(如 TCP)之间,增加了一层安全性来解决 HTTP 存在的问题,H…...

【数据库】MySQL数据库之约束与多表查询
约束 1.概述 概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据目的:保证数据库中数据的正确性、有效性,完整性和一致性分类: 注意:约束是作用于表中字段上的,可以在创建表/修改表…...
【Pandas】pandas Series dot
Pandas2.2 Series Binary operator functions 方法描述Series.add()用于对两个 Series 进行逐元素加法运算Series.sub()用于对两个 Series 进行逐元素减法运算Series.mul()用于对两个 Series 进行逐元素乘法运算Series.div()用于对两个 Series 进行逐元素除法运算Series.true…...

02UML图(D2_行为图)
目录 学习前言 ---------------------------------- 讲解一:活动图 ---------------------------------- 讲解二:用例图 ---------------------------------- 讲解三:状态机图 ---------------------------------- 讲解四:…...

Kali环境变量技巧(The Environment Variable Technique Used by Kali
Kali环境变量技巧 朋友们好,我们今天继续更新《黑客视角下的Kali Linux的基础与网络管理》中的管理用户环境变量。为了充分利用我们的黑客操作系统Kali Linux,我们需要理解和善于使用环境变量,这样会使我们的工具更具便利,甚至具…...
变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析
一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...

7.4.分块查找
一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...

使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...

大型活动交通拥堵治理的视觉算法应用
大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...

python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...
数据链路层的主要功能是什么
数据链路层(OSI模型第2层)的核心功能是在相邻网络节点(如交换机、主机)间提供可靠的数据帧传输服务,主要职责包括: 🔑 核心功能详解: 帧封装与解封装 封装: 将网络层下发…...

Module Federation 和 Native Federation 的比较
前言 Module Federation 是 Webpack 5 引入的微前端架构方案,允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...

EtherNet/IP转DeviceNet协议网关详解
一,设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络,本网关连接到EtherNet/IP总线中做为从站使用,连接到DeviceNet总线中做为从站使用。 在自动…...

QT: `long long` 类型转换为 `QString` 2025.6.5
在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...

在WSL2的Ubuntu镜像中安装Docker
Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包: for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...