Python使用Flask结合DeepSeek开发

一、背景

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

二、代码实现

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

bash 复制代码
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代码

python 复制代码
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、前端代码

html 复制代码
<!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接口,可以调用运行的模型的各种能力!

相关推荐
亿牛云爬虫专家36 分钟前
Kubernetes下的分布式采集系统设计与实战:趋势监测失效引发的架构进化
分布式·python·架构·kubernetes·爬虫代理·监测·采集
ai小鬼头3 小时前
Ollama+OpenWeb最新版0.42+0.3.35一键安装教程,轻松搞定AI模型部署
后端·架构·github
G皮T3 小时前
【人工智能】ChatGPT、DeepSeek-R1、DeepSeek-V3 辨析
人工智能·chatgpt·llm·大语言模型·deepseek·deepseek-v3·deepseek-r1
萧曵 丶4 小时前
Rust 所有权系统:深入浅出指南
开发语言·后端·rust
产品经理独孤虾4 小时前
人工智能大模型如何助力电商产品经理打造高效的商品工业属性画像
人工智能·机器学习·ai·大模型·产品经理·商品画像·商品工业属性
老任与码4 小时前
Spring AI Alibaba(1)——基本使用
java·人工智能·后端·springaialibaba
蹦蹦跳跳真可爱5895 小时前
Python----OpenCV(图像増强——高通滤波(索贝尔算子、沙尔算子、拉普拉斯算子),图像浮雕与特效处理)
人工智能·python·opencv·计算机视觉
nananaij5 小时前
【Python进阶篇 面向对象程序设计(3) 继承】
开发语言·python·神经网络·pycharm
雷羿 LexChien5 小时前
从 Prompt 管理到人格稳定:探索 Cursor AI 编辑器如何赋能 Prompt 工程与人格风格设计(上)
人工智能·python·llm·编辑器·prompt
华子w9089258595 小时前
基于 SpringBoot+VueJS 的农产品研究报告管理系统设计与实现
vue.js·spring boot·后端