将 notrack.ai 的内部 /api/dispatch 端点封装为 OpenAI 标准 API,让任何兼容 OpenAI 的客户端(NextChat、LobeChat、OpenWebUI、openai-python、LangChain、curl 等)都能直接使用 NoTrack,无需任何修改。
- 🔄 完全兼容 OpenAI API —
/v1/chat/completions、/v1/models、/v1/responses - 📡 流式 + 非流式 — 支持
stream: true的 SSE 流式响应 - 🧠 对话记忆 — 通过
chat_id实现 NoTrack 服务端记忆,绕过 4000 字符限制 - 🍪 自动获取 Cookie — 无需手动抓包,启动时自动获取匿名
uid - ✂️ 智能截断 — 长对话自动截断,优先保留系统提示 + 最新消息 + 最近历史
- 🛠️ 工具调用 — 支持 OpenAI function calling(6 种格式解析)
- 📊 监控仪表盘 — 实时 KPI、请求日志、Prometheus 指标(Deno 版)
- 🔑 客户端管理 — 逐客户端 API Key + 速率限制(Deno 版)
- 📝 会话持久化 — 服务端存储对话历史(Deno 版)
- 🐳 Docker 部署 — 两版均支持 Docker
| 特性 | Deno 版 | Python 版 |
|---|---|---|
| 运行时 | Deno 2.x | Python 3.10+ |
| 依赖 | 零依赖(纯标准库) | aiohttp |
| 监控仪表盘 | ✅ 12 个标签页 | ❌ |
| 客户端管理 | ✅ CRUD + 限流 | ❌ |
| 会话持久化 | ✅ | ❌ |
| 工具调用 | ✅ 6 种格式 | ❌ |
| JSON 修复 | ✅ | ❌ |
| Cookie 自动获取 | ✅ | ❌ |
| 智能截断 | ✅ | ❌ |
| Docker | ✅ | ✅ |
| 适合场景 | 生产部署 | 轻量使用 / 二次开发 |
推荐:功能完整性选 Deno 版,简洁轻量选 Python 版。
cd deno
# 1. 安装 Deno
curl -fsSL https://deno.land/install.sh | sh
# 2. 配置(可选 — 不配也能用,会自动获取 cookie)
cp .env.example .env
# 编辑 .env 填写 NOTRACK_COOKIES(可选)
# 3. 启动
deno task start
# 4. 测试
curl http://localhost:8080/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{"model":"notrack-c","messages":[{"role":"user","content":"你好"}]}'cd python
# 1. 安装依赖
pip install aiohttp
# 2. 配置(可选)
cp .env.example .env
# 3. 启动
python3 main.py
# 4. 测试
python3 test.py# Deno 版
cd deno
docker build -t notrack-proxy .
docker run -d -p 8080:8080 --env-file .env notrack-proxy
# Python 版
cd python
docker build -t notrack-proxy-py .
docker run -d -p 8080:8080 --env-file .env notrack-proxy-pycurl http://localhost:8080/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "notrack-c",
"messages": [{"role": "user", "content": "用一句话介绍你自己"}]
}'curl -N http://localhost:8080/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "notrack-c",
"stream": true,
"messages": [{"role": "user", "content": "从1数到10"}]
}'NoTrack 支持服务端记忆。第一次请求返回 chat_id,之后带上即可:
# 第 1 轮
curl http://localhost:8080/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{"model":"notrack-c","messages":[{"role":"user","content":"我叫张三"}]}'
# 响应: {"choices":[...], "notrack": {"chat_id": "abc-123"}}
# 第 2 轮 — 只发最新消息 + chat_id
curl http://localhost:8080/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "notrack-c",
"messages": [{"role": "user", "content": "我叫什么?"}],
"notrack_chat_id": "abc-123"
}'
# 响应: "你叫张三"(NoTrack 服务端记住了上下文)from openai import OpenAI
client = OpenAI(
base_url="http://localhost:8080/v1",
api_key="any-string", # 未设 API_KEY 则任意
)
resp = client.chat.completions.create(
model="notrack-c",
messages=[{"role": "user", "content": "你好"}],
)
print(resp.choices[0].message.content)messages = [
{"role": "system", "content": "你是一个温柔的助手"},
{"role": "user", "content": "你好"},
{"role": "assistant", "content": "你好呀!"},
{"role": "user", "content": "我刚才说了什么?"},
]
resp = client.chat.completions.create(
model="notrack-c",
messages=messages,
)
# 代理自动拼接历史 + 智能截断(超过 3800 字符时丢弃最旧消息)| 变量 | 默认值 | 说明 |
|---|---|---|
NOTRACK_COOKIES |
空 | Cookie 头。留空则自动获取 |
AUTO_FETCH_COOKIES |
1 |
自动获取匿名 cookie(仅 Deno 版) |
PORT |
8080 |
监听端口 |
API_KEY |
空 | Bearer Token 鉴权。留空则开放 |
UPSTREAM_BASE |
https://notrack.ai |
上游地址 |
DEFAULT_MODEL |
notrack-c |
默认模型 |
MAX_INPUT_CHARS |
3800 |
user_input 最大字符数(NoTrack 上限 4000) |
UPSTREAM_TIMEOUT_MS |
60000 |
上游请求超时(毫秒) |
MAX_TURNS |
6 |
NoTrack dispatch max_turns |
PERSONA |
normal |
NoTrack dispatch persona |
MODE |
usual |
NoTrack dispatch mode |
DEBUG |
0 |
调试日志 |
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /health |
服务健康 + 上游可达性 |
| GET | /v1/models |
OpenAI 标准模型列表 |
| GET | /v1/models/:id |
单个模型详情 |
| POST | /v1/chat/completions |
聊天补全(流式 + 非流式) |
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | / |
实时监控仪表盘(HTML) |
| POST | /v1/responses |
OpenAI Responses API |
| POST | /v1/embeddings |
伪嵌入(SHA-256) |
| POST | /v1/images/generations |
SVG 占位图 |
| POST | /v1/moderations |
内容审核 |
| GET | /stats |
JSON 指标 |
| GET | /metrics |
Prometheus 指标 |
| GET | /admin/logs |
请求日志 |
| GET | /admin/config |
运行时配置 |
| PATCH | /admin/config |
热重载 Cookie |
| GET/POST/DELETE | /admin/clients |
客户端 CRUD |
| GET/POST/DELETE | /admin/presets |
服务端预设 |
| GET/POST/DELETE | /v1/chat/sessions |
会话管理 |
| GET | /admin/export |
导出备份 |
| POST | /admin/import |
导入备份 |
NoTrack 的 user_input 限制 4000 字符。长对话拼接后超限会报 400 错误。
代理自动截断对话历史,按优先级保留:
- 系统消息 — 角色设定始终保留
- 最新用户消息 — 当前问题完整保留
- 最近的对话 — 从新到旧依次保留
- 最旧的消息 — 优先丢弃
用 notrack_chat_id 让 NoTrack 服务端记住对话,每次只发最新消息,完全绕过 4000 限制:
# 第 1 轮 → 拿到 chat_id
# 第 2 轮+ → 只发最新消息 + notrack_chat_id需要 Cookie 才能生效。Deno 版默认自动获取,Python 版需手动配置。
NoTrack 是免登录的匿名服务。代理启动时自动访问 notrack.ai 获取匿名 uid cookie:
启动 → GET notrack.ai → 服务器返回 Set-Cookie: uid=xxx → 自动使用
- 无需手动抓包
- Cookie 过期时自动重新获取
- 设
AUTO_FETCH_COOKIES=0可禁用
- 浏览器打开 notrack.ai
- F12 → Network → 点击任意
/api/请求 - 复制请求头中的
cookie:值 - 填入
.env文件:NOTRACK_COOKIES="si_usr_id=xxx; uid=xxx"
github-code/
├── README.md ← 本文件
├── LICENSE ← MIT
├── .gitignore
│
├── deno/ ← Deno 版(功能完整)
│ ├── main.ts ← 主程序入口
│ ├── auth.ts ← 客户端鉴权 + 限流
│ ├── compat.ts ← OpenAI 兼容接口
│ ├── dashboard.ts ← 监控仪表盘
│ ├── jsonrepair.ts ← JSON 修复
│ ├── logging.ts ← 请求日志
│ ├── metrics.ts ← Prometheus 指标
│ ├── sessions.ts ← 会话持久化
│ ├── tokenizer.ts ← Token 估算
│ ├── tools.ts ← 工具调用
│ ├── cookie-refresh.ts ← Cookie 刷新助手
│ ├── deno.json ← Deno 配置
│ ├── Dockerfile
│ ├── docker-compose.yml
│ ├── prometheus.yml
│ ├── .env.example
│ └── scripts/
│ ├── smoke.ts ← 冒烟测试
│ └── curl-test.sh ← 手动测试
│
└── python/ ← Python 版(轻量)
├── main.py ← 主程序(单文件)
├── test.py ← 测试脚本
├── requirements.txt
├── Dockerfile
└── .env.example
| 参数 | 支持 | 说明 |
|---|---|---|
model |
✅ | notrack-c / C / notrack |
messages |
✅ | system / user / assistant / tool |
stream |
✅ | SSE 流式 |
temperature |
✅ | 提示注入 |
max_tokens |
✅ | 提示注入 |
top_p |
✅ | 提示注入 |
tools |
✅ | 函数调用(仅 Deno 版) |
tool_choice |
✅ | auto / required / 指定函数 |
response_format |
✅ | json_object / json_schema(仅 Deno 版) |
stop |
✅ | 停止序列 |
n |
✅ | 多项选择(并行,上限 4) |
seed |
✅ | 确定性提示 |
frequency_penalty |
✅ | 提示注入 |
presence_penalty |
✅ | 提示注入 |
stream_options |
✅ | include_usage |
timeout |
✅ | 每请求超时(秒) |
user |
✅ | 审计日志 |
notrack_chat_id |
✅ | NoTrack 会话 ID |
notrack_session_id |
✅ | 代理会话 ID(仅 Deno 版) |
| NoTrack 事件 | OpenAI 输出 |
|---|---|
chat_meta |
捕获 chat_id |
delta |
chat.completion.chunk delta.content |
message |
非流式完整内容 |
done |
finish_reason: stop + [DONE] |
启动后访问 http://localhost:8080/ 查看:
- 概览 — KPI 卡片 + sparkline 折线图 + 延迟直方图 + 模型分布甜甜圈图
- 上游 — notrack.ai 可达性 + 延迟分位数
- 请求日志 — 实时请求记录
- 客户端 — API Key 管理 + 速率限制
- 会话 — 对话历史 + Markdown 渲染
- Playground — 交互式 API 测试器 + 11 个预设模板
- 配置 — 运行时配置 + Cookie 热重载 + 备份导入导出
- Prometheus — 原始指标文本
能。 聊天功能不依赖 Cookie。但 chat_id 记忆需要 Cookie。
- Deno 版:默认自动获取,无需配置
- Python 版:需手动配置
NOTRACK_COOKIES
代理已内置智能截断(默认 3800 字符),不会报错。如需完全保留记忆,使用 notrack_chat_id。
将 API Base URL 设置为 http://your-server:8080/v1,API Key 任意填写(未设 API_KEY 时)。
NoTrack 的 uid 有效期 1 年。Deno 版在遇到 401 时会自动重新获取。