Skip to content

zangdale/zero-token

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

zero-token

免 API Token 使用大模型 - 通过浏览器登录方式免费使用 ChatGPT、Claude、Gemini、DeepSeek、千问国际版、千问国内版、豆包、Kimi、智谱清言、Grok、小米 MiMo、Manus 等 AI 模型。

本项目通过已开启远程调试的 Chrome 完成各平台 Web 登录、保存会话,并对外提供 OpenAI 兼容的 HTTP 接口GET /v1/modelsPOST /v1/chat/completions)。

支持的 Web 平台

首句为能力概述;实际已接入、可登录的 Web 站点以下表为准(与 src/cli/login.tsALL_PROVIDER_IDS 一致,当前共 13 个)。登录时把 <id> 传给 pnpm run login -- <id>make login PROVIDER=<id>

平台(常用名) 提供方 id
ChatGPT chatgpt-web
Claude claude-web
Gemini gemini-web
DeepSeek deepseek-web
千问(国际版) qwen-web
千问(国内版) qwen-cn-web
Kimi kimi-web
Grok grok-web
智谱清言(国内) glm-web
智谱清言(国际) glm-intl-web
Perplexity(网页) perplexity-web
豆包 doubao-web
小米 MiMo xiaomimo-web

要求

  • Node.js ≥ 20

  • pnpm安装);本仓库用 packageManager 固定版本,可用 Corepackcorepack enable

  • 本机可运行的 Google Chrome / Chromium(用于登录与部分「聊天走浏览器」路径)

  • 远程调试的 Chrome--remote-debugging-port)。推荐用本仓库脚本启动,会单独指定 user-data-dir(默认 ~/.zero-token/chrome-debug-profile),避免和日常自用的 Chrome 个人资料冲突。macOS 下使用应用包内的可执行文件,比通过 open --args 更稳定。命令示例:

    make chrome-debug
    # 无窗口,仍开 CDP(需扫码/网页登录时不要用无头,改用有界面:make chrome-debug):
    make chrome-debug-headless
    # 与 make 的静默不同:终端会打印使用说明,且 Chrome 的「DevTools listening…」会出现时:
    bash scripts/start-chrome-debug.sh
    # 无头、且终端见说明时:
    CHROME_HEADLESS=1 bash scripts/start-chrome-debug.sh

    make chrome-debug / make chrome-debug-headless 在内部均设置 CHROME_DEBUG_QUIET=1,不刷屏;需要排查时可手动运行脚本。脚本可用 CHROME_DEBUG_PORTCHROME_USER_DATA_DIR 覆盖默认端口与用户目录;无头通过 CHROME_HEADLESS=1make chrome-debug-headless。连接端点用 BROWSER_CDP_URL(默认 http://127.0.0.1:9222)。

    若不用脚本,可手写启动,例如(仅示意,不分离用户目录):

    /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=9222

快速开始

git clone https://github.com/linuxhsj/zero-token.git
cd zero-token
make install
make chrome-debug
make login-all
# 启动服务
make start

已开远程调试的 Chrome 中打开目标站点并登录,然后执行(以 chatgpt-web 为例):

make login PROVIDER=chatgpt-web

凭据默认写入 ~/.zero-token/credentials.json(可用 ZERO_TOKEN_DATA_DIR 改目录)。

启动网关:

make start
# 或指定端口
PORT=3001 make start

健康检查:

make health

不使用 make

Makefile 只是对 pnpm / 脚本的薄封装,可直接用等价命令:

make 用法 等价命令
make install pnpm install
make start PORT=3000 pnpm start(端口可用环境变量 PORT 覆盖,如 PORT=3001 pnpm start
make login PROVIDER=<id> pnpm run login -- <id>
make login-all pnpm run login -- all
make typecheck pnpm run typecheck
make health curl -sS "http://127.0.0.1:${PORT:-3000}/health"(需服务已启动)
make chrome-debug CHROME_DEBUG_QUIET=1 bash scripts/start-chrome-debug.sh(有界面;无终端提示、子进程不打印;可改端口与目录,见下表环境变量。)
make chrome-debug-headless CHROME_DEBUG_QUIET=1 CHROME_HEADLESS=1 bash scripts/start-chrome-debug.sh--headless=new,仍暴露 CDP。直接跑脚本时写 CHROME_HEADLESS=1 可相同效果。)

也可在项目根目录用与脚本相同入口:node --import tsx src/cli/login.ts <id|all>node --import tsx src/server.ts(启动前建议仍通过 pnpm install 安装依赖)。

全平台顺序登录

依次尝试登录全部已支持的 Web 提供方(与上表及 ALL_PROVIDER_IDS 一致,当前共 13 个)。每个站点仍需你在浏览器中完成该站的登录/授权流程;某一站失败会记录错误并继续下一站,结束时会打印成功/失败汇总。

make login-all
# 等价: pnpm run login -- all

Makefile 目标

目标 说明
make / make help 打印帮助
make install pnpm install
make start 启动服务;PORT 默认 3000
make chrome-debug 有界面、带 --remote-debugging-port 的 Chrome(供后续 login),与日常 Chrome 使用独立 user-data-dir
make chrome-debug-headless 无头(--headless=new)、仍暴露 CDP;需人工登录/扫码时请用 make chrome-debug
make login PROVIDER=<id> 运行浏览器登录;<id>src/cli/login.ts 中列出的提供方(如 deepseek-webchatgpt-web
make login-all 按顺序执行全部提供方登录,单站失败不中断
make typecheck tsc --noEmit
make health 请求 http://127.0.0.1:$PORT/health(可设 PORT
make clean 删除 node_modulespnpm-lock.yaml

环境变量(节选)

变量 说明
PORT 网关监听端口,默认 3000
BROWSER_CDP_URL Chrome 调试端点,默认 http://127.0.0.1:9222
CHROME_DEBUG_PORT scripts/start-chrome-debug.sh:远程调试端口,默认 9222;若修改,需与 BROWSER_CDP_URL 的端口一致
CHROME_USER_DATA_DIR 仅调试脚本:Chrome 用户数据目录,默认 ~/.zero-token/chrome-debug-profile
CHROME_DEBUG_QUIET 1true 时脚本不 echo 且 Chrome 的 stdout/stderr 全部丢弃;make chrome-debug / make chrome-debug-headless 会设此值
CHROME_HEADLESS 1true 时脚本为 Chrome 增加 --headless=new(无界面,仍开远程调试;make chrome-debug-headless 会设此值)
ZERO_TOKEN_DATA_DIR 数据目录(含 credentials.json),默认 ~/.zero-token
ZERO_TOKEN_API_KEY 若设置,请求需带 Authorization: Bearer <key>
ZERO_TOKEN_CHAT_VIA_BROWSER chatgpt-web / gemini-web / grok-web:设为 0 时关闭「聊天走真实页面 DOM」路径,仍用 Node 内流式实现

OpenAI 兼容接口

服务默认监听 http://127.0.0.1:3000(可用 PORT 修改)。以下路径与 OpenAI Chat Completions 用法一致,便于用任意支持自定义 baseURL 的客户端接入。

方法 路径 说明
GET /health 健康检查(不要求鉴权)
GET /v1/models 模型列表,返回的 id 即为下方 model 字段可用值
POST /v1/chat/completions 聊天补全,支持流式(SSE)与非流式 JSON

鉴权:若设置了环境变量 ZERO_TOKEN_API_KEY,则请求需带 Authorization: Bearer <与之一致的密钥>,否则返回 401

模型 id:必须为 提供方/模型 形式(与 GET /v1/models 中每条 id 一致),例如 grok-web/grok-2chatgpt-web/gpt-4deepseek-web/deepseek-chat

user 字段(与 OpenAI 相同,可选):对 qwen-cn-web,网关会按同一 user 同一会话复用千问浏览器/接口侧的 session_id(多轮在能解析到 req_id / parent_req 时还会带上续写)。对 doubao-web 会按同一 user 复用豆包返回的 conversation_id(Samantha 多轮)。不填时进程内会落到默认键,多客户端会共享同一条上游会话,建议为每个终端会话设稳定 user id。

非流式stream 省略或 false):

curl -sS "http://127.0.0.1:3000/v1/chat/completions" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $ZERO_TOKEN_API_KEY" \
  -d '{
    "model": "grok-web/grok-2",
    "messages": [{ "role": "user", "content": "你好" }]
  }'

