文章目錄
- 基于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\": \"天空為何這么藍?\"}]}"
注意:
\
用于轉義引號,如果不帶,將無法訪問。