Запустіть локальний проксі, сумісний з OpenAI, для всіх основних хмарних AI-сервісів. Збережіть API-ключі один раз і дозвольте будь-якому клієнтському застосунку — настільному, мобільному чи вебзастосунку — спілкуватися з http://localhost замість реєстрації ключів у кожному інструменті.
Початок роботи
1. Запустіть застосунок
Відкрийте AIProxyServer. Під час першого запуску проксі запускається автоматично та прослуховує порт 8421 вашого локального комп’ютера. Головне вікно містить три розділи:
- Проксі-сервер — поточний стан, базова URL-адреса та кнопка для запуску або зупинки прослуховувача
- Bearer Token — необов’язкове перемикання автентифікації та відображення токена
- Постачальники — усі підтримувані хмарні AI-постачальники, з кнопкою Установити API-ключ в кожному рядку
2. Додайте свій перший API-ключ
- Виберіть будь-якого постачальника зі списку Постачальники (наприклад OpenAI (ChatGPT))
- Натисніть Отримати API-ключ щоб відкрити консоль постачальника у браузері, а потім створіть або скопіюйте ключ
- Натисніть Установити API-ключ у тому самому рядку та вставте значення у діалогове вікно
- Натисніть Зберегти. Мітка стану зміниться на Налаштовано зеленим кольором
3. Підключіть клієнтський застосунок
Спрямуйте будь-який клієнт, сумісний з OpenAI, на проксі. Базова URL-адреса: http://localhost:8421/<provider>/v1. Сегмент постачальника визначає, яка хмара отримає запит.
# Example: OpenAI Python SDK pointed at the proxy
from openai import OpenAI
client = OpenAI(
base_url="http://localhost:8421/openai/v1",
api_key="not-used-but-required-by-sdk",
)
resp = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": "Hello"}],
)
print(resp.choices[0].message.content)
Клієнт ніколи не бачить справжнього ключа. AIProxyServer додає облікові дані вищого рівня, коли пересилає запит.
Огляд інтерфейсу
Панель проксі-сервера
| Поле | Опис |
|---|---|
| Стан | Працює коли прослуховувач активний, Зупинено в іншому разі. |
| Базова URL-адреса | Адреса, яку мають використовувати клієнтські застосунки, включно з іменем хоста та портом. Натисніть Копіювати щоб скопіювати її до буфера обміну. |
| Кнопка Запустити / Зупинити | Перемикає HTTP-прослуховувач без виходу із застосунку. |
Панель Bearer Token
- Вимагати автентифікацію Bearer Token — прапорець, що вмикає або вимикає автентифікацію. За замовчуванням вимкнено для безпроблемного локального використання.
- Поле токена — лише для читання: відображає поточний токен. Показується крапками; використовуйте Копіювати щоб отримати його.
- Згенерувати повторно — створює новий випадковий токен. Наявні клієнти потрібно оновити новим значенням.
Панель постачальників
Один рядок для кожного підтримуваного хмарного постачальника. У кожному рядку показано:
- Відображувана назва (наприклад Claude (Anthropic))
- Стан конфігурації — зелений Налаштовано коли API-ключ збережено, сірий Не налаштовано в іншому разі
- Шлях URL, який використовують ваші клієнти, наприклад
/anthropic/v1/chat/completions - Установити API-ключ — відкриває діалог для введення облікових даних
- Отримати API-ключ — відкриває консоль постачальника у браузері
Підтримувані постачальники
Додано одинадцять хмарних AI-сервісів. Більшість нативно використовують формат OpenAI Chat Completions і проксіюються без змін. Три сервіси (Anthropic, Gemini, ERNIE) мають власні протоколи; AIProxyServer на льоту перетворює запити й відповіді, тож клієнт завжди бачить лише формати OpenAI.
| Постачальник | Префікс маршруту | Що вам потрібно |
|---|---|---|
| OpenAI (ChatGPT) | /openai/v1 | API-ключ від platform.openai.com |
| Claude (Anthropic) | /anthropic/v1 | API-ключ із Anthropic Console |
| Gemini (Google) | /gemini/v1 | API-ключ із Google AI Studio |
| Grok (xAI) | /grok/v1 | API-ключ із xAI Console |
| Azure OpenAI (Copilot) | /copilot/v1 | API-ключ і URL-адреса кінцевої точки розгортання |
| Perplexity | /perplexity/v1 | API-ключ із налаштувань Perplexity |
| Groq | /groq/v1 | API-ключ із Groq Cloud |
| DeepSeek | /deepseek/v1 | API-ключ із DeepSeek Platform |
| Kimi (Moonshot) | /kimi/v1 | API-ключ із Moonshot Console |
| Qwen (DashScope) | /qwen/v1 | API-ключ із Alibaba DashScope |
| ERNIE (Baidu) | /ernie/v1 | І API Key, і Secret Key із Baidu Qianfan |
Примітки для окремих постачальників
- Azure OpenAI — вставте повну кінцеву точку розгортання у поле Базова URL-адреса кінцевої точки , наприклад
https://my-resource.openai.azure.com/openai/deployments/gpt-4o. Проксі додає/chat/completions?api-version=2024-02-01автоматично. - ERNIE — Baidu Qianfan використовує OAuth, тому потрібні і API Key і Secret Key . AIProxyServer непомітно запитує та кешує токени доступу.
- Gemini — автентифікація здійснюється параметром запиту URL; проксі додає його за вас. Обмеження безкоштовного рівня за хвилину все одно діють.
Довідник API
Кінцеві точки
| Метод | Шлях | Опис |
|---|---|---|
| GET | /health | Перевірка працездатності. Повертає стан сервісу та список постачальників. Автентифікація не потрібна. |
| GET | /v1/providers | Налаштовані постачальники й метадані. |
| GET | /<provider>/v1/models | Список моделей для заданого постачальника у форматі OpenAI. |
| POST | /<provider>/v1/chat/completions | Запит OpenAI Chat Completions. Передайте stream:true для SSE. |
Потокова передача
Коли клієнт надсилає "stream": true, проксі відповідає Server-Sent Events у форматі OpenAI:
data: {"id":"chatcmpl-...","object":"chat.completion.chunk","choices":[{"delta":{"role":"assistant"},...}]}
data: {"id":"chatcmpl-...","object":"chat.completion.chunk","choices":[{"delta":{"content":"Hello"},...}]}
data: [DONE]
Нативні потоки Anthropic і Gemini перетворюються на цю форму, тому всі клієнти можуть використовувати один аналізатор.
Заголовок автентифікації
Коли Вимагати автентифікацію Bearer Token увімкнено, надсилайте токен із головного вікна з кожним запитом:
Authorization: Bearer <token-shown-in-app>
Налаштування
Відкрийте вікно Налаштувань за допомогою значка шестерні на нижній панелі інструментів.
| Параметр | За замовчуванням | Опис |
|---|---|---|
| Порт проксі | 8421 | TCP-порт, до якого прив’язується прослуховувач. Для зміни потрібно перезапустити проксі. |
| Автозапуск сервера | Увімкнено | Запускати проксі під час запуску застосунку. |
| Дозволити доступ LAN | Вимкнено | Коли вимкнено, проксі прив’язується лише до 127.0.0.1. Коли ввімкнено, інші пристрої у вашій Wi-Fi-мережі можуть отримати доступ до проксі. |
| Вимагати Bearer Token | Вимкнено | Коли ввімкнено, кожен запит має містити токен, показаний у головному вікні. Наполегливо рекомендовано, якщо ввімкнено Дозволити доступ LAN. |
Приклади клієнтів
cURL
# OpenAI (passthrough)
curl http://localhost:8421/openai/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-4o-mini",
"messages": [{"role": "user", "content": "Hello"}]
}'
# Claude via the same OpenAI shape
curl http://localhost:8421/anthropic/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-4-5",
"messages": [{"role": "user", "content": "Hello"}],
"max_tokens": 1024
}'
OpenAI Python SDK
from openai import OpenAI
client = OpenAI(
base_url="http://localhost:8421/gemini/v1",
api_key="placeholder", # ignored when Bearer Token is off
)
stream = client.chat.completions.create(
model="gemini-2.0-flash",
messages=[{"role": "user", "content": "Tell me a joke"}],
stream=True,
)
for chunk in stream:
print(chunk.choices[0].delta.content or "", end="", flush=True)
Flutter / Dart
// Using any OpenAI-compatible Dart client
final client = OpenAIClient(
baseUrl: 'http://localhost:8421/anthropic/v1',
apiKey: '', // unused when Bearer Token is off
);
localhost на LAN IP-адресу вашого Mac (показується в полі Базова URL-адреса, коли Дозволити доступ LAN увімкнено).Поради
- Залишайте Bearer Token вимкненим під час локальної розробки; увімкніть його щойно ввімкнете доступ LAN.
- Використовуйте різні базові URL-адреси для кожного постачальника у коді клієнта, щоб перемикати постачальників зміною однієї константи.
- Проксі запускається автоматично, але ви можете тимчасово зупинити його з головного вікна, якщо виникне конфлікт портів.
- Якщо безкоштовний рівень постачальника обмежить швидкість, повідомлення про помилку вищого рівня буде переслано без змін. Від клієнта не приховано жодної логіки повторних спроб.
- Кінцева точка
/v1/providersкорисна, щоб визначити, які постачальники налаштовані під час виконання.
Усунення несправностей
Проксі не запускається
- Можливо, інший процес уже використовує порт 8421. Змініть порт у Налаштуваннях і перезапустіть проксі.
- Перевірте системний журнал щодо повідомлення про помилку, відображеного під час запуску.
Запит повертає 401 Unauthorized
- Вимогу Bearer Token увімкнено, але клієнт не надіслав відповідний
Authorization: Bearer ...заголовок. - Власний API-ключ постачальника може бути недійсним — помилка вищого рівня пересилається, тож перевірте текст повідомлення.
Запит повертає «API key is not configured»
- Відкрийте список Постачальники та натисніть Установити API-ключ для відповідного постачальника.
- Для ERNIE потрібно заповнити і API Key, і Secret Key. Для Azure OpenAI також потрібна базова URL-адреса кінцевої точки.
Мобільний пристрій не може підключитися до проксі
- Увімкніть Дозволити доступ LAN у Налаштуваннях.
- Використовуйте LAN IP-адресу, показану в полі Базова URL-адреса, а не
localhost. - Переконайтеся, що обидва пристрої підключені до однієї Wi-Fi-мережі та брандмауер дозволяє вхідні з’єднання на порт проксі.
Потокові відповіді надходять усі одразу
- Переконайтеся, що клієнт надсилає
"stream": trueу тілі JSON. - Деякі HTTP-бібліотеки буферизують SSE за замовчуванням — вимкніть буферизацію відповіді на боці клієнта.
Конфіденційність
- API-ключі зберігаються зашифрованими за допомогою Fernet у
~/Library/Application Support/AIProxyServer/credentials.enc. Ключ шифрування уmaster.keyмає дозволи 0600. - Bearer Token, коли його ввімкнено, також зберігається лише у зашифрованому сховищі й ніколи не записується до звичайного файлу налаштувань.
- Проксі пересилає запити лише постачальникам, яких ви явно налаштували. Жодних інших вихідних викликів він не здійснює.
- Без телеметрії, аналітики чи звітів про збої.
- Прив’язка мережі за замовчуванням:
127.0.0.1лише. Доступ LAN вмикається за бажанням. - Вміст розмов не зберігається. AIProxyServer пересилає байти й одразу їх забуває.