【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 ollama

def get_chat_response(messages, model):
	# 调用ollama对话接口,以流的方式交互并直接返回
    stream = ollama.chat(model= model, messages=messages, stream=True)
    return stream

def get_model():
	# 获取deepseek 模型版本
    model_name = []
    result = ollama.list().models
    for a in result:
        model_name.append(a.model)
    return tuple(model_name)

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

import streamlit as st

from utils import get_chat_response, get_model

content = ''
# 这个方法是接收ollama的流,是一个generator,然后遍历这个generator,提取其中的content字段,
# 通过yield关键字重新生成一个generator,交给 write_stream()方法流式输出
def getContent(stream):
    global content
    for chunk in stream:
        c = chunk['message']['content']
        content += c
        yield c

st.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=''

最终效果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

百老

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值