基于Ollama平台部署的Qwen大模型实现聊天机器人
文章目录
- 基于Ollama平台部署的Qwen大模型实现聊天机器人
- 1 概述
- 2 技术栈
- 2.1 开发技术
- 2.2 环境
- 3 技术架构
- 4 实现步骤
- 4.1 环境搭建
- 4.1.1 WSL配置及Ubuntu安装
- 4.1.2 Ollama安装及模型部署
- 4.2 模块安装
- 4.2.1 安装Streamlit 1.42.2
- 4.2.2 安装requests 2.32.3
- 4.2.3 安装ollama 0.4.7
- 4.3 后端实现
- 4.4 前端访问
- 4.5 实现效果
- 5 通过curl命令行工具进行访问
- 5.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 技术架构
4 实现步骤
4.1 环境搭建
4.1.1 WSL配置及Ubuntu安装
WSL配置以及Ubuntu系统安装,可参考文章WSL安装及问题https://blog.csdn.net/mh942408056/article/details/145053974
注意:
如果不准备在Liunx中安装Ollama,可省略此步骤,Ollama同时支持Windows安装。
4.1.2 Ollama安装及模型部署
Ollama安装以及模型的部署,可参考文章Ollama安装与使用https://blog.csdn.net/mh942408056/article/details/146038905
注意:
如果Windows中安装Ollama,请去Ollama官网下载Windows版本。
4.2 模块安装
4.2.1 安装Streamlit 1.42.2
pip install streamlit
说明:
Steamlit帮助文档地址为:https://docs.streamlit.io/
4.2.2 安装requests 2.32.3
pip install requests
说明:
通过requests模块实现远程调用接口访问Ollama中的大模型。
4.2.3 安装ollama 0.4.7
pip install ollama
说明:
通过ollama模块实现本地调用接口访问Ollama中的大模型。
4.3 后端实现
注意:
- 使用Ollama加载Qwen模型(如 ollama run qwen2:0.5b)。
- 确保API服务可用(默认地址为 http://localhost:11434/api/chat)。
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)
4.4 前端访问
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)
4.5 实现效果

