基于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.pswp.cn/web/72140.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/72140.shtml
英文地址,請注明出處:http://en.pswp.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…