| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
OpenAI/Anthropic-compatible локальный прокси для бесплатных web-аккаунтов GLM/Z.ai, legacy chatglm.cn и Kimi. По духу — как FreeQwenApi / FreeDeepseekAPI, но отдельным проектом и с эмуляцией tool use для AI-агентов.
git clone https://github.com/ForgetMeAI/FreeGLMKimiAPI.git
cd FreeGLMKimiAPI
npm install
cp .env.example .env
npm testЗапуск без реальных токенов, чтобы проверить API-обвязку:
MOCK_PROVIDER=1 PORT=9766 npm startПроверка:
curl http://127.0.0.1:9766/health
curl http://127.0.0.1:9766/v1/models
node scripts/smoke.jsGLM:
Kimi:
Выбор провайдера идёт по имени модели:
По умолчанию:
DEFAULT_PROVIDER=kimi
DEFAULT_MODEL=kimi-k2.5Токены — это секреты уровня пароля. Не коммить auth.json, не публикуй токены и не открывай сервис наружу без API_KEYS.
Создай auth.json рядом с проектом:
{
"accounts": [
{ "id": "zai1", "provider": "glm", "token": "PASTE_ZAI_TOKEN_HERE" },
{ "id": "glm-cn1", "provider": "glm", "backend": "chatglm", "refresh_token": "PASTE_CHATGLM_REFRESH_TOKEN_HERE" },
{ "id": "kimi1", "provider": "kimi", "token": "PASTE_KIMI_TOKEN_HERE" }
]
}И запусти:
npm startМожно указать другой путь:
AUTH_PATH=/path/to/auth.json npm start# Kimi
KIMI_TOKEN=PASTE_KIMI_TOKEN_HERE
# GLM через Z.ai
GLM_BACKEND=zai
GLM_TOKEN=PASTE_ZAI_TOKEN_HERE
# Legacy GLM через chatglm.cn
# GLM_BACKEND=chatglm
# GLM_REFRESH_TOKEN=PASTE_CHATGLM_REFRESH_TOKEN_HEREЕсли API_KEYS задан, admin-запросы тоже требуют HTTP-заголовок авторизации с твоим API key.
# список аккаунтов без секретов
curl http://127.0.0.1:9766/admin/accounts
# добавить Kimi временно, без записи в auth.json
curl -X POST http://127.0.0.1:9766/admin/accounts \
-H 'Content-Type: application/json' \
-d '{"id":"kimi2","provider":"kimi","token":"KIMI_TOKEN_HERE","persist":false}'
# добавить GLM/Z.ai и сохранить в auth.json
curl -X POST http://127.0.0.1:9766/admin/accounts \
-H 'Content-Type: application/json' \
-d '{"id":"zai2","provider":"glm","token":"ZAI_TOKEN_HERE","persist":true}'
# перечитать auth.json
curl -X POST http://127.0.0.1:9766/admin/accounts/reload -d '{}'Это самый простой путь для GLM. Скрипт сам откроет видимый браузер, дождётся логина, вытащит токен и сохранит auth.json.
cd FreeGLMKimiAPI
npm run auth:browser -- ./auth.jsonЧто делать дальше:
Проверка:
ZAI_BROWSER_FALLBACK=1 MODEL=GLM-5.1 npm run smoke:zaiЗапуск сервера через этот профиль:
ZAI_BROWSER_FALLBACK=1 MODEL=GLM-5.1 npm startВажно:
ZAI_BROWSER_ENGINE=cloak \
ZAI_BROWSER_FALLBACK=1 \
ZAI_BROWSER_HEADLESS=0 \
ZAI_BROWSER_HUMANIZE=1 \
MODEL=GLM-5.1 npm run smoke:zaiПолезные переменные:
ZAI_BROWSER_FALLBACK=1
ZAI_BROWSER_ENGINE=puppeteer # или cloak
ZAI_BROWSER_PROFILE_DIR=~/.free-glm-kimi-api/zai-browser-profile
ZAI_BROWSER_PROXY=http://user:pass@host:port
ZAI_BROWSER_LOCALE=ru-RU
ZAI_BROWSER_TIMEZONE=Europe/SamaraЕсли браузерный скрипт не сработал, можно скопировать токен руками.
Простой вариант через Application:
{
"accounts": [
{ "id": "zai1", "provider": "glm", "token": "PASTE_ZAI_TOKEN_HERE" }
]
}Если Z.ai требует captcha/anti-bot, одного JWT может быть мало. Тогда проще вернуться к browser fallback. Для диагностики можно добавить cookie и captcha-параметр:
{
"accounts": [
{
"id": "zai1",
"provider": "glm",
"token": "PASTE_ZAI_TOKEN_HERE",
"cookie": "cdn_sec_tc=...; acw_tc=...; ssxmod_itna=...; token=...",
"captcha_verify_param": "PASTE_BASE64_CAPTCHA_VERIFY_PARAM_HERE"
}
]
}Это отдельный старый backend. Токен от chat.z.ai сюда не подходит.
Нужно получить именно chatglm.cn refresh token:
Формат:
{
"accounts": [
{
"id": "glm-cn1",
"provider": "glm",
"backend": "chatglm",
"refresh_token": "PASTE_CHATGLM_REFRESH_TOKEN_HERE"
}
]
}Запуск:
GLM_BACKEND=chatglm npm startПроверка:
MODEL=glm-5 node scripts/smoke.jsЕсли видишь 40102 unauthorized user, значит токен не от chatglm.cn, протух или скопирован не полностью.
Kimi использует Bearer/access JWT из kimi.com.
Самый надёжный способ:
Формат:
{
"accounts": [
{ "id": "kimi1", "provider": "kimi", "token": "PASTE_KIMI_BEARER_TOKEN_HERE" }
]
}Или через .env:
KIMI_TOKEN=PASTE_KIMI_BEARER_TOKEN_HEREЕсли получил 401 / auth.token.invalid, обнови страницу Kimi, отправь новое сообщение и скопируй свежий Bearer.
Чтобы README не превращался в простыню, примеры вынесены отдельно:
Там есть:
Клиент отправляет обычные OpenAI tools. Если web-модель отвечает протокольным текстом, прокси превращает его в OpenAI-compatible tool_calls:
{
"choices": [
{
"message": {
"role": "assistant",
"content": null,
"tool_calls": []
},
"finish_reason": "tool_calls"
}
]
}Локальные protocol-level agent smoke-тесты без реальных токенов:
MOCK_PROVIDER=1 PORT=9766 npm start
npm run agent:allОтдельно:
npm run agent:hermes
npm run agent:claude
npm run agent:opencode
npm run agent:openclawnpm test
node scripts/doctor.js
curl http://127.0.0.1:9766/health
curl http://127.0.0.1:9766/admin/accountsРеальный smoke Z.ai:
ZAI_BROWSER_FALLBACK=1 MODEL=GLM-5.1 npm run smoke:zaiИмпорт successful browser curl для диагностики Z.ai:
pbpaste | node scripts/import_zai_curl.js /dev/stdin /tmp/freeglm-auth.json
AUTH_PATH=/tmp/freeglm-auth.json MODEL=GLM-5.1 npm run smoke:zaiСкрипты печатают только статус и наличие полей, сами секреты не выводят.
| Back | FazBrowse Home | New Git URL |