Локальный OpenAI-compatible API proxy для DeepSeek Web Chat
Быстрый старт • Возможности • Примеры • Модели • Endpoints • Open WebUI
FreeDeepseekAPI поднимает локальный API-сервер для DeepSeek Web Chat (chat.deepseek.com) и позволяет подключать DeepSeek Web к Open WebUI, LiteLLM, Hermes, Claude Code, OpenAI SDK-style клиентам и другим OpenAI-compatible инструментам.
Проект работает через ваш обычный залогиненный аккаунт DeepSeek в отдельном Chrome-профиле. Локальный сервер принимает API-запросы, а дальше сам ходит в DeepSeek Web через сохранённую browser-сессию.
⚠️ Это экспериментальный web-chat proxy. DeepSeek может менять внутренний Web API без предупреждения. Для production-кейсов надёжнее официальный платный API DeepSeek.
ForgetMeAI: https://t.me/forgetmeai
- Что это даёт
- Возможности
- Быстрый старт
- Проверка работы
- Примеры запросов
- Модели
- Endpoints
- Open WebUI
- Обновить логин
- Статус проекта
- Использовать DeepSeek Web как локальный API endpoint.
- Подключать DeepSeek к Open WebUI и другим OpenAI-compatible клиентам.
- Получать обычные JSON-ответы или streaming SSE.
- Использовать reasoning-модели с отдельным
reasoning_content. - Работать с Anthropic Messages API shim для Claude Code / Anthropic SDK.
- Использовать OpenAI Responses API shim для новых OpenAI/Codex-style клиентов.
- Держать отдельные web-сессии для разных агентов/users.
- OpenAI-compatible API:
POST /v1/chat/completions - Anthropic-compatible shim:
POST /v1/messages - OpenAI Responses shim:
POST /v1/responses - Streaming: SSE chunks и обычные non-stream JSON-ответы
- Reasoning output: отдельный
reasoning_contentдля thinking-моделей - Tool calling: парсинг OpenAI tools, Anthropic tools и Responses function tools
- Model capabilities:
GET /v1/model-capabilitiesс alias → real web mode - Agent sessions: отдельная DeepSeek-сессия на
user/ agent id - Session recovery: авто-сброс устаревших chains/sessions
- Zero dependencies: Node.js 18+, без npm-зависимостей
git clone https://github.com/ForgetMeAI/FreeDeepseekAPI.git
cd FreeDeepseekAPI
npm run auth
npm startnpm run auth открывает меню авторизации:
- выберите пункт
1; - войдите в DeepSeek в отдельном Chrome-профиле;
- отправьте короткое сообщение вроде
ok; - вернитесь в терминал и нажмите Enter.
npm start показывает меню запуска:
1— авторизоваться / обновить DeepSeek login2— показать модели и статусы3— запустить proxy4— выйти
Для headless/CI-запуска без меню:
NON_INTERACTIVE=1 npm start
# или
SKIP_ACCOUNT_MENU=1 npm startПо умолчанию сервер слушает:
http://localhost:9655
curl http://localhost:9655/
curl http://localhost:9655/v1/models
curl http://localhost:9655/v1/model-capabilitiesЕсли всё ок, /health вернёт статус сервера, список поддерживаемых aliases и config_ready: true.
curl -X POST http://localhost:9655/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek-chat",
"messages": [{"role": "user", "content": "Привет! Ответь одной фразой."}],
"stream": false
}'curl -X POST http://localhost:9655/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek-reasoner",
"messages": [{"role": "user", "content": "Реши коротко: почему небо голубое?"}],
"stream": false
}'Для reasoning-моделей API отдаёт цепочку размышления отдельно от финального ответа:
- non-stream:
choices[0].message.reasoning_content - stream:
choices[0].delta.reasoning_content - usage:
usage.completion_tokens_details.reasoning_tokens
reasoning_tokens — приблизительная оценка по извлечённому DeepSeek Web THINK-тексту, потому что web stream не отдаёт официальный token usage по reasoning отдельно.
curl -X POST http://localhost:9655/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek-chat-search",
"messages": [{"role": "user", "content": "Найди свежий факт про DeepSeek и ответь кратко."}],
"stream": false
}'curl -N -X POST http://localhost:9655/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek-chat",
"messages": [{"role": "user", "content": "Напиши короткую шутку."}],
"stream": true
}'curl -X POST http://localhost:9655/v1/messages \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek-chat",
"max_tokens": 512,
"messages": [{"role": "user", "content": "Ответь ровно OK"}],
"stream": false
}'Для Claude Code можно указывать backend напрямую:
export ANTHROPIC_BASE_URL="http://127.0.0.1:9655"
export ANTHROPIC_AUTH_TOKEN="dummy-key"
export CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY=1
claude --model deepseek-chatcurl -X POST http://localhost:9655/v1/responses \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek-chat",
"input": "Ответь ровно OK",
"stream": false
}'FreeDeepseekAPI принимает:
- OpenAI
tools; - Anthropic
tools; - Responses API function tools.
Прокси просит DeepSeek вернуть строгий JSON tool call, но также умеет парсить fallback-форматы:
TOOL_CALL:- fenced JSON
<tool_call>...</tool_call>
GET /v1/models возвращает только aliases, которые сейчас проверены и работают через этот proxy.
| Alias | Web mode | Reasoning | Web search | Комментарий |
|---|---|---|---|---|
deepseek-chat |
Быстрый / default |
нет | нет | базовый chat |
deepseek-v3 |
Быстрый / default |
нет | нет | совместимый alias |
deepseek-default |
Быстрый / default |
нет | нет | совместимый alias |
deepseek-reasoner |
Быстрый / default |
да | нет | thinking_enabled=true |
deepseek-r1 |
Быстрый / default |
да | нет | R1-compatible alias |
deepseek-chat-search |
Быстрый / default |
нет | да | web search |
deepseek-default-search |
Быстрый / default |
нет | да | web search alias |
deepseek-reasoner-search |
Быстрый / default |
да | да | reasoning + search |
deepseek-r1-search |
Быстрый / default |
да | да | R1-compatible + search |
deepseek-expert |
Эксперт / expert |
нет | нет | Expert mode |
deepseek-v4-pro |
Эксперт / expert |
да | нет | Expert + reasoning |
Полный маппинг:
curl http://localhost:9655/v1/model-capabilitiesПо официальной странице DeepSeek V4 Preview deepseek-chat и deepseek-reasoner сейчас route'ятся в deepseek-v4-flash non-thinking/thinking. В самом chat.deepseek.com direct stream точное имя чекпойнта не отдаётся (model: ""), поэтому proxy фиксирует одновременно web-режим (default / Быстрый) и актуальную официальную маршрутизацию (DeepSeek-V4-Flash).
Текущий вывод DeepSeek Web remote config показывает такие web-режимы:
default/ UIБыстрый— работает; поддерживаетthinking_enabledиsearch_enabled.expert/ UIЭксперт— работает через актуальный web-контракт (x-client-version=2.0.0) и поддерживаетthinking_enabled. В/v1/modelsвыдаютсяdeepseek-expertбез reasoning иdeepseek-v4-proкак Expert + reasoning.vision/ UIРаспознавание— виден в remote config, но сейчас direct Web API возвращаетbackend_err_by_model(Vision is temporarily unavailable). Поэтомуdeepseek-visionскрыт из/v1/models.
Search для Expert по remote config недоступен, поэтому deepseek-expert-search остаётся unsupported.
| Method | Path | Назначение |
|---|---|---|
GET |
/ или /health |
статус proxy |
GET |
/v1/models |
список рабочих OpenAI-compatible aliases |
GET |
/v1/model-capabilities |
полный маппинг aliases, real model, capabilities |
POST |
/v1/chat/completions |
OpenAI-compatible Chat Completions |
POST |
/v1/messages |
Anthropic Messages API shim |
POST |
/v1/responses |
OpenAI Responses API shim |
GET |
/v1/sessions |
активные локальные agent sessions |
POST |
/reset-session?agent=<id> |
сбросить одну session |
POST |
/reset-session?agent=all |
сбросить все sessions |
Base URL для Open WebUI в Docker:
http://host.docker.internal:9655/v1
Для локального запуска без Docker:
http://localhost:9655/v1
API key можно указать любой: proxy сам ходит в DeepSeek Web через сохранённую browser-сессию.
npm run auth
npm startЕсли DeepSeek начал отвечать 401, 403 или просит новый PoW/session — повторите npm run auth и обновите сохранённую browser-сессию.
Локальные файлы авторизации не должны попадать в GitHub:
deepseek-auth.json.chrome-profile-deepseek/.env
Они уже добавлены в .gitignore.
Синтаксическая проверка проекта:
npm testLive smoke-тесты против запущенного локального proxy:
BASE_URL=http://127.0.0.1:9655 MODEL=deepseek-chat npm run test:liveFreeDeepseekAPI — экспериментальный web-chat proxy для локального использования и интеграций. Он зависит от текущего контракта DeepSeek Web Chat, поэтому при изменениях на стороне DeepSeek может потребоваться обновление auth/session logic или model mapping.
Если что-то перестало работать:
- обновите логин через
npm run auth; - проверьте
/v1/model-capabilities; - повторите запрос на свежей сессии;
- если проблема сохраняется — вероятно, DeepSeek изменил внутренний Web API.
ForgetMeAI · Telegram