5 通过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
5.1 /api/chat 聊天对话接口案例
curl http://localhost:11434/api/chat -d "{\"model\": \"qwen2:0.5b\",\"messages\": [ {\"role\": \"user\",\"content\": \"天空为何这么蓝?\"}]}"
注意:
\用于转义引号,如果不带,将无法访问。
相关文章:
基于Ollama平台部署的Qwen大模型实现聊天机器人
文章目录 基于Ollama平台部署的Qwen大模型实现聊天机器人1 概述2 技术栈2.1 开发技术2.2 环境 3 技术架构4 实现步骤4.1 环境搭建4.1.1 WSL配置及Ubuntu安装4.1.2 Ollama安装及模型部署 4.2 模块安装4.2.1 安装Streamlit 1.42.24.2.2 安装requests 2.32.34.2.3 安装ollama 0.4.…...
在 JDK 1.8 的 ConcurrentHashMap 中,为什么存在两种插入方式?
在 JDK 1.8 的 ConcurrentHashMap 中,之所以对“容器为空”和“计算位置为空”采取不同的处理方式,主要是因为 并发场景下的性能优化和并发安全保证。我们可以分开来看这两种情况: 1. 容器为空时,使用 volatile CAS 初始化 原因…...
如何让powershell的界面变成全屏显示?
刚打开powershell,原来的样子: 全屏:可以按一下键盘上的alt enter 键,效果:...
语音识别踩坑记录
本来想在原来的语音识别的基础上增加本地扩展本地词典, 采用的语音识别是Vosk识别器,模型是 vosk-model-small-cn-0.22 // 初始化Vosk识别器 if (recognizer null) {using (Model model new Model(modelPath)){string grammar "{""…...
图片查看器:用PyQt5实现本地图片预览工具
通过python代码,基于PyQt5实现本地图片预览查看工具。 我们对窗口进行了圆角设计,图片的翻页按钮半透明处理,当鼠标移动至按钮上的动画效果,当选择某一张图片,进行左右翻页则轮播同目录所有支持的图片格式。 import …...
Deepin通过二进制方式升级部署高版本 Docker
一、背景: 在Deepin系统中通过二进制方式升级部署高版本 Docker,下面将详细介绍二进制方式升级部署高版本 Docker 的具体步骤。 二、操作步骤 1.根据需求下载二进制文件,下载地址如下: https://mirrors.tuna.tsinghua.e…...
车架号VIN查询 API 接口用JAVA如何调用?
以下是车架号VIN查询 API 接口用JAVA如何调用的示例代码: package com.shuxun.data.impl.demo;import com.shuxun.common.core.util.HttpUtil; import org.apache.commons.codec.digest.DigestUtils;import java.util.HashMap; import java.util.Map;public class …...
Vulnhub 靶机 VulnOSv2 write up opendocman cms 32075 sql注入 账号密码 ssh连接 37292.c 脏牛提权
Vulnhub 靶机 VulnOSv2 write up opendocman cms 32075 sql注入 账号密码 ssh连接 37292.c 脏牛提权 一、信息收集 1、首先拿到靶场先扫一下ip arp-scan -l 3、 2、指纹扫描 nmap -sS -sV 192.168.66.178nmap -p- -sV -A 192.168.66.253 PORT STATE SERVICE VERSION 22…...
爬虫的精准识别:基于 User-Agent 的正则实现
🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编…...
Python数据分析之数据可视化
Python 数据分析重点知识点 本系列不同其他的知识点讲解,力求通过例子让新同学学习用法,帮助老同学快速回忆知识点 可视化系列: Python基础数据分析工具数据处理与分析数据可视化机器学习基础 四、数据可视化 图表类型与选择 根据数据特…...
【免费】2004-2020年各省货运量数据
2004-2020年各省货运量数据 1、时间:2004-2020年 2、来源:国家统计局、统计年鉴 3、指标:行政区划代码、地区、年份、货运量(万吨) 4、范围:31省 5、指标解释:货运量指在一定时期内,各种运输工具实际运…...
【CXX】6.6 UniquePtr<T> — std::unique_ptr<T>
std::unique_ptr 的 Rust 绑定称为 UniquePtr。有关 Rust API 的文档,请参见链接。 限制: 目前仅支持 std::unique_ptr<T, std::default_delete>。未来可能会支持自定义删除器。 UniquePtr 不支持 T 为不透明的 Rust 类型。对于在语言边界传递不…...
Java 集合框架大师课:集合框架源码解剖室(五)
🔥Java 集合框架大师课:集合框架源码解剖室(五) 💣 警告:本章包含大量 裸码级硬核分析,建议搭配咖啡因饮料阅读!☕️ 第一章 ArrayList 的扩容玄学 1.1 动态扩容核心代码大卸八块 …...
llamafactory 微调教程
文章目录 llamlafactory微调deepseekr1-0.5b1.1 说明1.2 搭建环境创建GPU实例连接实例部署llama_factory创建隧道,配置端口转发访问llama_factory 1.3 微调大模型从huggingface上下载基座模型查看模型是否下载成功准备数据集微调评估微调效果导出合并后的模型 释放实…...
代码随想录|二叉树|04二叉树的统一迭代法
一刷我这里放了。。。 代码随想录...
【教学类-43-25】20240311 数独3宫格的所有可能(图片版 12套样式,空1格-空8格,每套510张,共6120小图)
背景需求: 有一位客户买3宫格所有可能(WORD表格版) 【教学类-43-25】20241203 数独3宫格的所有可能-使用模版替换-用时少报错少(12套样式,空1格-空8格,每套510张,共6120小图)_数独三…...
Manus AI:多语言手写识别的技术革命与未来图景
摘要:在全球化浪潮下,跨语言沟通的需求日益迫切,但手写文字的多样性却成为技术突破的难点。Manus AI凭借其多语言手写识别技术,将潦草笔迹转化为精准数字文本,覆盖全球超百种语言。本文从技术原理、应用场景、行业价值…...
领域驱动设计(DDD)是什么?
领域驱动设计(DDD)是什么? 在软件开发的世界里,我们总在寻找那把打开业务之门的钥匙。有人迷恋MVC的简洁,有人追逐微服务的潮流,而DDD(领域驱动设计)则像一位沉默的智者,…...
JavaScript 模块 vs C# 类:封装逻辑的两种哲学
引言 在现代软件开发中,模块化和面向对象设计是代码组织的核心课题。本文通过对比 JavaScript 模块(ES6 Module)与 C# 类(Class)的实现方式,探讨两种语言在封装逻辑时的不同哲学,并给出实际应用…...
2.2 企业级ESLint/Prettier规则定制
文章目录 1. 为什么需要企业级代码规范2. 工具选型对比3. 完整配置流程3.1 项目初始化3.2 ESLint深度配置3.3 Prettier精细配置3.4 解决规则冲突4. 高级定制方案4.1 自定义ESLint规则4.2 扩展Prettier插件5. 团队协作策略5.1 配置共享方案5.2 版本控制策略6. CI/CD集成7. 常见问…...
浅谈 React Hooks
React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...
深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录
ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...
C++初阶-list的底层
目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...
【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...
页面渲染流程与性能优化
页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...
3403. 从盒子中找出字典序最大的字符串 I
3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...
鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南
1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发,使用DevEco Studio作为开发工具,采用Java语言实现,包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...
视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)
前言: 最近在做行为检测相关的模型,用的是时空图卷积网络(STGCN),但原有kinetic-400数据集数据质量较低,需要进行细粒度的标注,同时粗略搜了下已有开源工具基本都集中于图像分割这块,…...
