【Linux】基于Ollama和Streamlit快速部署聊天大模型

1.环境准备

1.1 安装Streamlit

在安装Streamlit之前,请确保您的系统中已经正确安装了Python和pip。您可以在终端或命令行中运行以下命令来验证它们是否已安装

python --version
pip --version

一旦您已经准备好环境,现在可以使用pip来安装Streamlit了。在终端或命令行中运行以下命令:

pip install streamlit

安装完成后,您可以使用以下命令验证Streamlit是否成功安装:

streamlit version

Streamlit运行文件方式

streamlit run app.py

1.2 安装Ollama

curl -fsSL https://ollama.com/install.sh | sh

可能会出现断传,建议下载模型文件然后手动安装

官网下载速度慢的话可以访问 国内下载地址 下载

  • 直接下载后将压缩包 传到服务器上的文件夹上,解压到usr目录,输入:
sudo tar -C /usr -xzvf 你的压缩包所在位置

sudo systemctl daemon-reload
sudo systemctl enable ollama

服务启停

2.python程序

import os
# 调用私有化的ollama
os.environ['OLLAMA_HOST'] = 'http://192.168.4.201:11434'
import ollamadef get_chat_response(messages, model):# 调用ollama对话接口,以流的方式交互并直接返回stream = ollama.chat(model= model, messages=messages, stream=True)return streamdef get_model():# 获取deepseek 模型版本model_name = []result = ollama.list().modelsfor a in result:model_name.append(a.model)return tuple(model_name)

以下streamlit_ollama.py 是streamlit run 执行的文件

import streamlit as stfrom utils import get_chat_response, get_modelcontent = ''
# 这个方法是接收ollama的流,是一个generator,然后遍历这个generator,提取其中的content字段,
# 通过yield关键字重新生成一个generator,交给 write_stream()方法流式输出
def getContent(stream):global contentfor chunk in stream:c = chunk['message']['content']content += cyield cst.title("聊天机器人")# 从导航栏选择要交互的模型版本
with st.sidebar:model = st.selectbox('请选择你的对话模型:',get_model())
# 记录对话历史
if "messages" not in st.session_state:st.session_state['messages'] = [{'role':'assistant', 'content':'你好,请问有什么可以帮助你?'}]for message in st.session_state['messages']:st.chat_message(message['role']).write(message['content'])# 等待用户输入
prompt = st.chat_input()if prompt:st.session_state['messages'].append({'role':'user','content':prompt})st.chat_message('user').write(prompt)with st.spinner("思考中"):stream = get_chat_response(st.session_state['messages'], model)st.chat_message('assistant').write_stream(getContent(stream))st.session_state['messages'].append({'role':'assistant','content':content})content=''

最终效果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/915366.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/915366.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Jetpack - ViewModel、LiveData、DataBinding(数据绑定、双向数据绑定)

一、ViewModel 1、基本介绍 ViewModel 属于 Android Jetpack 架构组件的一部分,ViewModel 被设计用来存储和管理与 UI 相关的数据,这些数据在配置更改(例如,屏幕旋转)时能够幸存下来,ViewModel 的生命周期与…

Go并发聊天室:从零构建实战

大家好,今天我将分享一个使用Go语言从零开始构建的控制台并发聊天室项目。这个项目虽然简单,但它麻雀虽小五脏俱全,非常适合用来学习和实践Go语言强大的并发特性,尤其是 goroutine 和 channel 的使用。 一、项目亮点与功能特性 …

疯狂星期四第13天运营日报

网站运营第13天,点击观站: 疯狂星期四 crazy-thursday.com 全网最全的疯狂星期四文案网站 运营报告 昨日访问量 昨天大概60个ip, 同比上个星期是高点的,但是与星期四差别还是太大了。😂 昨日搜索引擎收录情况 百度依旧0收录 …

吴恩达《AI for everyone》第二周课程笔记

机器学习项目工作流程以Echo/Alexa(语音识别AI)作为例子解释: 1. collect data 收集数据——人为找很多人说 Alexa,并录制音频;并且还会让一群人说其他词语,比如hello 2. train model 训练模型——用机器学…

uniapp props、$ref、$emit、$parent、$child、$on

1. uniapp props、ref、ref、ref、emit、parent、parent、parent、child、$on 1.1. 父组件和子组件 propsPage.vue导入props-son-view.vue组件的时候,我们就称index.vue为父组件依次类推,在vue中只要能获取到组件的实例,那么就可以调用组件的属性或是方法进行操作 1.2. pr…

4、ubuntu | dify创建知识库 | 上市公司个股研报知识库

1、创建知识库步骤 创建一个知识库并上传相关文档主要涉及以下五个关键步骤: 创建知识库:首先,需要创建一个新的知识库。这可以通过上传本地文件、从在线资源导入数据或者直接创建一个空的知识库来实现。 指定分段模式:接下来是…

Kubernetes中为Elasticsearch配置多节点共享存储

