feat: publish sanitized custom.97 source
This commit is contained in:
1022 files changed
+69903
-19207
No files matched your search
+156
-318
@@ -4,7 +4,7 @@
|
||||
|
||||
# New API
|
||||
|
||||
🍥 **Passerelle de modèles étendus de nouvelle génération et système de gestion d'actifs d'IA**
|
||||
**Une passerelle IA pour les modèles, les applications et les agents**
|
||||
|
||||
<p align="center">
|
||||
<a href="./README.zh_CN.md">简体中文</a> |
|
||||
@@ -44,23 +44,34 @@
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
<a href="#-démarrage-rapide">Démarrage rapide</a> •
|
||||
<a href="#-fonctionnalités-clés">Fonctionnalités clés</a> •
|
||||
<a href="#-déploiement">Déploiement</a> •
|
||||
<a href="#-documentation">Documentation</a> •
|
||||
<a href="#-aide-support">Aide</a>
|
||||
<a href="#capabilities">Fonctionnalités</a> •
|
||||
<a href="#quick-start">Démarrage rapide</a> •
|
||||
<a href="#deployment">Déploiement</a> •
|
||||
<a href="#development">Développement</a> •
|
||||
<a href="#documentation">Documentation</a>
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
||||
---
|
||||
|
||||
## 📝 Description du projet
|
||||
|
||||
New API est une passerelle IA auto-hébergée pour les applications, les agents et les équipes. Connectez vos fournisseurs de modèles, exposez une API commune à vos clients et gérez le routage, les accès, les usages et les coûts depuis une même console.
|
||||
|
||||
Utilisez-la pour partager des accès autorisés au sein d'une équipe, changer de fournisseur sans reconfigurer chaque client ou exploiter un service privé multi-modèles. Les fournisseurs incluent OpenAI, Anthropic, Google Gemini, Azure OpenAI, AWS Bedrock, Vertex AI, DeepSeek, Qwen et d'autres services compatibles.
|
||||
|
||||
> [!IMPORTANT]
|
||||
> - Ce projet est exclusivement destiné aux scénarios de passerelle API d'IA légalement autorisés, d'authentification organisationnelle, de gestion multi-modèles, d'analyse d'utilisation, de comptabilisation des coûts et de déploiement privé.
|
||||
> - Les utilisateurs doivent obtenir légalement les clés API, comptes, services de modèles et autorisations d'interface en amont, et doivent respecter les conditions d'utilisation en amont et les lois et réglementations applicables.
|
||||
> - Les utilisateurs doivent s'assurer que leur utilisation est conforme aux conditions d'utilisation en amont et aux lois et réglementations applicables.
|
||||
> - Lors de la fourniture de services d'IA générative au public, les utilisateurs doivent se conformer aux exigences réglementaires applicables et remplir toutes les obligations d'enregistrement, de licence, de sécurité du contenu, de vérification d'identité, de conservation des journaux, de fiscalité et d'autorisation en amont requises par leur juridiction.
|
||||
|
||||
<!-- -->
|
||||
|
||||
> [!WARNING]
|
||||
> Lorsque vous exploitez ce projet en tant que service public d'IA générative ou service de revente d'API, les utilisateurs doivent d'abord remplir toutes les obligations requises en matière d'enregistrement, de licence, de sécurité du contenu, de vérification d'identité, de conservation des journaux, de fiscalité, de paiement et d'autorisation en amont.
|
||||
|
||||
---
|
||||
|
||||
## 🤝 Partenaires de confiance
|
||||
@@ -79,9 +90,6 @@
|
||||
--><a href="https://bda.pku.edu.cn/" target="_blank">
|
||||
<img src="./docs/images/pku.png" alt="Université de Pékin" height="80" />
|
||||
</a><!--
|
||||
--><a href="https://www.compshare.cn/?ytag=GPU_yy_gh_newapi" target="_blank">
|
||||
<img src="./docs/images/ucloud.png" alt="UCloud" height="80" />
|
||||
</a><!--
|
||||
--><a href="https://www.aliyun.com/" target="_blank">
|
||||
<img src="./docs/images/aliyun.png" alt="Alibaba Cloud" height="80" />
|
||||
</a><!--
|
||||
@@ -106,326 +114,174 @@
|
||||
|
||||
---
|
||||
|
||||
## 🚀 Démarrage rapide
|
||||
<a id="capabilities"></a>
|
||||
|
||||
### Utilisation de Docker Compose (recommandé)
|
||||
## Fonctionnalités
|
||||
|
||||
| Domaine | Possibilités |
|
||||
| --- | --- |
|
||||
| Accès aux modèles | OpenAI Chat Completions, Responses, Anthropic Messages et Gemini ; streaming, outils, raisonnement et entrées multimodales selon le fournisseur |
|
||||
| Routage | Correspondance des noms de modèles, priorités et poids des canaux, tentatives supplémentaires, affinité de canal et gestion de plusieurs clés |
|
||||
| Usages et coûts | Quotas, abonnements, journaux d'utilisation, comptabilisation du cache et tarification par paliers fondée sur des expressions |
|
||||
| Contrôle d'accès | Utilisateurs, groupes, permissions fines et restrictions des clés API ; OAuth/OIDC, clés d'accès, double authentification et gestion des sessions |
|
||||
| Tâches asynchrones | Extensions JavaScript pour les API de tâches d'image, de vidéo et autres, avec suivi d'état et récupération des résultats |
|
||||
| Console web | Gestion des canaux et modèles, journaux d'utilisation et d'audit, playground ; interface en anglais, chinois simplifié et traditionnel, français, japonais, russe et vietnamien |
|
||||
|
||||
### Protocoles et points d'accès
|
||||
|
||||
| Interface | Points d'accès courants |
|
||||
| --- | --- |
|
||||
| OpenAI Chat / Responses | `POST /v1/chat/completions`, `POST /v1/responses` |
|
||||
| Anthropic Messages | `POST /v1/messages` |
|
||||
| Gemini | `POST /v1beta/models/{model}:generateContent`, `POST /v1beta/models/{model}:streamGenerateContent` |
|
||||
| Realtime / Responses WebSocket | `GET /v1/realtime`, `GET /v1/responses` (mise à niveau WebSocket) |
|
||||
| Images / audio | `/v1/images/generations`, `/v1/images/edits`, `/v1/audio/speech`, `/v1/audio/transcriptions`, `/v1/audio/translations` |
|
||||
| Embeddings / rerank | `POST /v1/embeddings`, `POST /v1/rerank` |
|
||||
| Extensions de tâches | `POST /v1/tasks/{pluginKey}`, `GET /v1/tasks/{taskId}`, ainsi que les routes déclarées par chaque extension |
|
||||
|
||||
[RelayKit](./relaykit/README.md) convertit les requêtes, réponses et flux entre les quatre protocoles textuels. Les capacités disponibles dépendent du canal, du modèle amont et du chemin de conversion ; certains outils et champs propres à un protocole ne sont pas entièrement transposables. WebSocket nécessite également un fournisseur et une configuration de canal compatibles.
|
||||
|
||||
Ce README décrit le code source actuel. Consultez les notes de la version que vous déployez.
|
||||
|
||||
<a id="quick-start"></a>
|
||||
|
||||
## Démarrage rapide
|
||||
|
||||
### Essai local avec Docker
|
||||
|
||||
Cette commande démarre une instance SQLite accessible uniquement depuis la machine locale :
|
||||
|
||||
```bash
|
||||
mkdir -p data
|
||||
docker run --name new-api -d --restart unless-stopped \
|
||||
-p 127.0.0.1:3000:3000 \
|
||||
-e TZ=Asia/Shanghai \
|
||||
-v "$(pwd)/data:/data" \
|
||||
calciumion/new-api:latest
|
||||
```
|
||||
|
||||
Ouvrez [http://localhost:3000](http://localhost:3000) et suivez l'assistant pour créer le compte administrateur. Le répertoire `data` conserve la base SQLite lors du remplacement du conteneur.
|
||||
|
||||
### Première requête
|
||||
|
||||
1. Ajoutez un canal avec votre clé API amont, ses modèles et son groupe, puis lancez un test du canal.
|
||||
2. Configurez les prix des modèles et vérifiez que l'utilisateur dispose d'un quota ou d'un abonnement valide.
|
||||
3. Créez une clé API dans la console, autorisée à accéder au même groupe et aux mêmes modèles.
|
||||
4. Pour un client compatible OpenAI, utilisez `http://localhost:3000/v1` comme URL de base et la **clé émise par New API**.
|
||||
|
||||
Définissez `NEW_API_KEY` dans votre shell avec cette clé, puis listez les modèles accessibles :
|
||||
|
||||
```bash
|
||||
curl --fail-with-body http://localhost:3000/v1/models \
|
||||
-H "Authorization: Bearer ${NEW_API_KEY}"
|
||||
```
|
||||
|
||||
Appelez ensuite Responses en remplaçant `your-enabled-model` par un modèle activé qui prend en charge cette interface :
|
||||
|
||||
```bash
|
||||
curl --fail-with-body http://localhost:3000/v1/responses \
|
||||
-H "Authorization: Bearer ${NEW_API_KEY}" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"model":"your-enabled-model","input":"Hello!"}'
|
||||
```
|
||||
|
||||
<a id="deployment"></a>
|
||||
|
||||
## Déploiement
|
||||
|
||||
### Docker Compose
|
||||
|
||||
La [configuration Compose](./docker-compose.yml) du dépôt démarre **New API + PostgreSQL + Redis** par défaut. Elle contient aussi des exemples pour MySQL et une base de journaux ClickHouse distincte.
|
||||
|
||||
```bash
|
||||
# Cloner le projet
|
||||
git clone https://github.com/QuantumNous/new-api.git
|
||||
cd new-api
|
||||
|
||||
# Modifier la configuration docker-compose.yml
|
||||
nano docker-compose.yml
|
||||
|
||||
# Démarrer le service
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
<details>
|
||||
<summary><strong>Utilisation des commandes Docker</strong></summary>
|
||||
Avant de démarrer, modifiez `docker-compose.yml` : remplacez les mots de passe d'exemple de la base et de Redis dans les services et les chaînes de connexion, puis définissez un `SESSION_SECRET` aléatoire et persistant (générable avec `openssl rand -hex 32`). Pour une console HTTPS, définissez `SESSION_COOKIE_SECURE=true` et renseignez son origine HTTPS publique exacte dans `SESSION_COOKIE_TRUSTED_URL`.
|
||||
|
||||
```bash
|
||||
# Tirer la dernière image
|
||||
docker pull calciumion/new-api:latest
|
||||
|
||||
# Utilisation de SQLite (par défaut)
|
||||
docker run --name new-api -d --restart always \
|
||||
-p 3000:3000 \
|
||||
-e TZ=Asia/Shanghai \
|
||||
-v ./data:/data \
|
||||
calciumion/new-api:latest
|
||||
|
||||
# Utilisation de MySQL
|
||||
docker run --name new-api -d --restart always \
|
||||
-p 3000:3000 \
|
||||
-e SQL_DSN="root:123456@tcp(localhost:3306)/oneapi" \
|
||||
-e TZ=Asia/Shanghai \
|
||||
-v ./data:/data \
|
||||
calciumion/new-api:latest
|
||||
docker compose up -d
|
||||
docker compose logs -f new-api
|
||||
```
|
||||
|
||||
> **💡 Astuce:** `-v ./data:/data` sauvegardera les données dans le dossier `data` du répertoire actuel, vous pouvez également le changer en chemin absolu comme `-v /your/custom/path:/data`
|
||||
### Stockage et configuration
|
||||
|
||||
</details>
|
||||
| Composant | Options |
|
||||
| --- | --- |
|
||||
| Base principale | SQLite, MySQL ≥ 5.7.8 ou PostgreSQL ≥ 9.6 |
|
||||
| Base de journaux distincte | Configurée avec `LOG_SQL_DSN` ; prend aussi en charge ClickHouse |
|
||||
| Cache | Redis facultatif et cache mémoire ; partagez Redis si les nœuds doivent partager les limites de débit |
|
||||
| Plateformes des conteneurs | Linux amd64 / arm64 |
|
||||
|
||||
---
|
||||
| Variable | Rôle |
|
||||
| --- | --- |
|
||||
| `SQL_DSN` | Connexion à la base principale ; SQLite si non définie |
|
||||
| `LOG_SQL_DSN` | Connexion facultative à une base de journaux distincte |
|
||||
| `REDIS_CONN_STRING` | Chaîne de connexion Redis |
|
||||
| `SESSION_SECRET` | Secret d'authentification persistant, identique sur tous les nœuds |
|
||||
| `CRYPTO_SECRET` | Vaut `SESSION_SECRET` par défaut ; même valeur effective pour les nœuds partageant Redis |
|
||||
| `SESSION_COOKIE_SECURE` | `true` pour une console HTTPS ; active les cookies de renouvellement Secure et les contrôles stricts d'origine du renouvellement et de la déconnexion |
|
||||
| `SESSION_COOKIE_TRUSTED_URL` | Obligatoire en mode Secure : origines HTTPS exactes séparées par des virgules, sans chemin ni joker ; à laisser non définie en HTTP local |
|
||||
| `TRUSTED_PROXIES` | IP/CIDR des proxys de confiance, ou `none` ; à configurer selon votre réseau |
|
||||
|
||||
🎉 Après le déploiement, visitez `http://localhost:3000` pour commencer à utiliser!
|
||||
Consultez l'[exemple d'environnement](./.env.example), la [référence des variables](https://docs.newapi.ai/en/docs/installation/config-maintenance/environment-variables) et le [guide des sessions](./docs/authentication.md). Injectez les variables du conteneur avec `environment` ou `env_file` dans Compose ; copier `.env.example` ne suffit pas.
|
||||
|
||||
> [!WARNING]
|
||||
> Lorsque vous exploitez ce projet en tant que service public d'IA générative ou service de revente d'API, les utilisateurs doivent d'abord remplir toutes les obligations requises en matière d'enregistrement, de licence, de sécurité du contenu, de vérification d'identité, de conservation des journaux, de fiscalité, de paiement et d'autorisation en amont.
|
||||
En production, utilisez HTTPS et configurez le proxy inverse pour le streaming et WebSocket. Conservez et sauvegardez les bases et les données montées. Tous les nœuds doivent partager la base principale et les secrets d'authentification ; des Redis distincts ou des limiteurs en mémoire comptent les limites séparément par nœud. Le guide des sessions détaille la propagation selon la topologie.
|
||||
|
||||
📖 Pour plus de méthodes de déploiement, veuillez vous référer à [Guide de déploiement](https://docs.newapi.pro/en/docs/installation)
|
||||
Choisissez une version précise d'image dans les [versions publiées](https://github.com/QuantumNous/new-api/releases), lisez ses notes et sauvegardez avant toute mise à niveau. Le tag `latest` évolue avec les publications ; évaluez les migrations et la compatibilité de votre installation.
|
||||
|
||||
---
|
||||
<a id="development"></a>
|
||||
|
||||
## 📚 Documentation
|
||||
## Développement et extensions
|
||||
|
||||
<div align="center">
|
||||
Le backend utilise Go et Gin ; la console utilise React 19, TypeScript, Rsbuild, TanStack et Tailwind CSS 4. Utilisez Bun pour le frontend. Consultez [go.mod](./go.mod) pour la version de référence du langage Go et [Dockerfile](./Dockerfile) pour la chaîne de compilation du conteneur.
|
||||
|
||||
### 📖 [Documentation officielle](https://docs.newapi.pro/en/docs) | [](https://deepwiki.com/QuantumNous/new-api)
|
||||
|
||||
</div>
|
||||
|
||||
**Navigation rapide:**
|
||||
|
||||
| Catégorie | Lien |
|
||||
|------|------|
|
||||
| 🚀 Guide de déploiement | [Documentation d'installation](https://docs.newapi.pro/en/docs/installation) |
|
||||
| ⚙️ Configuration de l'environnement | [Variables d'environnement](https://docs.newapi.pro/en/docs/installation/config-maintenance/environment-variables) |
|
||||
| 📡 Documentation de l'API | [Documentation de l'API](https://docs.newapi.pro/en/docs/api) |
|
||||
| ❓ FAQ | [FAQ](https://docs.newapi.pro/en/docs/support/faq) |
|
||||
| 💬 Interaction avec la communauté | [Canaux de communication](https://docs.newapi.pro/en/docs/support/community-interaction) |
|
||||
|
||||
---
|
||||
|
||||
## ✨ Fonctionnalités clés
|
||||
|
||||
> Pour les fonctionnalités détaillées, veuillez vous référer à [Présentation des fonctionnalités](https://docs.newapi.pro/en/docs/guide/wiki/basic-concepts/features-introduction) |
|
||||
|
||||
### 🎨 Fonctions principales
|
||||
|
||||
| Fonctionnalité | Description |
|
||||
|------|------|
|
||||
| 🎨 Nouvelle interface utilisateur | Conception d'interface utilisateur moderne |
|
||||
| 🌍 Multilingue | Prend en charge le chinois simplifié, le chinois traditionnel, l'anglais, le français et le japonais |
|
||||
| 🔄 Compatibilité des données | Complètement compatible avec la base de données originale de One API |
|
||||
| 📈 Tableau de bord des données | Console visuelle et analyse statistique |
|
||||
| 🔒 Gestion des permissions | Regroupement de jetons, restrictions de modèles, gestion des utilisateurs |
|
||||
|
||||
### 💰 Comptabilisation et facturation des usages autorisés
|
||||
|
||||
- ✅ Rechargement interne et allocation de quotas pour les scénarios légalement autorisés (EPay, Stripe)
|
||||
- ✅ Comptabilisation des coûts par requête, par utilisation et par hit de cache au niveau organisationnel
|
||||
- ✅ Statistiques de facturation du cache pour OpenAI, Azure, DeepSeek, Claude, Qwen et les modèles pris en charge
|
||||
- ✅ Politiques de facturation flexibles pour la gestion interne ou les clients entreprise autorisés
|
||||
|
||||
### 🔐 Autorisation et sécurité
|
||||
|
||||
- 😈 Connexion par autorisation Discord
|
||||
- 🤖 Connexion par autorisation LinuxDO
|
||||
- 📱 Connexion par autorisation Telegram
|
||||
- 🔑 Authentification unifiée OIDC
|
||||
- 🔍 Requête de quota d'utilisation de clé (avec [new-api-key-tool](https://github.com/Calcium-Ion/new-api-key-tool))
|
||||
|
||||
### 🚀 Fonctionnalités avancées
|
||||
|
||||
**Prise en charge des formats d'API:**
|
||||
- ⚡ [OpenAI Responses](https://docs.newapi.pro/en/docs/api/ai-model/chat/openai/create-response)
|
||||
- ⚡ [OpenAI Realtime API](https://docs.newapi.pro/en/docs/api/ai-model/realtime/create-realtime-session) (y compris Azure)
|
||||
- ⚡ [Claude Messages](https://docs.newapi.pro/en/docs/api/ai-model/chat/create-message)
|
||||
- ⚡ [Google Gemini](https://doc.newapi.pro/en/api/google-gemini-chat)
|
||||
- 🔄 [Modèles Rerank](https://docs.newapi.pro/en/docs/api/ai-model/rerank/create-rerank) (Cohere, Jina)
|
||||
|
||||
**Routage intelligent:**
|
||||
- ⚖️ Sélection aléatoire pondérée des canaux
|
||||
- 🔄 Nouvelle tentative automatique en cas d'échec
|
||||
- 🚦 Limitation du débit du modèle pour les utilisateurs
|
||||
|
||||
**Conversion de format:**
|
||||
- 🔄 **OpenAI Compatible ⇄ Claude Messages**
|
||||
- 🔄 **OpenAI Compatible → Google Gemini**
|
||||
- 🔄 **Google Gemini → OpenAI Compatible** - Texte uniquement, les appels de fonction ne sont pas encore pris en charge
|
||||
- 🚧 **OpenAI Compatible ⇄ OpenAI Responses** - En développement
|
||||
- 🔄 **Fonctionnalité de la pensée au contenu**
|
||||
|
||||
**Prise en charge de l'effort de raisonnement:**
|
||||
|
||||
<details>
|
||||
<summary>Voir la configuration détaillée</summary>
|
||||
|
||||
**Modèles de la série OpenAI :**
|
||||
- `o3-mini-high` - Effort de raisonnement élevé
|
||||
- `o3-mini-medium` - Effort de raisonnement moyen
|
||||
- `o3-mini-low` - Effort de raisonnement faible
|
||||
- `gpt-5-high` - Effort de raisonnement élevé
|
||||
- `gpt-5-medium` - Effort de raisonnement moyen
|
||||
- `gpt-5-low` - Effort de raisonnement faible
|
||||
|
||||
**Modèles de pensée de Claude:**
|
||||
- `claude-3-7-sonnet-20250219-thinking` - Activer le mode de pensée
|
||||
|
||||
**Modèles de la série Google Gemini:**
|
||||
- `gemini-2.5-flash-thinking` - Activer le mode de pensée
|
||||
- `gemini-2.5-flash-nothinking` - Désactiver le mode de pensée
|
||||
- `gemini-2.5-pro-thinking` - Activer le mode de pensée
|
||||
- `gemini-2.5-pro-thinking-128` - Activer le mode de pensée avec budget de pensée de 128 tokens
|
||||
- Vous pouvez également ajouter les suffixes `-low`, `-medium` ou `-high` aux modèles Gemini pour fixer le niveau d’effort de raisonnement (sans suffixe de budget supplémentaire).
|
||||
|
||||
</details>
|
||||
|
||||
---
|
||||
|
||||
## 🤖 Prise en charge des modèles
|
||||
|
||||
> Pour les détails, veuillez vous référer à [Documentation de l'API - Interface de passerelle](https://docs.newapi.pro/en/docs/api)
|
||||
|
||||
| Type de modèle | Description | Documentation |
|
||||
|---------|------|------|
|
||||
| 🤖 OpenAI-Compatible | Modèles compatibles OpenAI | [Documentation](https://docs.newapi.pro/en/docs/api/ai-model/chat/openai/createchatcompletion) |
|
||||
| 🤖 OpenAI Responses | Format OpenAI Responses | [Documentation](https://docs.newapi.pro/en/docs/api/ai-model/chat/openai/createresponse) |
|
||||
| 🎨 Midjourney-Proxy | [Midjourney-Proxy(Plus)](https://github.com/novicezk/midjourney-proxy) | [Documentation](https://doc.newapi.pro/api/midjourney-proxy-image) |
|
||||
| 🎵 Suno-API | [Suno API](https://github.com/Suno-API/Suno-API) | [Documentation](https://doc.newapi.pro/api/suno-music) |
|
||||
| 🔄 Rerank | Cohere, Jina | [Documentation](https://docs.newapi.pro/en/docs/api/ai-model/rerank/creatererank) |
|
||||
| 💬 Claude | Format Messages | [Documentation](https://docs.newapi.pro/en/docs/api/ai-model/chat/createmessage) |
|
||||
| 🌐 Gemini | Format Google Gemini | [Documentation](https://docs.newapi.pro/en/docs/api/ai-model/chat/gemini/geminirelayv1beta) |
|
||||
| 🔧 Dify | Mode ChatFlow | - |
|
||||
| 🎯 Amont personnalisé | Configuration des points d'accès amont légalement autorisés | - |
|
||||
|
||||
### 📡 Interfaces prises en charge
|
||||
|
||||
<details>
|
||||
<summary>Voir la liste complète des interfaces</summary>
|
||||
|
||||
- [Interface de discussion (Chat Completions)](https://docs.newapi.pro/en/docs/api/ai-model/chat/openai/createchatcompletion)
|
||||
- [Interface de réponse (Responses)](https://docs.newapi.pro/en/docs/api/ai-model/chat/openai/createresponse)
|
||||
- [Interface d'image (Image)](https://docs.newapi.pro/en/docs/api/ai-model/images/openai/post-v1-images-generations)
|
||||
- [Interface audio (Audio)](https://docs.newapi.pro/en/docs/api/ai-model/audio/openai/create-transcription)
|
||||
- [Interface vidéo (Video)](https://docs.newapi.pro/en/docs/api/ai-model/videos/sora/createvideo)
|
||||
- [Interface d'incorporation (Embeddings)](https://docs.newapi.pro/en/docs/api/ai-model/embeddings/createembedding)
|
||||
- [Interface de rerank (Rerank)](https://docs.newapi.pro/en/docs/api/ai-model/rerank/creatererank)
|
||||
- [Conversation en temps réel (Realtime)](https://docs.newapi.pro/en/docs/api/ai-model/realtime/createrealtimesession)
|
||||
- [Discussion Claude](https://docs.newapi.pro/en/docs/api/ai-model/chat/createmessage)
|
||||
- [Discussion Google Gemini](https://docs.newapi.pro/en/docs/api/ai-model/chat/gemini/geminirelayv1beta)
|
||||
|
||||
</details>
|
||||
|
||||
---
|
||||
|
||||
## 🚢 Déploiement
|
||||
|
||||
> [!TIP]
|
||||
> **Dernière image Docker:** `calciumion/new-api:latest`
|
||||
|
||||
### 📋 Exigences de déploiement
|
||||
|
||||
| Composant | Exigence |
|
||||
|------|------|
|
||||
| **Base de données locale** | SQLite (Docker doit monter le répertoire `/data`)|
|
||||
| **Base de données distante | MySQL ≥ 5.7.8 ou PostgreSQL ≥ 9.6 |
|
||||
| **Moteur de conteneur** | Docker / Docker Compose |
|
||||
| **Architecture système** | 64 bits uniquement (amd64 / arm64) ; les systèmes 32 bits ne sont pas pris en charge |
|
||||
|
||||
### ⚙️ Configuration des variables d'environnement
|
||||
|
||||
<details>
|
||||
<summary>Configuration courante des variables d'environnement</summary>
|
||||
|
||||
| Nom de variable | Description | Valeur par défaut |
|
||||
|--------|------|--------|
|
||||
| `SESSION_SECRET` | Secret de signature d’authentification, identique sur tous les nœuds | - |
|
||||
| `SESSION_COOKIE_SECURE` | `false`/non défini désactive l’OriginGuard de refresh/logout pour les proxys HTTP locaux ; `true` active le cookie Secure et le contrôle strict de l’Origin | `false` |
|
||||
| `SESSION_COOKIE_TRUSTED_URL` | Obligatoire en mode Secure : Origins HTTPS exactes autorisées pour refresh/logout, séparées par des virgules ; ce n’est pas une liste CORS relay | - |
|
||||
| `TRUSTED_PROXIES` | Variable absente/vide : approuve le bouclage, les réseaux RFC 1918 et l’ULA IPv6 avec un avertissement au démarrage ; `none` n’approuve aucun proxy ; une liste IP/CIDR explicite remplace les valeurs par défaut | `127.0.0.0/8, ::1, 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, fc00::/7` |
|
||||
| `USER_SESSION_ACTIVE_LIMIT` | Nombre maximal de Sessions de connexion actives par utilisateur | `50` |
|
||||
| `USER_SESSION_ISSUANCE_LIMIT` | Nombre maximal de Sessions créées par utilisateur dans la fenêtre, y compris les Sessions révoquées | `100` |
|
||||
| `USER_SESSION_ISSUANCE_WINDOW_SECONDS` | Fenêtre de comptage des Sessions ; limitée à la durée de conservation des Sessions révoquées si elle est supérieure | `86400` |
|
||||
| `USER_SESSION_REVOKED_RETENTION_DAYS` | Conservation en jours des Sessions révoquées pour l’audit et le comptage | `7` |
|
||||
| `USER_SESSION_HOURLY_ALERT_THRESHOLD` | Seuil global horaire déclenchant uniquement une alerte, sans bloquer les connexions | `5000` |
|
||||
| `CRYPTO_SECRET` | Secret HMAC des clés de cache ; les nœuds partageant Redis doivent utiliser la même valeur effective | Par défaut, `SESSION_SECRET` |
|
||||
| `SQL_DSN` | Chaine de connexion à la base de données | - |
|
||||
| `REDIS_CONN_STRING` | Chaine de connexion Redis | - |
|
||||
| `STREAMING_TIMEOUT` | Délai d'expiration du streaming (secondes) | `300` |
|
||||
| `STREAM_SCANNER_MAX_BUFFER_MB` | Taille max du buffer par ligne (Mo) pour le scanner SSE ; à augmenter quand les sorties image/base64 sont très volumineuses (ex. images 4K) | `64` |
|
||||
| `MAX_REQUEST_BODY_MB` | Taille maximale du corps de requête (Mo, comptée **après décompression** ; évite les requêtes énormes/zip bombs qui saturent la mémoire). Dépassement ⇒ `413` | `32` |
|
||||
| `AZURE_DEFAULT_API_VERSION` | Version de l'API Azure | `2025-04-01-preview` |
|
||||
| `ERROR_LOG_ENABLED` | Interrupteur du journal d'erreurs | `false` |
|
||||
| `PYROSCOPE_URL` | Adresse du serveur Pyroscope | - |
|
||||
| `PYROSCOPE_APP_NAME` | Nom de l'application Pyroscope | `new-api` |
|
||||
| `PYROSCOPE_BASIC_AUTH_USER` | Utilisateur Basic Auth Pyroscope | - |
|
||||
| `PYROSCOPE_BASIC_AUTH_PASSWORD` | Mot de passe Basic Auth Pyroscope | - |
|
||||
| `PYROSCOPE_MUTEX_RATE` | Taux d'échantillonnage mutex Pyroscope | `5` |
|
||||
| `PYROSCOPE_BLOCK_RATE` | Taux d'échantillonnage block Pyroscope | `5` |
|
||||
| `HOSTNAME` | Nom d'hôte tagué pour Pyroscope | `new-api` |
|
||||
|
||||
📖 **Configuration complète:** [Documentation des variables d'environnement](https://docs.newapi.pro/en/docs/installation/config-maintenance/environment-variables)
|
||||
|
||||
</details>
|
||||
|
||||
### 🔧 Méthodes de déploiement
|
||||
|
||||
<details>
|
||||
<summary><strong>Méthode 1: Docker Compose (recommandé)</strong></summary>
|
||||
Compilez le frontend avant de démarrer le backend, qui intègre `web/dist` :
|
||||
|
||||
```bash
|
||||
# Cloner le projet
|
||||
git clone https://github.com/QuantumNous/new-api.git
|
||||
cd new-api
|
||||
|
||||
# Modifier la configuration
|
||||
nano docker-compose.yml
|
||||
|
||||
# Démarrer le service
|
||||
docker-compose up -d
|
||||
# Racine du dépôt
|
||||
cd web
|
||||
bun install --frozen-lockfile
|
||||
bun run build
|
||||
cd ..
|
||||
go run .
|
||||
```
|
||||
|
||||
</details>
|
||||
Dans un second terminal, démarrez le serveur de développement frontend :
|
||||
|
||||
<details>
|
||||
<summary><strong>Méthode 2: Commandes Docker</strong></summary>
|
||||
|
||||
**Utilisation de SQLite:**
|
||||
```bash
|
||||
docker run --name new-api -d --restart always \
|
||||
-p 3000:3000 \
|
||||
-e TZ=Asia/Shanghai \
|
||||
-v ./data:/data \
|
||||
calciumion/new-api:latest
|
||||
cd web
|
||||
bun run dev -- --port 5173
|
||||
```
|
||||
|
||||
**Utilisation de MySQL:**
|
||||
```bash
|
||||
docker run --name new-api -d --restart always \
|
||||
-p 3000:3000 \
|
||||
-e SQL_DSN="root:123456@tcp(localhost:3306)/oneapi" \
|
||||
-e TZ=Asia/Shanghai \
|
||||
-v ./data:/data \
|
||||
calciumion/new-api:latest
|
||||
```
|
||||
Ouvrez [http://localhost:5173](http://localhost:5173) ; les requêtes API sont relayées vers le backend sur le port 3000. Pour un backend de développement en conteneur, consultez [docker-compose.dev.yml](./docker-compose.dev.yml) et la cible `make dev` du [makefile](./makefile).
|
||||
|
||||
> **💡 Explication du chemin:**
|
||||
> - `./data:/data` - Chemin relatif, données sauvegardées dans le dossier data du répertoire actuel
|
||||
> - Vous pouvez également utiliser un chemin absolu, par exemple : `/your/custom/path:/data`
|
||||
| Emplacement | Responsabilité |
|
||||
| --- | --- |
|
||||
| `router/`, `middleware/`, `controller/` | Routes HTTP, contrôles d'accès et gestionnaires API |
|
||||
| `relay/` | Adaptateurs amont et routage des requêtes |
|
||||
| `service/`, `model/` | Logique métier et persistance |
|
||||
| [relaykit/](./relaykit/README.md) | Module Go autonome pour les DTO et conversions de protocoles |
|
||||
| [plugins/tasks/](./plugins/tasks/) | Extensions de tâches JavaScript ; contrat et limites de l'hôte dans [Task Plugin API v1](./docs/plugin-api/v1.md) |
|
||||
| `web/` | Console web ; voir les [conventions frontend](./web/AGENTS.md) |
|
||||
| [electron/](./electron/README.md) | Application de bureau et packaging |
|
||||
|
||||
</details>
|
||||
Lisez [AGENTS.md](./AGENTS.md) avant de contribuer. Exécutez les vérifications adaptées : `make test` pour les modules Go ; `bun run typecheck`, `bun run lint`, `bun run test` et `bun run build` dans `web/` pour le frontend. Une modification de RelayKit nécessite aussi `GOWORK=off go build ./...` depuis `relaykit/`.
|
||||
|
||||
<details>
|
||||
<summary><strong>Méthode 3: Panneau BaoTa</strong></summary>
|
||||
<a id="documentation"></a>
|
||||
|
||||
1. Installez le panneau BaoTa (version ≥ 9.2.0)
|
||||
2. Recherchez **New-API** dans le magasin d'applications
|
||||
3. Installation en un clic
|
||||
## Documentation et communauté
|
||||
|
||||
📖 [Tutoriel avec des images](./docs/BT.md)
|
||||
| Ressource | Lien |
|
||||
| --- | --- |
|
||||
| Documentation officielle | [Guides](https://docs.newapi.ai/en/docs) · [Installation](https://docs.newapi.ai/en/docs/installation) · [Référence API](https://docs.newapi.ai/en/docs/api) |
|
||||
| Exploration du projet | [DeepWiki](https://deepwiki.com/QuantumNous/new-api) |
|
||||
| Questions et échanges | [FAQ](https://docs.newapi.ai/en/docs/support/faq) · [Communauté](https://docs.newapi.ai/en/docs/support/community-interaction) |
|
||||
| Bugs et propositions | [GitHub Issues](https://github.com/QuantumNous/new-api/issues) |
|
||||
| Vulnérabilités | Signalement privé selon la [politique de sécurité](./.github/SECURITY.md) |
|
||||
|
||||
</details>
|
||||
|
||||
### ⚠️ Considérations sur le déploiement multi-machines
|
||||
|
||||
> [!WARNING]
|
||||
> - Tous les nœuds doivent utiliser la même base de données principale et la même valeur `SESSION_SECRET` ; sinon les Access Tokens, sessions Refresh et flux d’authentification temporaires ne peuvent pas être vérifiés de façon cohérente.
|
||||
> - Les nœuds connectés au même Redis doivent aussi utiliser le même `CRYPTO_SECRET`, faute de quoi les empreintes de clé de cache diffèrent et les entrées partagées ne peuvent pas être réutilisées de façon cohérente.
|
||||
|
||||
La base de données fait autorité pour les Sessions de connexion et pour les limites actives/d’émission par utilisateur. Les entrées Session de Redis sont des caches de courte durée dont le TTL suit `SYNC_FREQUENCY` (60 secondes par défaut), sans jamais dépasser la durée de vie restante de la Session.
|
||||
|
||||
| Topologie Redis | Propagation des Sessions | Limitation de débit |
|
||||
| --- | --- | --- |
|
||||
| Redis partagé | Les révocations et publications de version se propagent normalement immédiatement | Les quotas Redis sont partagés entre les nœuds |
|
||||
| Redis indépendant par nœud | Les nœuds se resynchronisent depuis la base dans le délai effectif de `SYNC_FREQUENCY` ; un nouveau Token issu d’une rotation peut recevoir temporairement une réponse 401 sur un nœud dont le cache est obsolète | Chaque nœud possède son propre quota ; la capacité agrégée peut donc atteindre environ la limite configurée multipliée par le nombre de nœuds |
|
||||
| Sans Redis | Chaque validation de Session consulte directement la base de données | Les limites en mémoire sont indépendantes sur chaque nœud |
|
||||
|
||||
Réduire `SYNC_FREQUENCY` raccourcit la fenêtre d’obsolescence avec des Redis indépendants, mais ajoute une lecture de Session par clé primaire, par SID actif, par nœud et par TTL. Ces garanties donnent une obsolescence bornée à l’authentification Session ; les limites et les autres caches du plan de contrôle adossés à Redis restent dépendants de la topologie.
|
||||
|
||||
Consultez [Authentification utilisateur et sessions de connexion](./docs/authentication.md) pour les contrats de token, de vérification Origin et de PAT.
|
||||
|
||||
### 🔄 Nouvelle tentative de canal et cache
|
||||
|
||||
**Configuration de la nouvelle tentative:** `Paramètres → Paramètres de fonctionnement → Paramètres généraux → Nombre de tentatives en cas d'échec`
|
||||
|
||||
**Configuration du cache:**
|
||||
- `REDIS_CONN_STRING`: Cache Redis (recommandé)
|
||||
- `MEMORY_CACHE_ENABLED`: Cache mémoire
|
||||
Pour signaler un bug, indiquez la version, le déploiement, les étapes de reproduction et des journaux expurgés des données sensibles. Les contributions à la documentation, aux traductions, aux intégrations et aux tests de régression ciblés sont les bienvenues.
|
||||
|
||||
---
|
||||
|
||||
@@ -447,36 +303,18 @@ Consultez [Authentification utilisateur et sessions de connexion](./docs/authent
|
||||
|
||||
---
|
||||
|
||||
## 💬 Aide et support
|
||||
|
||||
### 📖 Ressources de documentation
|
||||
|
||||
| Ressource | Lien |
|
||||
|------|------|
|
||||
| 📘 FAQ | [FAQ](https://docs.newapi.pro/en/docs/support/faq) |
|
||||
| 💬 Interaction avec la communauté | [Canaux de communication](https://docs.newapi.pro/en/docs/support/community-interaction) |
|
||||
| 🐛 Commentaires sur les problèmes | [Commentaires sur les problèmes](https://docs.newapi.pro/en/docs/support/feedback-issues) |
|
||||
| 📚 Documentation complète | [Documentation officielle](https://docs.newapi.pro/en/docs) |
|
||||
|
||||
### 🤝 Guide de contribution
|
||||
|
||||
Bienvenue à toutes les formes de contribution!
|
||||
|
||||
- 🐛 Signaler des bogues
|
||||
- 💡 Proposer de nouvelles fonctionnalités
|
||||
- 📝 Améliorer la documentation
|
||||
- 🔧 Soumettre du code
|
||||
|
||||
---
|
||||
|
||||
## 📜 Licence
|
||||
|
||||
Ce projet est sous licence [GNU Affero General Public License v3.0 (AGPLv3)](./LICENSE).
|
||||
|
||||
Des [conditions supplémentaires](./NOTICE) s'appliquent au titre de la section 7 de l'AGPLv3. Les versions modifiées doivent conserver la mention `Frontend design and development by New API contributors.` dans les mentions légales appropriées et les emplacements visibles de l'interface dédiés aux informations, au droit, au pied de page ou aux attributions, ainsi qu'un lien visible vers le projet original : <https://github.com/QuantumNous/new-api>.
|
||||
|
||||
Il s'agit d'un projet open-source développé sur la base de [One API](https://github.com/songquanpeng/one-api) (licence MIT).
|
||||
|
||||
Si les politiques de votre organisation ne permettent pas l'utilisation de logiciels sous licence AGPLv3, ou si vous souhaitez éviter les obligations open-source de l'AGPLv3, veuillez nous contacter à : [support@quantumnous.com](mailto:support@quantumnous.com)
|
||||
|
||||
Consultez [NOTICE](./NOTICE) et les [licences tierces](./THIRD-PARTY-LICENSES.md) pour les attributions et les dépendances.
|
||||
|
||||
---
|
||||
|
||||
## 🌟 Historique des étoiles
|
||||
@@ -495,7 +333,7 @@ Si les politiques de votre organisation ne permettent pas l'utilisation de logic
|
||||
|
||||
Si ce projet vous est utile, bienvenue à nous donner une ⭐️ Étoile!
|
||||
|
||||
**[Documentation officielle](https://docs.newapi.pro/en/docs)** • **[Commentaires sur les problèmes](https://github.com/Calcium-Ion/new-api/issues)** • **[Dernière version](https://github.com/Calcium-Ion/new-api/releases)**
|
||||
**[Documentation officielle](https://docs.newapi.ai/en/docs)** • **[Commentaires sur les problèmes](https://github.com/Calcium-Ion/new-api/issues)** • **[Dernière version](https://github.com/Calcium-Ion/new-api/releases)**
|
||||
|
||||
<sub>Construit avec ❤️ par QuantumNous</sub>
|
||||
|
||||
|
||||
Reference in new issue
Block a user