AIProxyServer - Посібник

Запустіть локальний проксі, сумісний з OpenAI, для всіх основних хмарних AI-сервісів. Збережіть API-ключі один раз і дозвольте будь-якому клієнтському застосунку — настільному, мобільному чи вебзастосунку — спілкуватися з http://localhost замість реєстрації ключів у кожному інструменті.


Початок роботи

1. Запустіть застосунок

Відкрийте AIProxyServer. Під час першого запуску проксі запускається автоматично та прослуховує порт 8421 вашого локального комп’ютера. Головне вікно містить три розділи:

  • Проксі-сервер — поточний стан, базова URL-адреса та кнопка для запуску або зупинки прослуховувача
  • Bearer Token — необов’язкове перемикання автентифікації та відображення токена
  • Постачальники — усі підтримувані хмарні AI-постачальники, з кнопкою Установити API-ключ в кожному рядку

2. Додайте свій перший API-ключ

  1. Виберіть будь-якого постачальника зі списку Постачальники (наприклад OpenAI (ChatGPT))
  2. Натисніть Отримати API-ключ щоб відкрити консоль постачальника у браузері, а потім створіть або скопіюйте ключ
  3. Натисніть Установити API-ключ у тому самому рядку та вставте значення у діалогове вікно
  4. Натисніть Зберегти. Мітка стану зміниться на Налаштовано зеленим кольором

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 — прапорець, що вмикає або вимикає автентифікацію. За замовчуванням вимкнено для безпроблемного локального використання.
  • Поле токена — лише для читання: відображає поточний токен. Показується крапками; використовуйте Копіювати щоб отримати його.
  • Згенерувати повторно — створює новий випадковий токен. Наявні клієнти потрібно оновити новим значенням.
Увага: Якщо ввімкнути Дозволити доступ LAN у Налаштуваннях, не ввімкнувши токен, будь-хто в тій самій Wi-Fi-мережі може використовувати ваш проксі та API-ключі. Підказка під панеллю токена попереджає про цей стан.

Панель постачальників

Один рядок для кожного підтримуваного хмарного постачальника. У кожному рядку показано:

  • Відображувана назва (наприклад Claude (Anthropic))
  • Стан конфігурації — зелений Налаштовано коли API-ключ збережено, сірий Не налаштовано в іншому разі
  • Шлях URL, який використовують ваші клієнти, наприклад /anthropic/v1/chat/completions
  • Установити API-ключ — відкриває діалог для введення облікових даних
  • Отримати API-ключ — відкриває консоль постачальника у браузері

Підтримувані постачальники

Додано одинадцять хмарних AI-сервісів. Більшість нативно використовують формат OpenAI Chat Completions і проксіюються без змін. Три сервіси (Anthropic, Gemini, ERNIE) мають власні протоколи; AIProxyServer на льоту перетворює запити й відповіді, тож клієнт завжди бачить лише формати OpenAI.

ПостачальникПрефікс маршрутуЩо вам потрібно
OpenAI (ChatGPT)/openai/v1API-ключ від platform.openai.com
Claude (Anthropic)/anthropic/v1API-ключ із Anthropic Console
Gemini (Google)/gemini/v1API-ключ із Google AI Studio
Grok (xAI)/grok/v1API-ключ із xAI Console
Azure OpenAI (Copilot)/copilot/v1API-ключ і URL-адреса кінцевої точки розгортання
Perplexity/perplexity/v1API-ключ із налаштувань Perplexity
Groq/groq/v1API-ключ із Groq Cloud
DeepSeek/deepseek/v1API-ключ із DeepSeek Platform
Kimi (Moonshot)/kimi/v1API-ключ із Moonshot Console
Qwen (DashScope)/qwen/v1API-ключ із 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>

Налаштування

Відкрийте вікно Налаштувань за допомогою значка шестерні на нижній панелі інструментів.

ПараметрЗа замовчуваннямОпис
Порт проксі8421TCP-порт, до якого прив’язується прослуховувач. Для зміни потрібно перезапустити проксі.
Автозапуск сервераУвімкненоЗапускати проксі під час запуску застосунку.
Дозволити доступ 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
);
Мобільні пристрої у Wi-Fi: замініть 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 пересилає байти й одразу їх забуває.