所用到的软件ollamachatboxstreamlit

ollama是一款开源的本地大模型运行框架

chatbox(集成)、streamlit(api)提供可视化前端页面

Windows部署

ollama下载链接:https://ollama.com/download/OllamaSetup.exe

下载完后点击安装包完成安装后,在命令行输入:

ollama -v

出现 ollama version is 0.12.3则说明安装成功了

然后在ollama官网查询自己要用到的大模型版本类型

我选的是deepseek-r1:7b

就在命令行执行

ollama run deepseek-r1

下载完成之后就部署完成了

可以在chatbox的设置中连接到本地大模型作为前端页面展示

也可以用python代码运用streamlit库进行前端设置(放在最后)

Linux部署

下载ollama

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

查看ollama状态

systemctl status ollama

启动ollama

systemctl start ollama

将ollama设为开机自启

systemctl enable ollama

查看ollama帮助文档

ollama -h

然后可以在ollama官网选择自己要下载的大模型并运行:

ollama run deepseek-r1:7b

这样一个命令行界面的大模型就好了

用python代码构建前后端大模型

Linux环境首先检查是否安装python环境

yum install python -y

然后安装要用到的库

pip install ollama streamlit 

再编写一个py脚本(Windows 直接在pycharm中编写就可以了)

vim ai.py

脚本

#!/usr/bin/python3 windows环境可以不要这一行

import ollama 
import time
import streamlit as st 

#client = ollama.Client(host = 'http://localhost:11434')   #linux用这行代码
client = ollama.Client(host = 'http://127.0.0.1:11434')   #window用这行代码

if 'message' not in st.session_state:
    st.session_state['message'] = []

st.title("Tomdeng的智能机器人")

st.divider()

message = st.chat_input("请输入你的消息")

#了解他的角色  了解他的消息本身

if message:
    #将消息存入历史记录中
    st.session_state['message'].append({'role':'user','message':message})
    #将消息渲染出来
    for ms in st.session_state['message']:
        st.chat_message(ms['role']).markdown(ms['message'])
    with st.spinner('思考中'):
        #response = client.chat(model='qwen3:0.6b',messages=[{'role':'user','content':message}])
        response = client.chat(model='deepseek-r1:7b',messages=[{'role':'user','content':message}])
        #存储回答的消息
        st.session_state['message'].append({'role':'assistant','message':response['message']['content']})
        st.chat_message('assistant').markdown(response['message']['content'])

之后在终端执行

streamlit run ai.py

ollama核心方法/接口

配置连接服务:

client = ollama.Client(host='http://127.0.0.1:11434')

与模型进行对话(支持上下文)

response = client.chat(model='deepseek-r1:7b',messages=[{'role':'user','content':message}])

输出回复

print(response['message']['content'])

生成文本(不支持上下文)

text = client.generate(model='deepseek-r1:7b',prompt="写一首诗")

输出回复

print(text['response'])

下载模型

ollama.pull('qwen3:0.6b')

删除模型

ollama.delete('qwen3:0.6b')

列出本地大模型

ollama.list()

查看模型详细信息

ollama.show('qwen3:0.6b')

streamlit核心方法/接口

导入库并且取别名

import streamlit as st

设置标题

st.title('智能机器人')

设置分割线

st.divider() 

显示文本

st.write('哈哈哈哈')

设置输入框

message = st.chat_input("请输入文本")

回复消息

st.chat_message['user'].markdown('hahah') -- 用户的消息用user,大模型的回复用assistant

streamlit执行原理是一直循环脚本,每次运行时都会重新加载,所以并没有记忆性(如你设置了一个count=1,每问答一次后count++,但是他给出的回复永远都是count=1)而且以往的聊天记录都没了

所以引入streamlit存储和共享数据的核心机制–st.session_state(字典类型)

可以将以前的问答记录在st.session_state

通常我们要记录的数据是 角色 + 文本

所以可以将st.session_stats[‘message’]设为一个列表,每个列表元素用字典的形式存放

session_state

ms = st.session_state['message']
ms.append({'role':'user','message':response})
Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