基于Ollama平台部署的Qwen大模型实现聊天机器人
文章目录
- 基于Ollama平台部署的Qwen大模型实现聊天机器人
- 1 概述
- 2 技术栈
- 2.1 开发技术
- 2.2 环境
- 3 实现步骤
- 3.1 环境搭建
- 3.1.1 WSL配置及Ubuntu安装
- 3.1.2 Ollama安装及模型部署
- 3.2 模块安装
- 3.2.1 安装Streamlit 1.42.2
- 3.2.2 安装requests 2.32.3
- 3.2.3 安装ollama 0.4.7
- 3.3 后端实现
- 3.4 前端访问
- 3.5 代码执行
- 3.6 实现效果
- 4 通过curl命令行工具进行访问
- 4.1 /api/chat 聊天对话接口案例
基于Ollama平台部署的Qwen大模型实现聊天机器人
1 概述
本案例旨在构建一个基于Python的交互式系统,前端通过Streamlit框架实现简洁易用的用户界面,后端基于Ollama平台部署Qwen模型,提供自然语言处理(NLP)能力。用户可以通过前端界面与Qwen模型进行交互,获取模型的响应结果。
2 技术栈
2.1 开发技术
- 前端:Streamlit 1.42.2(轻量级Web应用框架)
- 后端:Ollama 0.5.12(模型部署平台)
- 模型:Qwen2:0.5b(自然语言处理模型)
- 编程语言:Python 3.12.8
- 模块:requests 2.32.3、ollama 0.4.7
- 开发工具:PyCharm
说明:
安装requests 2.32.3、ollama 0.4.7,只是为了演示两种访问方式,开发场景中,只要实现其中之一。
2.2 环境
- 系统:Ubuntu 24.04.2 LTS
- 系统服务:WSL 2.4.11.0
说明:
Windows Subsystem for Linux(简称WSL)是一个在Windows 10\11上能够运行原生Linux二进制可执行文件(ELF格式)的兼容层。它是由微软与Canonical公司合作开发,开发人员可以在 Windows 计算机上同时访问 Windows 和 Linux 的强大功能。 通过适用于 Linux 的 Windows 子系统 (WSL)
,开发人员可以安装 Linux 发行版(例如 Ubuntu、OpenSUSE、Kali、Debian、Arch Linux 等),并直接在 Windows 上使用 Linux 应用程序、实用程序和 Bash 命令行工具,不用进行任何修改,也无需承担传统虚拟机或双启动设置的费用。
3 实现步骤
3.1 环境搭建
3.1.1 WSL配置及Ubuntu安装
WSL配置以及Ubuntu系统安装,可参考文章WSL安装及问题https://blog.csdn.net/mh942408056/article/details/145053974
注意:
如果不准备在Liunx中安装Ollama,可省略此步骤,Ollama同时支持Windows安装。
3.1.2 Ollama安装及模型部署
Ollama安装以及模型的部署,可参考文章Ollama安装与使用https://blog.csdn.net/mh942408056/article/details/146038905
注意:
如果Windows中安装Ollama,请去Ollama官网下载Windows版本。
3.2 模块安装
3.2.1 安装Streamlit 1.42.2
pip install streamlit
说明:
Steamlit帮助文档地址为:https://docs.streamlit.io/
3.2.2 安装requests 2.32.3
pip install requests
说明:
通过requests模块实现远程调用接口访问Ollama中的大模型。
3.2.3 安装ollama 0.4.7
pip install ollama
说明:
通过ollama模块实现本地调用接口访问Ollama中的大模型。
3.3 后端实现
注意:
- 使用Ollama加载Qwen模型(如 ollama run qwen2:0.5b)。
- 确保API服务可用(默认地址为 http://localhost:11434/api/chat)。
文件名称为:chat_utils.py
import ollama
import requests
import json
def get_response(prompt):
"""
调用ollama聊天接口,并返回结果(方式一:本地访问)
:param prompt: 历史对话、提示词
:return:执行结果
"""
# 获取最后50个会话信息传送给模型,模型会根据上下文回答最后一个问题
response = ollama.chat(model='qwen2:0.5b', messages=prompt[-50:], stream=False)
return response['message']['content']
def get_response_requests(url, prompt):
"""
调用ollama聊天接口,并返回结果(方式二:远程访问)
:param url: 访问的接口
:param prompt: 历史对话、提示词
:return: 执行结果
"""
# 1 定义请求头
headers = {"Content-Type": "application/json"}
# 2 请求并返回结果
response = requests.post(url, headers=headers, data=json.dumps(prompt))
# 3 判断返回结果状态
if response.status_code == 200:
# 3.1 将文本转换成字典
msg = json.loads(response.text)
# 3.2 返回消息
return msg["message"]["content"]
else:
return response.status_code, response.text
if __name__ == '__main__':
# 提示词
prompt = '学习streamlit的注意事项'
# 组装接口消息内容
prompt_list = [{'role': 'user', 'content': prompt}]
# # 通过ollama模块访问Ollama平台中的大模型
# response = get_response(prompt_list)
# 通过requests模块访问Ollama平台中的大模型
response = get_response_requests('http://localhost:11434/api/chat', {'model': 'qwen2:0.5b', 'messages': prompt_list,'stream':False})
print(response)
3.4 前端访问
文件名称为:chat_main.py
import streamlit as st
import chat_utils
# 1 页面配置
st.set_page_config(
page_title='智聊机器人', # 页面标题
page_icon=':pirate_flag:', # 页面图标
initial_sidebar_state='expanded', # 初始状态侧边栏
menu_items={
'Get Help': 'https://www.csdn.net/',
'Report a Bug': None,
'About': "# 智聊机器人",
}
)
# 2 主界面主标题
st.title('智聊机器人')
# 3 判断聊天记录是否存在会话状态中
if 'messages' not in st.session_state:
# 3.1 增加欢迎语
st.session_state['messages'] = [
{'role': 'assistant', 'content': '你好,我是智聊机器人,有什么可以帮助您的吗? :santa:'}]
# 4 循环遍历会话状态中的消息
for message in st.session_state.messages:
# 4.1 按角色将消息输出到页面
with st.chat_message(message['role']):
# 4.1.1 输出消息
st.markdown(message['content'])
# 5.创建一个会话框
prompt = st.chat_input('请输入您要咨询的问题:')
# 6.判断是否有新的消息
if prompt:
# 6.1 将消息追加到会话状态中
st.session_state['messages'].append({'role': 'user', 'content': prompt})
# 6.2 输出会话消息
st.chat_message('user').markdown(prompt)
# 7 增加旋转等待组件
with st.spinner(':hourglass: AI小助手正在思考中...'):
# 7.1 调用Ollama聊天接口,并接收返回结果
content = chat_utils.get_response(st.session_state['messages'])
# 8 记录assistant返回的消息
st.session_state['messages'].append({'role': 'assistant', 'content': content})
# 9 将返回消息输出到页面
st.chat_message('assistant').markdown(content)
3.5 代码执行
进入chat_main.py
根目录,运行以下命令:
streamlit run chat_main.py
3.6 实现效果
4 通过curl命令行工具进行访问
如果只是简单访问,而不用开发代码,可通过ollama run 模型名称:标签
或curl
实现快速访问。
- ollama访问方式参考文章Ollama安装与使用https://blog.csdn.net/mh942408056/article/details/146038905。
- curl访问方式可参考官网APIhttps://github.com/ollama/ollama/blob/main/docs/api.md
4.1 /api/chat 聊天对话接口案例
curl http://localhost:11434/api/chat -d "{\"model\": \"qwen2:0.5b\",\"messages\": [ {\"role\": \"user\",\"content\": \"天空为何这么蓝?\"}]}"
注意:
\
用于转义引号,如果不带,将无法访问。