Skip to content

Latest commit

 

History

History
361 lines (266 loc) · 13.7 KB

File metadata and controls

361 lines (266 loc) · 13.7 KB

FreeDeepseekAPI

Локальный OpenAI-compatible API proxy для DeepSeek Web Chat

License MIT Node.js 18 plus No npm dependencies OpenAI compatible

Быстрый стартВозможностиПримерыМоделиEndpointsOpen 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


Навигация


✨ Что это даёт

  • Использовать 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 start

npm run auth открывает меню авторизации:

  1. выберите пункт 1;
  2. войдите в DeepSeek в отдельном Chrome-профиле;
  3. отправьте короткое сообщение вроде ok;
  4. вернитесь в терминал и нажмите Enter.

npm start показывает меню запуска:

  • 1 — авторизоваться / обновить DeepSeek login
  • 2 — показать модели и статусы
  • 3 — запустить proxy
  • 4 — выйти

Для 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.


🧪 Примеры запросов

Chat Completions

curl -X POST http://localhost:9655/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "deepseek-chat",
    "messages": [{"role": "user", "content": "Привет! Ответь одной фразой."}],
    "stream": false
  }'

Reasoning

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 отдельно.

Web search

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
  }'

Streaming

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
  }'

Anthropic Messages API

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-chat

OpenAI Responses API

curl -X POST http://localhost:9655/v1/responses \
  -H "Content-Type: application/json" \
  -d '{
    "model": "deepseek-chat",
    "input": "Ответь ровно OK",
    "stream": false
  }'

Tool calling

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.

Рабочие aliases

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.


🔌 Endpoints

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

🖥 Open WebUI

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 test

Live smoke-тесты против запущенного локального proxy:

BASE_URL=http://127.0.0.1:9655 MODEL=deepseek-chat npm run test:live

📌 Статус проекта

FreeDeepseekAPI — экспериментальный web-chat proxy для локального использования и интеграций. Он зависит от текущего контракта DeepSeek Web Chat, поэтому при изменениях на стороне DeepSeek может потребоваться обновление auth/session logic или model mapping.

Если что-то перестало работать:

  1. обновите логин через npm run auth;
  2. проверьте /v1/model-capabilities;
  3. повторите запрос на свежей сессии;
  4. если проблема сохраняется — вероятно, DeepSeek изменил внутренний Web API.

ForgetMeAI · Telegram