Python使用Flask結(jié)合DeepSeek開發(fā)(實(shí)現(xiàn)代碼)
一、背景
我之前關(guān)于DeepSeek使用ollama部署的文章大家可以把DeepSeek大模型部署起來(lái)。那么ollama還提供了可以調(diào)用對(duì)應(yīng)部署模型的API接口。我們可以基于這些接口,做自己的二次開發(fā)。使用python+flask+ollama就可以進(jìn)行模型對(duì)話調(diào)用。并且前端采用SSE的技術(shù),后端向前端推送推理結(jié)果進(jìn)行展示,可以實(shí)現(xiàn)屬于自己的大模型對(duì)話產(chǎn)品。
二、代碼實(shí)現(xiàn)
1、ollama運(yùn)行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主機(jī)的ip、遠(yuǎn)程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客戶端,傳入模型名稱、提問(wèn)信息 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 # 接收問(wèn)題, 調(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="請(qǐng)輸入你的問(wèn)題"> <button id="askButton">提問(wèn)</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('請(qǐng)輸入問(wèn)題'); 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、運(yùn)行結(jié)果
頁(yè)面雖然不是很美觀,但是一個(gè)基本原理的demo已經(jīng)搞定。剩下的就是優(yōu)化界面、優(yōu)化鏈接異常等相關(guān)邏輯。
5、SSE默認(rèn)不支持POST請(qǐng)求
SSE默認(rèn)不支持POST請(qǐng)求,可以找前端的一些npm包有人進(jìn)行了封裝,可以發(fā)送POST請(qǐng)求。以上的實(shí)例為了方便采用了GET請(qǐng)求
三、總結(jié)
有了ollama就行docker服務(wù)一樣,提供了API接口,部署的模型就是類似docker已經(jīng)運(yùn)行的容器。 通過(guò)ollama接口,可以調(diào)用運(yùn)行的模型的各種能力!
到此這篇關(guān)于Python使用Flask結(jié)合DeepSeek開發(fā)的文章就介紹到這了,更多相關(guān)Python DeepSeek開發(fā)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Python調(diào)用DeepSeek?API的完整操作指南
- 如何使用?Python?實(shí)現(xiàn)?DeepSeek?R1?本地化部署
- Python調(diào)用DeepSeek?API的案例詳細(xì)教程
- python使用django調(diào)用deepseek api搭建ai網(wǎng)站
- Python結(jié)合DeepSeek API實(shí)現(xiàn)PDF轉(zhuǎn)Word的方案
- Python與DeepSeek的深度融合實(shí)戰(zhàn)
- Python使用DeepSeek進(jìn)行聯(lián)網(wǎng)搜索功能詳解
- python+ollama自己寫代碼調(diào)用本地deepseek模型
相關(guān)文章
python實(shí)現(xiàn)文字轉(zhuǎn)語(yǔ)音的項(xiàng)目實(shí)踐
pyttsx3是一個(gè)Python庫(kù),用于文字轉(zhuǎn)語(yǔ)音的功能,它可以將文本轉(zhuǎn)換為語(yǔ)音,并使用不同的音頻引擎進(jìn)行輸出,本文就來(lái)詳細(xì)的介紹一下用法,具有一定的參考價(jià)值,感興趣的可以了解一下2023-08-08安裝pyinstaller遇到的各種問(wèn)題(小結(jié))
這篇文章主要介紹了安裝pyinstaller遇到的各種問(wèn)題(小結(jié)),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11Python合并多個(gè)Excel數(shù)據(jù)的方法
這篇文章主要介紹了Python合并多個(gè)Excel數(shù)據(jù)的方法也就是說(shuō)將多個(gè)excel中的數(shù)據(jù)合并到另一個(gè)表中,本文通過(guò)實(shí)例代碼相結(jié)合的形式給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2018-07-07