Files
notion-2api/README.md
Chinese-tingfeng bc76dd6853 Update README.md
2025-10-13 02:19:35 +08:00

340 lines
9.8 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 🚀 notion-2api: 将 Notion AI 转换为私有 OpenAI API
![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)
![Stars](https://img.shields.io/github/stars/lzA6/notion-2api?style=social)
![Issues](https://img.shields.io/github/issues/lzA6/notion-2api)
![Forks](https://img.shields.io/github/forks/lzA6/notion-2api)
> "我们并非在创造工具,而是在延伸自我。每一次代码的敲击,都是对世界的一次温柔的重塑。" —— lzA6 (AI 构想)
欢迎来到 `notion-2api` 的世界!这是一个能将你强大的 Notion AI 体验,无缝转换为兼容 OpenAI 格式的 API 服务的神奇项目。这意味着,你可以将 Notion AI 作为后端,驱动任何支持 OpenAI API 的应用程序、脚本或服务。
**English Readme Coming Soon!**
---
## 📋 目录
- [✨ 项目亮点](#-项目亮点)
- [📂 项目结构](#-项目结构)
- [🤔 工作原理](#-工作原理)
- [🛠️ 技术栈](#-技术栈)
- [📖 使用教程](#-使用教程)
- [🔗 一键部署](#-一键部署-规划中)
- [🧠 源码解析](#-源码解析)
- [📊 项目评估](#-项目评估)
- [🗺️ 未来规划](#-未来规划)
- [🤖 AI 开发者指南](#-ai-开发者指南)
- [💖 贡献指南](#-贡献指南)
---
## ✨ 项目亮点
- **无缝转换**: 将 Notion AI 的非官方接口完美伪装成标准的 OpenAI `v1/chat/completions` 接口
- **多模型支持**: 支持 Notion AI 后端的所有可用模型(以 Notion 实际提供为准)
- **流式响应**: 完全支持 `stream=true`,提供流畅的打字机体验
- **Docker 化部署**: 一行命令轻松启动,告别繁琐环境配置
- **高性能**: 基于 FastAPI 和 Uvicorn提供稳定高效的异步处理能力
- **智能反爬**: 内置 `cloudscraper`,绕过 Cloudflare 防护,提高请求成功率
- **灵活配置**: 通过简单的 `.env` 文件管理所有凭证和配置
---
## 📂 项目结构
```
notion-2api/
├── .env # 环境配置文件(生产环境)
├── .env.example # 环境配置模板
├── Dockerfile # Docker 镜像构建文件
├── docker-compose.yml # Docker Compose 编排文件
├── main.py # FastAPI 应用主入口
├── nginx.conf # Nginx 反向代理配置
├── requirements.txt # Python 依赖列表
└── app/
├── core/
│ ├── __init__.py
│ └── config.py # Pydantic 配置模型
├── providers/
│ ├── __init__.py
│ ├── base_provider.py # 抽象基类
│ └── notion_provider.py # Notion API 交互核心
└── utils/
└── sse_utils.py # Server-Sent Events 工具
```
---
## 🤔 工作原理
`notion-2api` 充当了 OpenAI API 和 Notion AI 之间的翻译官,将两种不同的协议进行无缝转换。
### 架构流程图
```mermaid
graph TD
A[客户端应用] --> B[Nginx 反向代理]
B --> C[FastAPI 应用]
C --> D[认证中间件]
D --> E[Notion Provider]
E --> F[Cloudscraper]
F --> G[Notion AI API]
G --> H[NDJSON 流解析]
H --> I[SSE 格式转换]
I --> C
C --> B
B --> A
```
### 数据流详解
1. **请求接收**: 客户端发送标准的 OpenAI API 格式请求
2. **协议转换**: FastAPI 将请求转换为 Notion AI 能理解的格式
3. **会话管理**: 创建 Notion 对话线程并维持会话状态
4. **流式处理**: 实时解析 Notion 返回的 NDJSON 数据流
5. **格式转换**: 将解析后的数据转换为 OpenAI 兼容的 SSE 格式
6. **响应返回**: 通过流式响应将数据实时返回给客户端
---
## 🛠️ 技术栈
| 技术组件 | 版本/类型 | 用途说明 |
|---------|-----------|----------|
| **FastAPI** | 0.104+ | 现代化异步 Web 框架,提供高性能 API 服务 |
| **Uvicorn** | 0.24+ | ASGI 服务器,用于运行 FastAPI 应用 |
| **Cloudscraper** | 最新版 | 绕过 Cloudflare 防护,确保稳定连接 |
| **Pydantic** | 2.0+ | 数据验证和设置管理 |
| **Docker** | 最新版 | 容器化部署和环境隔离 |
| **Nginx** | 最新版 | 反向代理和负载均衡 |
| **Python** | 3.8+ | 主要编程语言 |
---
## 📖 使用教程
### 环境准备
1. **安装 Docker**: 访问 [Docker 官网](https://www.docker.com/get-started) 下载并安装
2. **安装 Git**: 用于克隆代码仓库
### 获取 Notion 凭证
这是最关键的一步,请仔细按照以下步骤操作:
#### 获取 token_v2
1. 登录 [Notion](https://www.notion.so/)
2. 打开浏览器开发者工具 (F12)
3. 切换到 **Application** 标签页
4. 展开 **Cookies****https://www.notion.so**
5. 找到 `token_v2` 项,复制其 **Value**
#### 获取 Space ID 和 User ID
1. 在开发者工具中切换到 **Network** 标签页
2. 在 Notion 中进行任意操作(如点击页面)
3. 找到 `getRecordValues` 或类似请求
4. 查看请求头中的:
- `x-notion-active-user-header`**User ID**
- `x-notion-space-id`**Space ID**
### 配置环境变量
1. **克隆项目**:
```bash
git clone https://github.com/lzA6/notion-2api.git
cd notion-2api
```
2. **创建配置文件**:
```bash
cp .env.example .env
```
3. **编辑 `.env` 文件**:
```env
# 安全配置(可选)
API_MASTER_KEY=your_secret_key_here
# 部署配置
NGINX_PORT=8088
# Notion 凭证(必需)
NOTION_COOKIE="你的token_v2值"
NOTION_SPACE_ID="你的Space ID"
NOTION_USER_ID="你的User ID"
NOTION_USER_NAME="你的名字"
NOTION_USER_EMAIL="your_email@example.com"
```
### 启动服务
```bash
docker-compose up -d --build
```
### 测试 API
```bash
curl http://localhost:8088/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer your_secret_key_here" \
-d '{
"model": "claude-sonnet-4.5",
"messages": [{"role": "user", "content": "你好,请介绍一下你自己"}],
"stream": true
}'
```
如果一切正常,你将看到来自 Notion AI 的流式响应!
---
## 🧠 源码解析
### 核心模块架构
```mermaid
graph TB
A[main.py] --> B[Config Manager]
A --> C[Auth Middleware]
A --> D[Route Handlers]
D --> E[Notion Provider]
E --> F[Session Management]
E --> G[Stream Parser]
E --> H[Response Formatter]
G --> I[NDJSON Parser]
H --> J[SSE Generator]
```
### `main.py` - 应用入口
负责初始化 FastAPI 应用、配置中间件和路由:
```python
@app.post("/v1/chat/completions")
async def chat_completions(
request: ChatCompletionRequest,
auth: bool = Depends(verify_api_key)
):
"""处理聊天补全请求,支持流式和非流式响应"""
```
### `app/core/config.py` - 配置管理
使用 Pydantic 进行类型安全的配置管理:
```python
class Settings(BaseSettings):
"""应用配置模型,自动从环境变量加载"""
API_MASTER_KEY: str = "1"
NGINX_PORT: int = 8088
NOTION_COOKIE: str
NOTION_SPACE_ID: str
NOTION_USER_ID: str
```
### `app/providers/notion_provider.py` - 核心逻辑
实现与 Notion AI 的交互:
- **会话预热**: 初始化时访问 Notion 以获取有效 Cookie
- **线程管理**: 为每个对话创建独立的 Notion 线程
- **流式解析**: 实时解析 Notion 的 NDJSON 响应流
- **数据清洗**: 清理响应中的冗余信息和格式标记
### `app/utils/sse_utils.py` - 流式响应
将数据转换为 Server-Sent Events 格式:
```python
def create_sse_data(data: dict) -> str:
"""将数据转换为 SSE 格式"""
return f"data: {json.dumps(data)}\n\n"
```
---
## 📊 项目评估
### ✅ 已完成功能
- [x] 核心代理功能 - OpenAI API 到 Notion AI 的协议转换
- [x] 完整的流式响应支持
- [x] Docker 容器化部署
- [x] Cloudflare 防护绕过
- [x] 多模型支持Claude、GPT、Gemini
- [x] API 密钥认证
- [x] 环境配置管理
### 🌟 核心优势
1. **生态兼容性**: 无缝接入现有 OpenAI 生态工具
2. **成本效益**: 利用现有 Notion 订阅,无需额外付费
3. **隐私保护**: 私有化部署,数据完全自主控制
4. **技术价值**: 学习现代 Web 开发和 API 设计的优秀范例
### ⚠️ 限制与挑战
1. **API 稳定性**: 依赖 Notion 非官方接口,存在变更风险
2. **凭证维护**: `token_v2` 会过期,需要定期更新
3. **防护对抗**: Cloudflare 策略更新可能导致连接失败
4. **功能局限**: 目前主要支持聊天补全功能
---
## 🗺️ 未来规划
### 🎯 短期目标
- [ ] 支持非流式响应 (`stream=false`)
- [ ] 增强错误处理和用户反馈
- [ ] 改进 token 自动刷新机制
- [ ] 动态模型列表获取
- [ ] 更详细的运行日志
### 💡 长期愿景
- [ ] 多账户负载均衡
- [ ] Function Calling 支持
- [ ] Web 管理界面
- [ ] 插件化架构
- [ ] 使用量统计和限制
---
## 🤖 AI 开发者指南
### 项目理解要点
1. **架构模式**: 这是一个典型的协议转换代理服务
2. **核心技术**: 异步编程、流式处理、反爬虫技术
3. **关键挑战**: 非官方 API 的稳定性和兼容性维护
4. **扩展方向**: 更多 AI 服务的协议转换支持
### 代码贡献建议
- 优先修复稳定性相关问题
- 改进错误处理和用户反馈
- 添加单元测试和集成测试
- 优化文档和示例代码
---
## 💖 贡献指南
我们欢迎各种形式的贡献:
- 🐛 **问题反馈**: 提交 [Issue](https://github.com/lzA6/notion-2api/issues)
- 🔧 **代码贡献**: 创建 [Pull Request](https://github.com/lzA6/notion-2api/pulls)
- 💡 **想法分享**: 参与 [Discussions](https://github.com/lzA6/notion-2api/discussions)
-**项目支持**: 给项目点赞和分享
每一个贡献,无论大小,都是对开源世界的宝贵礼物。
---
**让我们一起,用代码创造更多可能性!** 🚀