基于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 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.mzph.cn/web/72140.shtml

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

相关文章

用DasViewer的时候3Dtiles 转osgb 可以直接指定目标坐标系吗?

没有指定坐标系选项,可以转换后,再进行一次坐标系转换。 DasViewer是一款免费极速实景三维模型浏览器,采用多细节层次模型逐步自适应加载技术,让用户在极低的电脑配置下,也能流畅的加载较大规模实景三维模型,提供方便快捷的数据浏览操作。 目…

【MySQL】MySQL服务器——mysqld

1.MySQL服务器 是名为 mysqld 的数据库服务器程序,和“主机”(host)不一样是一个多线程的单进程管理对磁盘和内存中数据库的访问支持并发的客户端连接支持多个存储引擎,常见的存储引擎包括InnoDB、MyISAM、Memory、Archive支持事…

vue启动 localhost无法访问

1. localhost 和 127.0.0.1 虽然都指向本机,但它们有细微的区别: - localhost 是一个域名,需要通过 DNS 解析或本地 hosts 文件解析为 IP 地址 - 127.0.0.1 是直接的 IP 地址,不需要解析过程 2. 无法访问 localhost 的可…

爬虫案例十三js逆向模拟登录中大网校

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、网站分析二、代码 前言 提示:这里可以添加本文要记录的大概内容: js 逆向模拟登录中大网校 提示:以下是本篇文章正文内…

Java IO 与文件系统:File 类与流操作详解

在 Java 编程中,IO(输入输出)操作是处理文件和数据流的核心部分。本文将围绕文件系统、硬盘存储、Java 的 File 类以及 InputStream 和 OutputStream 的使用进行详细总结,帮助读者全面掌握 Java IO 编程的核心知识。 一、IO、存储…

我与DeepSeek读《大型网站技术架构》(13)- 大型网站典型故障案例分析

文章目录 第13章 大型网站典型故障案例分析日志管理缺陷引发的故障高并发数据库访问问题锁机制滥用导致服务超时缓存运维不当引发的全站瘫痪流程不规范导致的线上事故编程习惯问题引发功能异常生产环境滥用问题其他典型问题总结 第13章 大型网站典型故障案例分析 本章通过九个…

Git与GitHub:它们是什么,有什么区别与联系?

1.Git是什么? Git 是一个开源的、分布式版本控制系统(Version Control System, VCS),由 Linus Torvalds 于 2005 年开发,最初用于管理 Linux 内核的开发。它的核心功能是跟踪文件的变更历史,帮助开发者高效…

江科大51单片机笔记【12】AT24C02(I2C总线)

写在前言 此为博主自学江科大51单片机(B站)的笔记,方便后续重温知识 在后面的章节中,为了防止篇幅过长和易于查找,我把一个小节分成两部分来发,上章节主要是关于本节课的硬件介绍、电路图、原理图等理论知识…

ClickHouse SQL优化:从原理到实战的深度指南

目录 ​ClickHouse架构核心解析 1.1 列式存储的利刃与短板 1.2 MergeTree引擎的物理存储密码 1.3 向量化执行引擎的运算革命 ​数据建模的黄金法则 2.1 分区键设计的二十倍性能差异实验 2.2 主键排序的磁盘命中率法则 2.3 稀疏索引的数学选择策略 ​SQL优化十诫 3.1 查询模式反…

面试之《前端常见的设计模式》

前端开发中运用多种设计模式可以提高代码的可维护性、可扩展性和可复用性。以下是一些常见的前端设计模式: 创建型模式 1. 单例模式 定义:确保一个类只有一个实例,并提供一个全局访问点。应用场景:在前端中,像全局状…

Unity Android出包

Unity Android出包 1.Android Studio版本 不能高于Unity的版本 2.so库 这个库需要自己拷贝到Android工程当中 3.JDK版本太老 编译可以正常,但无法运行 File->ProjectStructure->SDK Location->Gradle Setting->Gradle JDK->X:/Android Stuido/jre …

Android 中临时文件存放路径选择

在 Android 中,下载临时文件通常可以放在以下目录中,具体选择取决于应用的需求和目标 Android 版本的限制: 1. 通用临时目录(/data/local/tmp/) 这是 Android 系统提供的一个通用临时目录,适用于存储临时…

【软件测试】--面试

准备简历–面试邀请 投递简历 面试(笔试,HR面试,技术官面试) 入职准备(体检,背调) 办理入职(签合同) 入职培训 试用期 转正 【简历要点】 1.基本信息 学校专业&#xff…

C盘清理技巧分享:释放空间,提升电脑性能

目录 1. 引言 2. C盘空间不足的影响 3. C盘清理的必要性 4. C盘清理的具体技巧 4.1 删除临时文件 4.2 清理系统还原点 4.3 卸载不必要的程序 4.4 清理下载文件夹 4.5 移动大文件到其他盘 4.6 清理系统缓存 4.7 使用磁盘清理工具 4.8 清理Windows更新文件 4.9 禁用…

rpm安装nux-dextop时出现 epel-release is needed的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

qt加载VeloView工程

接上一篇点云软件配置与编译,使用qt加载需要先完成编译。编译完成后到编译目录下lidarview-superbuild\common-superbuild\lidarview\build 找到CmakeCache.txt,如下是我的编译目录。 使用QT6.5.3加载了CmakeCache.txt,QT5.14还加载不了cmake…

python编写的一个打砖块小游戏

游戏介绍 打砖块是一款经典的街机游戏,玩家控制底部的挡板,使球反弹以击碎上方的砖块。当球击中砖块时,砖块消失,球反弹;若球碰到挡板,则改变方向继续运动;若球掉出屏幕底部,玩家失…

git 基本常用操作,切换分支,合并分支

分支 two 查看所有分支 git branch 切换分支(two) git checkout two 创建并切换到新分支(two) git checkout -b two 提交当前代码到到源分支 git push --set-upstream origin two 合并分支 1. 切换到目标分支 例如,…

【QT】事件系统入门——QEvent 基础与示例

一、事件介绍 事件是 应用程序内部或者外部产生的事情或者动作的统称 在 Qt 中使用一个对象来表示一个事件。所有的 Qt 事件均继承于抽象类 QEvent。事件是由系统或者 Qt 平台本身在不同的时刻发出的。当用户按下鼠标、敲下键盘,或者是窗口需要重新绘制的时候&…

自然语言处理初学者指南

文章目录 一、说明二、自然语言处理发展史2.1 最早的自然语言处理简介2.2 历史2.3 NLP 的早期工作 三、NLP的现代方法3.1 单词编码3.2 循环神经网络3.3 强化学习3.4 深度学习 四、更进一步的方法 一、说明 对于初学者来说,自然语言处理的发展历史非常有必要了解&am…