Python使用Flask結(jié)合DeepSeek開發(fā)(實現(xiàn)代碼)
一、背景
我之前關(guān)于DeepSeek使用ollama部署的文章大家可以把DeepSeek大模型部署起來。那么ollama還提供了可以調(diào)用對應(yīng)部署模型的API接口。我們可以基于這些接口,做自己的二次開發(fā)。使用python+flask+ollama就可以進行模型對話調(diào)用。并且前端采用SSE的技術(shù),后端向前端推送推理結(jié)果進行展示,可以實現(xiàn)屬于自己的大模型對話產(chǎn)品。
二、代碼實現(xiàn)
1、ollama運行deepseek-r1:1.5b模型
docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama docker exec -it ollama ollama run deepseek-r1:1.5b
2、python+flask代碼
import json from flask import Flask, request, Response from ollama import Client app = Flask(__name__) # ollama客戶端 ollma_url = "http://localhost:11434" # localhost可以換成你部署ollama主機的ip、遠程ip ollama_client = Client(host=ollma_url ) # 模型名稱 model_name = "deepseek-r1:1.5b" @app.route('/stream', methods=['POST', 'GET']) def post_example(): def generate(): try: # 調(diào)用ollama客戶端,傳入模型名稱、提問信息 response_generator = ollama_client.generate(model_name, prompt=question, stream=True) for part in response_generator: response_text = part.response # 按照 SSE 規(guī)范格式化數(shù)據(jù) data = f"data: {json.dumps({'response': response_text})}\n\n" print(data) yield data except Exception as e: error_data = f"data: {json.dumps({'error': str(e)})}\n\n" yield error_data # 接收問題, 調(diào)用模型, 使用SSE推送推理結(jié)果給前端 question = request.args.get('question') resp = Response(generate(), mimetype='text/event-stream') # 設(shè)置響應(yīng)頭 resp.headers['Cache-Control'] = 'no-cache' resp.headers['Connection'] = 'keep-alive' resp.headers['Access-Control-Allow-Origin'] = '*' return resp if __name__ == '__main__': app.run(debug=True, port=8080)
3、前端代碼
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Ask Ollama via SSE</title> </head> <body> <input type="text" id="questionInput" placeholder="請輸入你的問題"> <button id="askButton">提問</button> <pre id="answerContainer"></p> <script> const questionInput = document.getElementById('questionInput'); const askButton = document.getElementById('askButton'); const answerContainer = document.getElementById('answerContainer'); askButton.addEventListener('click', async () => { const question = questionInput.value; if (!question) { alert('請輸入問題'); return; } const eventSource = new EventSource(`http://localhost:8080/stream?question=${encodeURIComponent(question)}`); eventSource.onmessage = function (event) { const data = JSON.parse(event.data); const response = data.response; if (response) { const p = document.createElement('span'); p.textContent = response; answerContainer.appendChild(p); } }; eventSource.onerror = function (error) { console.error('EventSource failed:', error); eventSource.close(); }; }); </script> </body> </html>
4、運行結(jié)果
頁面雖然不是很美觀,但是一個基本原理的demo已經(jīng)搞定。剩下的就是優(yōu)化界面、優(yōu)化鏈接異常等相關(guān)邏輯。
5、SSE默認不支持POST請求
SSE默認不支持POST請求,可以找前端的一些npm包有人進行了封裝,可以發(fā)送POST請求。以上的實例為了方便采用了GET請求
三、總結(jié)
有了ollama就行docker服務(wù)一樣,提供了API接口,部署的模型就是類似docker已經(jīng)運行的容器。 通過ollama接口,可以調(diào)用運行的模型的各種能力!
到此這篇關(guān)于Python使用Flask結(jié)合DeepSeek開發(fā)的文章就介紹到這了,更多相關(guān)Python DeepSeek開發(fā)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Python調(diào)用DeepSeek?API的完整操作指南
- 如何使用?Python?實現(xiàn)?DeepSeek?R1?本地化部署
- Python調(diào)用DeepSeek?API的案例詳細教程
- python使用django調(diào)用deepseek api搭建ai網(wǎng)站
- Python結(jié)合DeepSeek API實現(xiàn)PDF轉(zhuǎn)Word的方案
- Python與DeepSeek的深度融合實戰(zhàn)
- Python使用DeepSeek進行聯(lián)網(wǎng)搜索功能詳解
- python+ollama自己寫代碼調(diào)用本地deepseek模型
相關(guān)文章
python實現(xiàn)文字轉(zhuǎn)語音的項目實踐
pyttsx3是一個Python庫,用于文字轉(zhuǎn)語音的功能,它可以將文本轉(zhuǎn)換為語音,并使用不同的音頻引擎進行輸出,本文就來詳細的介紹一下用法,具有一定的參考價值,感興趣的可以了解一下2023-08-08