Python使用Flask結(jié)合DeepSeek開發(fā)(實(shí)現(xiàn)代碼)
一、背景
我之前關(guān)于DeepSeek使用ollama部署的文章大家可以把DeepSeek大模型部署起來。那么ollama還提供了可以調(diào)用對應(yīng)部署模型的API接口。我們可以基于這些接口,做自己的二次開發(fā)。使用python+flask+ollama就可以進(jìn)行模型對話調(diào)用。并且前端采用SSE的技術(shù),后端向前端推送推理結(jié)果進(jìn)行展示,可以實(shí)現(xiàn)屬于自己的大模型對話產(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客戶端,傳入模型名稱、提問信息
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、運(yùn)行結(jié)果
頁面雖然不是很美觀,但是一個(gè)基本原理的demo已經(jīng)搞定。剩下的就是優(yōu)化界面、優(yōu)化鏈接異常等相關(guān)邏輯。

5、SSE默認(rèn)不支持POST請求
SSE默認(rèn)不支持POST請求,可以找前端的一些npm包有人進(jìn)行了封裝,可以發(fā)送POST請求。以上的實(shí)例為了方便采用了GET請求
三、總結(jié)
有了ollama就行docker服務(wù)一樣,提供了API接口,部署的模型就是類似docker已經(jīng)運(yùn)行的容器。 通過ollama接口,可以調(diào)用運(yùn)行的模型的各種能力!
到此這篇關(guān)于Python使用Flask結(jié)合DeepSeek開發(fā)的文章就介紹到這了,更多相關(guān)Python DeepSeek開發(fā)內(nèi)容請搜索腳本之家以前的文章或繼續(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)文章
虛擬環(huán)境及venv和virtualenv的區(qū)別說明
這篇文章主要介紹了虛擬環(huán)境及venv和virtualenv的區(qū)別說明,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-02-02
Python3實(shí)現(xiàn)個(gè)位數(shù)字和十位數(shù)字對調(diào), 其乘積不變
這篇文章主要介紹了Python3實(shí)現(xiàn)個(gè)位數(shù)字和十位數(shù)字對調(diào), 其乘積不變,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-05-05
基于python(urlparse)模板的使用方法總結(jié)
下面小編就為大家?guī)硪黄趐ython(urlparse)模板的使用方法總結(jié)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-10-10
scrapy與selenium結(jié)合爬取數(shù)據(jù)(爬取動態(tài)網(wǎng)站)的示例代碼
這篇文章主要介紹了scrapy與selenium結(jié)合爬取數(shù)據(jù)的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
Python?Pandas學(xué)習(xí)之series的二元運(yùn)算詳解
二元運(yùn)算是指由兩個(gè)元素形成第三個(gè)元素的一種規(guī)則,例如數(shù)的加法及乘法;更一般地,由兩個(gè)集合形成第三個(gè)集合的產(chǎn)生方法或構(gòu)成規(guī)則稱為二次運(yùn)算。本文將詳細(xì)講講Pandas中series的二元運(yùn)算,感興趣的可以了解一下2022-09-09

