Bootstrap

Python从零构建macOS状态栏应用(仿ollama)并集成AI同款流式聊天 API 服务(含打包为独立应用)

在本教程中,我们将一步步构建一个 macOS 状态栏应用程序,并集成一个 Flask 服务器,提供流式响应的 API 服务。
如果你手中正好持有一台 MacBook Pro,又怀揣着搭建 AI 聊天服务的想法,却不知从何处迈出第一步,那么这篇文章绝对是你的及时雨。
最终,我们将实现以下功能:

  1. 在 macOS 状态栏显示应用程序图标。
  2. 点击菜单项触发操作。
  3. 集成 Flask 服务器,提供流式响应的 API。

在这里插入图片描述

1.准备工作

1.1 安装依赖

首先,确保你已经安装了以下工具和库:

  • Python 3.x
  • rumps:用于创建 macOS 状态栏应用程序。
  • Flask:用于创建 API 服务器。

可以通过以下命令安装依赖:

pip install rumps flask

1.2 创建项目目录

创建一个项目目录,并初始化文件结构:

my_app/
├── ai_server.iconset/  # 存放应用程序图标
├── app.py              # 状态栏应用程序主文件
└── server.py           # Flask 服务器文件

2、创建 Flask 服务器

2.1 编写 server.py

在 server.py 中,我们实现一个简单的 Flask 服务器,提供流式响应的 API。
主要功能:
1、API 路由:

  • /chat:处理 POST 请求,返回流式响应。
  • /:根路由,返回欢迎信息。

2、流式响应:

  • 使用 Server-Sent Events (SSE) 逐步返回数据,模拟聊天生成器。

3、多线程支持:

  • 通过多线程运行 Flask 服务器,避免阻塞主线程。
from flask import Flask, Response, request
import time
import threading


class ChatServer:
    def __init__(self, host='127.0.0.1', port=5000):
        self.host = host
        self.port = port
        self.app = Flask(__name__)
        self._setup_routes()

    def _setup_routes(self):
        """设置 Flask 路由"""
        @self.app.route('/chat', methods=['POST'])
        def chat():
            message = request.json.get('message', '')
            return Response(self
;