基于Ollama平台部署的Qwen大模型实现聊天机器人

server/2025/3/13 0:23:29/

文章目录

  • 基于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 聊天对话接口案例

OllamaQwen_1">基于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安装。

Ollama_27">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 jsondef 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.textif __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\": \"天空为何这么蓝?\"}]}"

注意:
\用于转义引号,如果不带,将无法访问。


http://www.ppmy.cn/server/174506.html

相关文章

批量删除 Excel 中所有图片、某张指定图片以及二维码图片

在 Excel 文档中,我们可以在工作表中插入大量的图片,我们也可以删除工作表中的图片。少量的图片我们可以直接删除,但是我们我们有大量的 Excel 文档,那如何快速删除所有 Excel 表格中的所有图片呢?我们除了常规删除 Ex…

AI+Python机器学习小项目教程(数据分类)

本系统教程拟通过5个典型项目,掌握机器学习核心流程与Python实现,结合AI编程工具提升效率。 一、AI编程解决机器学习问题的核心思路 1.需求拆解 将问题分解为:数据获取 → 预处理 → 模型选择 → 训练 → 评估 示例prompt:“如何用随机森林处理缺失值?给出Python代码示例…

WPF基础知识61-80

数据访问与处理 61.如何在 WPF 应用程序中使用 ADO.NET 进行数据库访问? 答案:首先需要引用 System.Data.SqlClient(针对 SQL Server 数据库,若为其他数据库需引用相应的库)。然后创建数据库连接对象,根据…

Refreshtoken 前端 安全 前端安全方面

网络安全 前端不需要过硬的网络安全方面的知识,但是能够了解大多数的网络安全,并且可以进行简单的防御前两三个是需要的 介绍一下常见的安全问题,解决方式,和小的Demo,希望大家喜欢 网络安全汇总 XSSCSRF点击劫持SQL注入OS注入请求劫持DDOS 在我看来,前端可以了解并且防御前…

Stable Diffusion F.1模型全面解析

一、引言:生成式AI的变革与SD模型的演进 生成式AI的崛起 扩散模型(Diffusion Model)成为图像生成领域的主流范式,其通过逐步去噪过程实现高保真图像合成。Stable Diffusion(SD)作为开源社区标杆&#xff0c…

WordPress:禁用搜索功能

1、安装 Disable Search 插件禁用搜索 简介与安装:Disable Search 是一个专门的插件,用于禁止来自WordPress网站前台的任何搜索请求,安装这个插件非常直接,通过WordPress的后台插件市场搜索 "Disable Search"&#xff…

阿里云ecs服务器扩容后,和宝塔面板显示的不一致,服务器扩容没有扩容成功解决方案

注意事项 系统类型 系统:我的系统是Alibaba Cloud Linux 3.2104 LTS 64位 核心参考文章 参考阿里云文章1: 《扩容云盘容量》参考阿里云文章2: 《扩容分区和文件系统(Linux)》参考阿里云文章3: 《扩容分…

LivePlayer.js视频H5播放器如何配置iframe允许自动播放和全屏操作

H5直播点播播放器 下载集成入口&#xff1a; https://www.liveqing.com/docs/download/LivePlayer.html 使用说明&#xff1a;https://www.liveqing.com/docs/manuals/LivePlayer.html iframe 设置 添加属性 allowfullscreen allow“autoplay; fullscreen” <iframe src&q…