未设置 ZERO_TOKEN_API_KEY 时可去掉 Authorization 行。

流式"stream": true,响应为 SSEdata: {...} 行后接 data: [DONE]):

curl -N -sS "http://127.0.0.1:3000/v1/chat/completions" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $ZERO_TOKEN_API_KEY" \
  -d '{
    "model": "grok-web/grok-2",
    "messages": [{ "role": "user", "content": "你好" }],
    "stream": true
  }'

工具调用(tools:请求体可带与 OpenAI Chat Completions 相同形态的 tools(仅 type: "function"),parameters 为 JSON Schema 对象。网关将工具定义写入对上游网页模型的 tool_json 提示,并把模型在回复中给出的 fenced tool_json 代码块解析为一次工具调用。响应中助手消息为 OpenAI 兼容的 tool_calls(非流式为完整 JSON;流式在结束前输出带 tool_calls 的 delta 与 finish_reason: "tool_calls")。多轮时请在 messages 中依序带上 assistanttool_callsrole: "tool" 的工具结果。tool_choice: "none" 可关闭本次请求的工具。perplexity-web / doubao-web 不注入工具提示。若使用 浏览器内对话 路径(gemini-web / grok 默认的 CDP,且未将 ZERO_TOKEN_CHAT_VIA_BROWSER=0),不支持 tools,需改为纯流式后重试;chatgpt-web 默认走本仓库流式,可配合 tools(仍受各站风控与模型能力限制)。

拉取模型列表

curl -sS "http://127.0.0.1:3000/v1/models" \
  -H "Authorization: Bearer $ZERO_TOKEN_API_KEY" | jq .

在代码里用 OpenAI 官方 SDK 指向本机(将 apiKey 与网关侧 ZERO_TOKEN_API_KEY 对齐;若未设网关密钥可填任意非空字符串,以通过客户端校验。需安装 SDK:pnpm add openai):

import OpenAI from "openai";

const openai = new OpenAI({
  apiKey: process.env.ZERO_TOKEN_API_KEY ?? "unused",
  baseURL: "http://127.0.0.1:3000/v1",
});

const r = await openai.chat.completions.create({
  model: "grok-web/grok-2",
  messages: [{ role: "user", content: "你好" }],
});

其它兼容 OpenAI 的 CLI/应用(如部分 IDE 插件、LiteLLM 等)在配置中把 Base URL 填为 http://127.0.0.1:3000/v1 即可,模型名使用 GET /v1/models 返回的 id

开发

make typecheck
# 等价: pnpm run typecheck

许可

MIT License 发布。上游或自研扩展若再分发,请同时遵守其各自许可证。

About

免 API Token 使用大模型 - 通过浏览器登录方式免费使用 ChatGPT、Claude、Gemini、DeepSeek、千问国际版、千问国内版、豆包、Kimi、智谱清言、Grok、小米 MiMo、Manus 等 AI 模型。

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages