Python使用Flask结合DeepSeek开发(实现代码)

 更新时间:2025年02月15日 13:45:57   作者:程序员Rocky  
文章介绍了如何使用ollama部署DeepSeek大模型,并通过Python Flask和SSE技术实现一个简单的对话应用,代码实现了模型的调用和结果展示,并讨论了SSE不支持POST请求的问题及解决方案,感兴趣的朋友一起看看吧

一、背景

        我之前关于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/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:
            # 调用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 data
        except 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 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、运行结果

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

5、SSE默认不支持POST请求

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

三、总结

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

到此这篇关于Python使用Flask结合DeepSeek开发的文章就介绍到这了,更多相关Python DeepSeek开发内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 通过Python把学姐照片做成拼图游戏

    通过Python把学姐照片做成拼图游戏

    马上就到毕业季了,你心中的那个学姐,你真的放下了吗?本文将用pygame为你的学姐,定制开发一个拼图游戏,感兴趣的快跟随小编一起学习一下
    2022-02-02
  • Python操作csv文件实例详解

    Python操作csv文件实例详解

    这篇文章主要为大家详细介绍了Python操作csv文件的实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • python实现文字转语音的项目实践

    python实现文字转语音的项目实践

    pyttsx3是一个Python库,用于文字转语音的功能,它可以将文本转换为语音,并使用不同的音频引擎进行输出,本文就来详细的介绍一下用法,具有一定的参考价值,感兴趣的可以了解一下
    2023-08-08
  • PyCharm+Miniconda3安装配置教程详解

    PyCharm+Miniconda3安装配置教程详解

    这篇文章主要介绍了PyCharm+Miniconda3安装配置教程详解,需要的朋友可以参考下
    2021-02-02
  • 安装pyinstaller遇到的各种问题(小结)

    安装pyinstaller遇到的各种问题(小结)

    这篇文章主要介绍了安装pyinstaller遇到的各种问题(小结),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • python opencv之SIFT算法示例

    python opencv之SIFT算法示例

    这篇文章主要介绍了python opencv之SIFT算法示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-02-02
  • python爬虫 Pyppeteer使用方法解析

    python爬虫 Pyppeteer使用方法解析

    这篇文章主要介绍了python爬虫 Pyppeteer使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • python去除文件中空格、Tab及回车的方法

    python去除文件中空格、Tab及回车的方法

    这篇文章主要介绍了python去除文件中空格、Tab及回车的方法,涉及Python针对文件与字符串操作的相关技巧,需要的朋友可以参考下
    2016-04-04
  • Python模块汇总(常用第三方库)

    Python模块汇总(常用第三方库)

    计算机在开发过程中,代码越写越多,也就越难以维护,所以为了编写可维护的代码,我们会把函数进行分组,放在不同的文件里。在python里,一个.py文件就是一个模块
    2019-10-10
  • Python合并多个Excel数据的方法

    Python合并多个Excel数据的方法

    这篇文章主要介绍了Python合并多个Excel数据的方法也就是说将多个excel中的数据合并到另一个表中,本文通过实例代码相结合的形式给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友参考下吧
    2018-07-07

最新评论