Python使用Flask结合DeepSeek开发

news/2025/2/18 23:19:00/

一、背景

        我之前关于DeepSeek使用ollama部署的文章大家可以把DeepSeek大模型部署起来。那么ollama还提供了可以调用对应部署模型的API接口。我们可以基于这些接口,做自己的二次开发。使用python+flask+ollama就可以进行模型对话调用。并且前端采用SSE的技术,后端向前端推送推理结果进行展示,可以实现属于自己的大模型对话产品。

二、代码实现

1、ollama运行deepseek-r1:1.5b模型

docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollamadocker exec -it ollama ollama run deepseek-r1:1.5b

2、python+flask代码

python">import jsonfrom flask import Flask, request, Response
from ollama import Clientapp = 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:# 调用ollama客户端,传入模型名称、提问信息response_generator = ollama_client.generate(model_name, prompt=question, stream=True)for part in response_generator:response_text = part.response# 按照 SSE 规范格式化数据data = f"data: {json.dumps({'response': response_text})}\n\n"print(data)yield dataexcept Exception as e:error_data = f"data: {json.dumps({'error': str(e)})}\n\n"yield error_data# 接收问题, 调用模型, 使用SSE推送推理结果给前端question = request.args.get('question')resp = Response(generate(), mimetype='text/event-stream')# 设置响应头resp.headers['Cache-Control'] = 'no-cache'resp.headers['Connection'] = 'keep-alive'resp.headers['Access-Control-Allow-Origin'] = '*'return respif __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、运行结果

        页面虽然不是很美观,但是一个基本原理的demo已经搞定。剩下的就是优化界面、优化链接异常等相关逻辑。

5、SSE默认不支持POST请求

        SSE默认不支持POST请求,可以找前端的一些npm包有人进行了封装,可以发送POST请求。以上的实例为了方便采用了GET请求

三、总结

        有了ollama就行docker服务一样,提供了API接口,部署的模型就是类似docker已经运行的容器。 通过ollama接口,可以调用运行的模型的各种能力!


http://www.ppmy.cn/news/1573210.html

相关文章

使用PHP爬虫获取1688商品分类:实战案例指南

在电商领域&#xff0c;商品分类信息是商家进行市场调研、选品分析和竞争情报收集的重要基础。1688作为国内领先的B2B电商平台&#xff0c;提供了丰富且详细的商品分类数据。通过PHP爬虫技术&#xff0c;我们可以高效地获取这些分类信息&#xff0c;为商业决策提供有力支持。 …

基于Flask的艺恩影片票房分析系统的设计与实现

【Flask】基于Flask的艺恩影片票房分析系统的设计与实现&#xff08;完整系统源码开发笔记详细部署教程&#xff09;✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 该系统利用Python编程语言进行后端开发&#xff0c;结合Echarts进行数据的可视化展示&a…

C#+SqlSugar实现主从库读写分离

在使用 **SqlSugar** 进行分库操作时&#xff0c;可以通过配置多个数据库连接&#xff0c;并根据业务逻辑动态切换数据库。以下是一个完整的分库示例&#xff0c;展示如何实现分库功能。 --- ### **1. 安装 NuGet 包** 安装 SqlSugarCore&#xff1a; bash dotnet add packag…

deepseek部署在本地详细教程

最近&#xff0c;DeepSeek爆火&#xff0c;先进的算法、卓越的能力&#xff0c;表现出众&#xff0c;其凭一己之力推动国内Ai大模型跨越式发展。作为一款现象级的Ai产品&#xff0c;用户量暴增&#xff0c;最近服务器又被攻击&#xff0c;使用DeepSeek&#xff0c;经常出现服务…

Web项目测试专题(七)安全性测试

概述&#xff1a; 安全性测试旨在确保Web应用在设计和实现过程中能够抵御各种安全威胁&#xff0c;保护用户数据和系统资源。 步骤&#xff1a; 身份验证和授权&#xff1a;测试用户登录、权限管理和会话管理机制&#xff0c;确保只有授权用户能够访问特定资源。 数据加密…

【k8s应用管理】kubernetes 安全机制

文章目录 Kubernetes 安全机制安全机制概述认证&#xff08;Authentication&#xff09;认证方式需要认证的访问类型安全性说明证书颁发kubeconfig 文件Service Account&#xff08;SA&#xff09;1. 核心概念2. SA 组成3. Pod 挂载 SA Secret 与 SA 的关系1. Secret 类型2. 查…

vue2.x与vue3.x生命周期的比较

vue2.x 生命周期图示&#xff1a; new Vue() | v Init Events & Lifecycle | v beforeCreate | v created | v beforeMount | v mounted | v beforeUpdate (when data changes) | v updated | v beforeDestroy (when vm.…

【Elasticsearch】标准化器(Normalizers)

Elasticsearch 的标准化器&#xff08;Normalizers&#xff09;是一种特殊的分析器&#xff0c;用于对keyword类型字段的文本进行统一的格式化处理。与普通分析器不同&#xff0c;标准化器只能产生单个标记&#xff08;token&#xff09;&#xff0c;因此它不包含分词器&#x…