基于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. 常见问…...
Windows右键菜单管理效率提升指南:用ContextMenuManager打造个性化定制体验
Windows右键菜单管理效率提升指南:用ContextMenuManager打造个性化定制体验 【免费下载链接】ContextMenuManager 🖱️ 纯粹的Windows右键菜单管理程序 项目地址: https://gitcode.com/gh_mirrors/co/ContextMenuManager 你是否曾遇到这样的场景&…...
5个技巧让LyricsX成为你的Mac音乐必备工具
5个技巧让LyricsX成为你的Mac音乐必备工具 【免费下载链接】Lyrics Swift-based iTunes plug-in to display lyrics on the desktop. 项目地址: https://gitcode.com/gh_mirrors/lyr/Lyrics 你是否曾在Mac上听音乐时,因为没有桌面歌词而无法跟着哼唱…...
告别代码恐惧!用KRobot图形化编程,10分钟搞定Arduino巡线小车(附完整接线图)
零代码玩转Arduino巡线小车:KRobot图形化编程全攻略 第一次接触Arduino时,看到满屏的C代码是不是头皮发麻?作为教育工作者或创客爱好者,你可能更希望把时间花在创意实现上,而不是纠结于语法错误。现在,通过…...
【day63】
以前有个孩子,他分分钟都在碎碎念。不过,他的念头之间是有因果关系的。他会在本子里记录每一个念头,并用箭头画出这个念头的来源于之前的哪一个念头。翻开这个本子,你一定会被互相穿梭的箭头给搅晕,现在他希望你用程序…...
技术驱魔实录:给服务器泼黑狗血除邪
在软件测试的世界里,我们常常面对无形的“邪灵”——那些潜伏在代码深处的Bug、性能瓶颈或安全漏洞。它们如同传说中的恶鬼,悄无声息地侵蚀系统稳定性,让服务器在关键时刻崩溃。传统驱邪术中,黑狗血被视为至阳之物,能破…...
实测AWS Bedrock 接入 Claude 4.6 做代码审查:200K 上下文+多智能体协作
最近 GitHub 上的不少热门开源项目都在热议一款新工具:Anthropic 刚刚在 AWS Bedrock 推出的 Claude 4.6 Sonnet,以及随之而来的多智能体代码审查系统(Claude Code Review)。这套系统不仅卷起了技术圈的讨论热潮,也掀起…...
FLUX小红书V2模型版本对比:V1与V2的核心改进与效果差异
FLUX小红书V2模型版本对比:V1与V2的核心改进与效果差异 1. 引言 如果你最近在玩AI图像生成,特别是想做出那种看起来特别真实、特别有小红书风格的照片,那你肯定听说过FLUX小红书模型。这个模型从V1版本开始就挺火的,主要是因为它…...
终极指南:如何使用baidu-wangpan-parse工具免费突破百度网盘限速
终极指南:如何使用baidu-wangpan-parse工具免费突破百度网盘限速 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 百度网盘直链解析工具baidu-wangpan-parse是专为普…...
CLIP-GmP-ViT-L-14匹配精度实测:Softmax置信度排序效果惊艳案例集
CLIP-GmP-ViT-L-14匹配精度实测:Softmax置信度排序效果惊艳案例集 1. 引言:当图片遇见文字,CLIP如何精准“读懂”? 想象一下,你有一张照片,里面可能是一只猫、一辆车,或者一片风景。如果让你用…...
Python调用SM9遭遇“Unknown curve”?紧急修复手册:从OpenSSL 3.0.7到国密SM9曲线OID映射全对照
第一章:Python调用SM9遭遇“Unknown curve”问题的根源定位当使用 Python(如通过 cryptography 或 gmssl 库)实现国密 SM9 算法时,常见报错 ValueError: Unknown curve 并非源于椭圆曲线参数缺失,而是因底层密码学库未…...