在Kubernetes中为Elasticsearch配置多节点共享存储(ReadWriteMany)需结合存储后端特性及Elasticsearch架构设计。 由于Elasticsearch默认要求每个节点独立存储数据(ReadWriteOnce),直接实现多节点共享存储需特殊处理。 ​​方案一:使用支持ReadWriteMany的存储后端(推荐…

SpringBoot热部署与配置技巧

配置文件SpringBoot 的热部署Spring为开发者提供了一个名为spring-boot-devtools的模块来使SpringBoot应用支持热部署&#xff0c;提高开发者的开发效率&#xff0c;无需手动重启SpringBoot应用相关依赖&#xff1a;<dependency> <groupId>org.springframework.boo…

Python与C#的三元运算符的写法区别

一、语法结构对比​​PyTorch示例​​dev torch.device("cuda:0" if torch.cuda.is_available() else "cpu")​​逻辑​​&#xff1a;若torch.cuda.is_available()为真&#xff0c;则返回"cuda:0"&#xff0c;否则返回"cpu"。​​作…

java 学习篇一

java知识点 一、windows不区分大小写&#xff0c;linux区分大小写 二、写java需要JDK&#xff0c;一般运行环境需要JRE 三、JDK安装一般是傻瓜是安装 四、java主要工具javac、java&#xff1b;其中javac用于编译.java -> .class&#xff1b;java用于执行.class文件执行时候不…

仙盟数据库应用-外贸标签打印系统 前端数据库-V8--毕业论文-—-—仙盟创梦IDE

基于 Excel 标签打印软件的外贸打印流程优化与实践摘要&#xff1a;在全球化外贸业务中&#xff0c;标签打印是货物流通、信息标识的关键环节。本文聚焦 “未来之窗云上打印技术” 的 Excel 标签打印软件&#xff0c;结合外贸平台实际场景&#xff0c;分析其在打印流程中的应用…

【Linux】权限详解 权限本质、权限属性、su、sudo提权、chmod\chown\chgrp、文件类别

文章目录一、权限的认识二、linux的权限本质三、linux的用户su指令sudo提权四、linux角色五、文件权限属性六、修改权限的指令操作chmod指令(权限只会验证一次)chown/chgrp指令修改文件权限的八进制方案七、文件类别详解一、权限的认识 什么是权限&#xff1f; 生活中处处都有权…

rman清理归档

1进入rman rman target / 2&#xff1a;列出所有归档日志的路径 LIST ARCHIVELOG ALL; 3.然后在执行 crosscheck archivelog all;&#xff08;检查 RMAN 存储库中记录的归档日志是否在磁盘或备份存储中实际存在。 4.然后在执行 delete noprompt expired archivelog all;&…

Selenium 处理动态网页与等待机制详解

在使用 Selenium 进行网页自动化操作时&#xff0c;动态网页往往是开发者遇到的第一个 “拦路虎”。想象一下&#xff1a;你明明在代码中写好了元素定位逻辑&#xff0c;运行时却频繁报错 “元素不存在”&#xff0c;但手动打开网页时元素明明就在眼前 —— 这很可能是因为网页…

Salesforce 与外部系统实时集成:基于事件驱动的异步集成架构

在 Salesforce 与外部系统&#xff08;如 ERP、财务系统、物流系统等&#xff09;的实时集成中&#xff0c;“稳定性” 是核心挑战 —— 既要保证数据同步的及时性&#xff0c;又要应对网络波动、系统故障、并发冲突等不可控因素。以下从问题本质、技术瓶颈、解决方案细节三个维…

React 的 `cache()` 函数

文章目录前言一、核心作用二、工作原理三、使用场景1. 避免重复数据请求2. 优化昂贵计算四、缓存规则详解五、与其它缓存方式对比六、服务端特殊行为七、最佳实践八、缓存失效策略九、使用限制十、与数据获取库集成总结&#xff1a;何时使用 cache()前言 React 的 cache() 函数…

大白编译——autotools与cmake

注意: 本文内容于 2025-07-20 01:58:56 创建,可能不会在此平台上进行更新。如果您希望查看最新版本或更多相关内容,请访问原文地址:大白编译——autotools与cmake。感谢您的关注与支持! 之前记录了通过autotools编译rpm包与deb包的步骤。参考小白编译——rpm包与deb包 - …

react19+nextjs+antd切换主题颜色

在 React 19 Next.js Ant Design 项目中实现主题切换功能&#xff0c;可以通过以下步骤完成。这里将提供完整方案&#xff0c;包含静态主题切换和动态实时切换两种方式。一、基础配置&#xff08;Ant Design 主题支持&#xff09; 1. 安装必要依赖 npm install antd ant-desi…

Modbus Slave 使用教程:快速搭建模拟从站进行测试与开发

文章目录Modbus Slave 使用教程&#xff1a;快速搭建模拟从站进行测试与开发步骤详解&#xff1a;搭建 Modbus Slave1. 安装与启动2. 配置从站连接 (Connection Setup)连接3. 定义从站数据 (设置寄存器/线圈映射)4. 设置初始值与变化模式 (可选但重要)5. 连接 Master 进行测试高…

通俗易懂神经网络:从基础到实现

引言 神经网络是人工智能和深度学习的核心&#xff0c;它模仿人脑的工作方式&#xff0c;通过数据学习复杂的模式。本文将以通俗易懂的方式讲解神经网络的基础知识&#xff0c;包括单层神经网络、多层神经网络&#xff0c;最后用Python代码实现一个简单的神经网络模型。1. 神经…