当前位置: 首页 > news >正文

基于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 的文档&#xff0c;请参见链接。 限制&#xff1a; 目前仅支持 std::unique_ptr<T, std::default_delete>。未来可能会支持自定义删除器。 UniquePtr 不支持 T 为不透明的 Rust 类型。对于在语言边界传递不…...

Java 集合框架大师课:集合框架源码解剖室(五)

&#x1f525;Java 集合框架大师课&#xff1a;集合框架源码解剖室&#xff08;五&#xff09; &#x1f4a3; 警告&#xff1a;本章包含大量 裸码级硬核分析&#xff0c;建议搭配咖啡因饮料阅读&#xff01;☕️ 第一章 ArrayList 的扩容玄学 1.1 动态扩容核心代码大卸八块 …...

llamafactory 微调教程

文章目录 llamlafactory微调deepseekr1-0.5b1.1 说明1.2 搭建环境创建GPU实例连接实例部署llama_factory创建隧道&#xff0c;配置端口转发访问llama_factory 1.3 微调大模型从huggingface上下载基座模型查看模型是否下载成功准备数据集微调评估微调效果导出合并后的模型 释放实…...

代码随想录|二叉树|04二叉树的统一迭代法

一刷我这里放了。。。 代码随想录...

【教学类-43-25】20240311 数独3宫格的所有可能(图片版 12套样式,空1格-空8格,每套510张,共6120小图)

背景需求&#xff1a; 有一位客户买3宫格所有可能&#xff08;WORD表格版&#xff09; 【教学类-43-25】20241203 数独3宫格的所有可能-使用模版替换-用时少报错少&#xff08;12套样式&#xff0c;空1格-空8格&#xff0c;每套510张&#xff0c;共6120小图&#xff09;_数独三…...

Manus AI:多语言手写识别的技术革命与未来图景

摘要&#xff1a;在全球化浪潮下&#xff0c;跨语言沟通的需求日益迫切&#xff0c;但手写文字的多样性却成为技术突破的难点。Manus AI凭借其多语言手写识别技术&#xff0c;将潦草笔迹转化为精准数字文本&#xff0c;覆盖全球超百种语言。本文从技术原理、应用场景、行业价值…...

领域驱动设计(DDD)是什么?

领域驱动设计&#xff08;DDD&#xff09;是什么&#xff1f; 在软件开发的世界里&#xff0c;我们总在寻找那把打开业务之门的钥匙。有人迷恋MVC的简洁&#xff0c;有人追逐微服务的潮流&#xff0c;而DDD&#xff08;领域驱动设计&#xff09;则像一位沉默的智者&#xff0c;…...

JavaScript 模块 vs C# 类:封装逻辑的两种哲学

引言 在现代软件开发中&#xff0c;模块化和面向对象设计是代码组织的核心课题。本文通过对比 JavaScript 模块&#xff08;ES6 Module&#xff09;与 C# 类&#xff08;Class&#xff09;的实现方式&#xff0c;探讨两种语言在封装逻辑时的不同哲学&#xff0c;并给出实际应用…...

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. 常见问…...

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…...

业务系统对接大模型的基础方案:架构设计与关键步骤

业务系统对接大模型&#xff1a;架构设计与关键步骤 在当今数字化转型的浪潮中&#xff0c;大语言模型&#xff08;LLM&#xff09;已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中&#xff0c;不仅可以优化用户体验&#xff0c;还能为业务决策提供…...

label-studio的使用教程(导入本地路径)

文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

java 实现excel文件转pdf | 无水印 | 无限制

文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

微信小程序 - 手机震动

一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注&#xff1a;文档 https://developers.weixin.qq…...

MODBUS TCP转CANopen 技术赋能高效协同作业

在现代工业自动化领域&#xff0c;MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步&#xff0c;这两种通讯协议也正在被逐步融合&#xff0c;形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...

Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级

在互联网的快速发展中&#xff0c;高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司&#xff0c;近期做出了一个重大技术决策&#xff1a;弃用长期使用的 Nginx&#xff0c;转而采用其内部开发…...

【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分

一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计&#xff0c;提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合&#xff1a;各模块职责清晰&#xff0c;便于独立开发…...

Python Ovito统计金刚石结构数量

大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...

C# 表达式和运算符(求值顺序)

求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如&#xff0c;已知表达式3*52&#xff0c;依照子表达式的求值顺序&#xff0c;有两种可能的结果&#xff0c;如图9-3所示。 如果乘法先执行&#xff0c;结果是17。如果5…...