Présentation des produits
Aivory est une plate-forme de conversation multi-modèles AI open-source et auto-hébergée : l’arrière est un service de processus unique Go 1.24 et l’avant est une application de page unique React 19, tous deux emballés dans le même conteneur (SPA et React). /api Dans le même domaine, écoutez :8787 Vous pouvez l’utiliser sur votre serveur. docker compose up -d Obtenez un bureau complet d'IA : Claude, GPT, Gemini et n'importe quel modèle compatible OpenAI, sortie en flux, appel à outils multiples, Python bac à sable, base de connaissances RAG, Deep Research, espace de travail d'équipe, génération d'images et console d'administration complète.

| Projets | Expliquer |
|---|---|
| Version actuelle | 2.2.0 |
| Autorisation Open Source | Apache 2.0 |
| Un entrepôt de code | github.com/hjxwz123/Aivory |
| Miroir officiel | ghcr.io/hjxwz123/aivory-app、ghcr.io/hjxwz123/aivory-sandbox、ghcr.io/hjxwz123/aivory-sandbox-sidecar |
| Porte de service | Dans le conteneur 8787 (Production d'un hébergeur de cartographie par défaut Compose 80) |
| La dépendance | postgres:16-alpine / redis:7-alpine / qdrant:v1.12.4 (toutes les options sont disponibles, voir ci-dessous) |
| Technique Stage | Go 1.24 + React 19 + TypeScript 5 + Tailwind 4 |
Si vous disposez d’un serveur doté de Docker, vous pouvez passer directement àDébut rapide Le déploiement après l’achèvement Première opération Créer un compte d'administrateur et configurer le premier modèle.
Qu’est-ce qui est différent avec Aivory ?
La plupart des chats auto-déployés ne sont qu’une couche mince d’agents : ils redirigent les demandes vers l’API modèle, puis repoussent le texte en flux. Aivory va plus loin dans plusieurs domaines qui affectent réellement l’usage quotidien :
- ** C’est une véritable ligne d’eau. ** Modèle : jusqu'à 48 appels d'outils (12 cycles de fournisseur) dans un seul message d'utilisateur, les outils de différents domaines peuvent être séries librement.Le produit d'un outil est automatiquement stocké dans le système de fichiers bac à sable pour une lecture directe par l'outil suivant.
- ** La conversation est un arbre, pas un journal linéaire ** Modifiez l'historique des questions, réinitialisez les réponses, changez de modèle et réessayez, ouvrant une nouvelle branche à chaque opération.
< 2/3 >Lorsque les contrôles sont changés, la base de données conserve la structure en forme d'arbre complète. - ** Les modifications apportées à la console d'administration entrent en vigueur ** Le canal, le modèle, les compétences, les utilisateurs et les paramètres du système fonctionnent tous dans l'interface utilisateur de gestion, et la prochaine demande est immédiatement en vigueur après l'enregistrement, sans qu'il soit nécessaire de redémarrer le processus. la clé API du canal est présente dans la base de données et non dans les variables environnementales, et la clé de rotation ne nécessite pas de connexion à l'hôte.
Capacité centrale
Plusieurs modèles de chats
Dans un ensemble d'interfaces, il est possible de passer de Claude / GPT / Gemini à n'importe quel endpoint compatible avec OpenAI. L'administrateur accède à la dimension « canal » en arrière-plan (type: Anthropic / OpenAI / Gemini / OpenAI compatible, URL de base + clé API), puis crée une entrée de modèle visible pour l'utilisateur sur la page « modèle » pour configurer le nom d'affichage, l'icône, le prix, les capacités de vision et les modes d'outils (native / prompt / none Le même type peut être configuré pour plusieurs canaux.
Sélecteur de modèle en haut affiche le filtrage de fichier d'étiquette défini par l'administrateur (tels que « Rapide », « Multimodal » et « Programmable »), la sélection de l'étiquette est une liste étroite; chaque message enregistre le modèle utilisé réellement. Canal et modèle。
Exportation et processus de réflexion
Toutes les demandes de modèles sont diffusées en direct et reçues en temps réel via SSE : sortie de machine à écrire, rendu Markdown, code lumineux, formule LaTeX. Prise en charge du processus de pensée, chaîne de réflexion du modèle de raisonnement et partition de réponse officielle. Après la configuration de Redis, le flux de récupération est également pris en charge : renouvellement de la page sans perte de réponse.
Appel à outils multiples en temps réel
modèle décide automatiquement quels outils appeler, combien de tours ajuster, tout le processus est poussé en temps réel par un événement SSE, et les utilisateurs peuvent voir ce que chaque étape fait. huit outils de plate-forme personnalisés sont intégrés:
| outils | fonctionnalité |
|---|---|
web_search | Rechercher l'intégralité du Web à l'aide de SearXNG (auto-déploiement) ou d'un arrière-plan compatible Serper |
web_fetch | Téléchargez l'URL spécifiée et extrayez le texte pour respecter le filtrage de sécurité robots.txt et du contenu |
fetch_image | Téléchargez les photos sur bac à sable /workspace/uploads/ Utilisation du code de suivi. |
python_execute | Exécutez le code Python dans un bac à sable isolé pour une bibliothèque standard complète, une installation de pip et un I/O de fichiers |
image_generate | Appeler un modèle d'image configuré pour générer des images et les enregistrer en tant que produit |
search_knowledge_base | Exécution d'une recherche mixte sur la base de connaissances suspendue (fusion de vecteur intense + BM25, RRF) |
save_memory | Écrivez dans la mémoire de l'utilisateur, la conversation suivante est injectée automatiquement |
use_skill | Exécution des compétences prédéfinies par l'administrateur (modèle de mot de passe + paquet d'actifs) |
Budget d'appel d'outil unique (abus et coûts hors de contrôle) :
| outils | Plafond du modèle ordinaire | Modèle de recherche profonde |
|---|---|---|
web_search | 16 | 40 |
web_fetch | 12 | 25 |
fetch_image | 16 | 12 |
image_generate | 8 | 4 |
python_execute | 16 | 8 |
| ** Tous les outils au total ** | 48 | 150 |
Le mécanisme clé est ** Réservation automatique des documents **: Chaque fois python_execute Avant l’exécution, les fichiers téléchargés par les utilisateurs dans cette conversation, image_generate Les images générées, les actifs de compétences disponibles pour les utilisateurs, sont automatiquement situés dans le système de fichiers bac à sable. Par conséquent, les flux de travail inter-outils tels que « analyser data.csv, dessiner un graphique en colonne, puis le faire en PPT » peuvent être envoyés de bout en bout et l'utilisateur n'a pas besoin d'opérations intermédiaires.
Pour les modèles qui ne prennent pas en charge l'appel de fonction native, vous pouvez retourner au protocole d'empilage de mots-clés selon la configuration de l'administrateur (dans le mode de mots-clés, le cycle de fournisseur est limité à 6).
Recherche profonde
Un moteur de recherche multi-roues indépendant : M. model réalise des programmes de recherche, effectue jusqu’à 40 recherches sur le web et 25 balayages de page en parallèle, effectue des évaluations croisées des affirmations, produit un rapport d’examen complet avec des références et un panneau de progrès en temps réel. Recherche profonde。
Python bac à sable
Chaque conversation dispose d’un conteneur bac à sable (services HTTP sidecar) indépendant :
- La session est conservée durablement pendant le cycle de vie de la conversation, les messages de suivi peuvent lire les fichiers écrits au cours des précédents tours; le conteneur est recyclé pour reconstituer automatiquement la session, réenregistrer les fichiers et réessayer de manière transparente, sans que l'utilisateur ne le perçoive.
- Exécution de code (stdout / stderr / anormal) en streaming en temps réel; écriture
/workspace/output/Les fichiers deviennent des produits, les cartes suivantes apparaissent sous forme de carte dans l'interface de chat. - Bac à sable ** Pas de réseau ** (
SANDBOX_NETWORK=noneLorsque les données de réseau sont nécessairesweb_fetch/fetch_imageLe bac à sable s’installe à l’extérieur. - Si vous n'avez pas d'adresse bac à sable,
python_executeEntrez dans le mode sécurisé et exécutez uniquement des arithmétiques simples, adaptées au développement de débogage et de démonstration.
Détail Python bac à sable与Déploiement de bac à sable。
Base de connaissances et RAG
Chaque compte peut créer plusieurs bases de connaissances, supporter le téléchargement de texte / PDF / DOCX / XLSX / image et suivre l'état du document (pending → parsing → embedding → ready).
- ** Coupe de niveau ** Small-to-big, environ 12% de superposition, perception de la structure (reservation de blocs de code, de tableaux, de formules entières); chaque sous-groupe porte une tranche de titre de la racine à la position actuelle.
- ** Recherche mixte **: Qdrant Intensive Vector + BM25 Recherche de mots clés, RRF fusion ordre, Top-K dynamique par similitude, avec référence pour répondre.
- ** Rechercher la route **: modèle de tâche Classification de la requête avant de la récupérer
retrieve/full_doc/noneEt réécrire les requêtes, injecter directement le texte intégral dans les petits documents, sans gaspiller les frais de récupération. - MinerU OCR: PDF avec la couche de texte résolu localement en millisecondes; scanner des PDF, DOCX, PPTX, XLSX, images pour prendre MinerU Cloud OCR. Les fichiers originaux sont stockés dans votre propre S3 / Ali Cloud OSS baril, MinerU ne reçoit que l'URL de pré-signature, les crédits ne sortent pas du domaine.
Lorsque Qdrant n'est pas configuré, le RAG dégrade automatiquement la version complète et la fonctionnalité reste disponible. Base de connaissances。
Espace de travail d’équipe
Créer un espace de travail dans le menu d'accueil et envoyer un lien d'invitation pour que vos collègues puissent rejoindre l'espace. Les conversations, les projets et la base de connaissances sont partagés entre tous les membres et sont complètement isolés de l'espace personnel de chacun. ** Qui envoie qui paie **; la bulle appartient à l'auteur (moi-même à droite, les autres avec l'IA à gauche, avec le surnom de tête); les créateurs peuvent frapper les personnes, réinitialiser les liens d'invitation et supprimer l'espace entier. Pour des raisons de confidentialité, la mémoire de conversation est complètement désactivée dans l'espace de travail partagé. Espace de travail d’équipe。
Images générées
Modes de dessin indépendants : les mots-clés sont colorés avec le modèle de tâche, puis les crédits sont comptabilisés par modèle d'image ; l'administrateur maintient la bibliothèque de style prédéfini ; les résultats sont générés dans une galerie personnelle qui prend en charge les flux de travail de modification et de variation basés sur des graphiques de référence. Le nombre de pages générées par utilisateur par jour est limité (voir 30 par défaut). Images générées。
Console d’administration
| Module | Gestion du contenu |
|---|---|
| Le canal | Base URL + API key pour chaque fournisseur, le même type de multi-channel |
| Modèle | Démarrage, nom d'affichage, fenêtre contextuelle, prix, contrôle de l'interface utilisateur par modèle, commutateur d'exposition Deep Research, étiquettes |
| Étiquette modèle | Créer des étiquettes et les attribuer au modèle, rendu comme un chip de filtrage en haut du sélecteur |
| compétences | Modèle de mot de passe + paquet d'actifs use_skill Appel à outils |
| Utilisateur | Rôles, groupes d'utilisateurs, blocage en temps réel, quotas et crédits |
| Espace de travail | Déroulez les membres / conversation / projet / base de connaissances, conversation pour afficher l'intégralité des enregistrements |
| Usage quantité | Rapports par utilisateur, modèle et utilisation (chats / tâches / images / intégrés) |
| mise en place | adresse bac à sable, identifiants S3/OSS, arrière-plan de recherche, liste blanche de téléchargement, outils de désactivation, stratégies de compression, etc. |
| Sauvegarde et migration | Importation d’exportation, importation d’exportation, maintenance des vecteurs |
| Inspecteur bac à sable | Afficher et nettoyer les fichiers de l'espace de travail bac à sable pour la conversation spécifiée |
Toutes les modifications sont sauvegardées et ne nécessitent pas de redémarrage. Console d'administration Commencer à comprendre.
Sauvegarde et migration
console d'administration Exportation d'un bouton de sauvegarde complète : un seul zip contient manifest, un JSONL (motor neutre) par table, un point vectoriel Qdrant pour le téléchargement avec les fichiers de produit et la collection. La grande bibliothèque effectue des tâches d'exportation asymétriques. ** Moteur de base de données **: Les sauvegardes SQLite peuvent être importées dans les déploiements Postgres et vice versa. Une configuration légère d’exportation/importation permet de transférer uniquement des actifs de gestion tels que canal, modèle, compétences et autres, sans déplacer les données des utilisateurs. Sauvegarde et migration。
PWA et multilinguisme
- ** Installer le PWA ** Aide à ajouter à l'écran de bureau / écran principal, l'interface mobile est complètement redémarrée.
- ** Interface cinq langues **: Chinois, Chinois, Anglais, Japonais, Français, couvrant chaque page, boîte conversation, Toast et informations d'erreur, y compris console d'administration.
- Deux thèmes clairs et un système de conception éditoriale.
Plus de capacités
| Capacité | Expliquer |
|---|---|
| Arbre de Conversation | Redémarrer / réessayer la section réelle, < N/M >Échanger et ne pas interrompre le flux de route; diagramme de nœud d'enregistrement à l'échelle glissante; long conversation Ligne de prévisualisation à droite à l'extrémité secondaire |
| Vérification de plusieurs modèles (Verify) | Deuxième modèle Faites des vérifications de faits contrastées sur les réponses, la référence de sortie par phrase avec des findings structurés et des badges de confiance de niveau sévère |
| Mémoire de conversation | Chaque tour extrait les faits de l'utilisateur de manière asynchrone et détermine automatiquement l'effet de la mémoire ancienne, l'utilisateur peut gérer sur une page dédiée |
| Projets et compétences | Conteneur de projet (bibliothèque partagée + commandes au niveau du projet); chargement progressif du pack de compétences d'administrateur en cours d'exécution |
| Compression en bas de page. | Retenez le dernier N rouleau original, les rouleaux antérieurs par modèle de tâche Résumé déroulé, préfixe cache-friendly, sans modifier l'archive originale |
| Crédits et groupes d'utilisateurs | Tarifs temporaires + crédits permanents, modèles par quota, prévisualisation des frais avant l'envoi, code d'échange |
| Base de sécurité | API key en arrière-plan, signature HMAC par requête, partage/invitation de jetons de capacité, prévisualisation de bac à sable HTML, téléchargement d'extensions et liste blanche MIME, limite complète de vitesse |
Vue générale de la structure
Le mode de production d’Aivory est composé de cinq conteneurs : app Un seul conteneur héberge simultanément le spa frontal et /api (Comme source, pas de problème CORS), le reste sont les données et les composants exécutifs.
| Conteneur | Miroir | Rôle |
|---|---|---|
app | ghcr.io/hjxwz123/aivory-app | Go HTTP + SSE Service, SPA front-end hébergé à la source |
postgres | postgres:16-alpine | Utilisateurs, conversation, base de connaissances, paramètres et enregistrements d’utilisation |
redis | redis:7-alpine | Cache, comptage de fréquence limité, cohérence et récupération de flux |
qdrant | qdrant/qdrant:v1.12.4 | Recherche de RAG |
sandbox | ghcr.io/hjxwz123/aivory-sandbox-sidecar | Exécution de code bac à sable (uniquement en interne) |
Redis, Qdrant, bac à sable sont tous des composants optionnels : non compatibles REDIS_URL Le cache et la cohorte utilisés au cours du processus; ne méritent pas QDRANT_URL Le RAG a été complètement injecté ; il ne mérite pas de revenir. SANDBOX_BASE_URL Le code temporel est exécuté en mode sécurisé. La base de données par défaut peut même être utilisée avec SQLite intégré, voir plus en détail Modèle SQLite。
Pourquoi choisir Aivory
Données autonomes
Toutes les données tombent sur votre propre infrastructure : bases de données, bibliothèques vectorielles, téléchargements de fichiers et de produits (enchaînements liés à l’hôte). DATA_DIR La clé modèle de l'API est présente dans la base de données et n'est jamais exposée au navigateur par l'intermédiaire d'un agent en arrière-plan; dans le cadre d'un scénario OCR de document, MinerU ne reçoit que l'URL de pré-signature stockée par votre objet, les identifiants ne sortent pas du domaine; la mémoire de conversation est automatiquement désactivée dans l'espace de travail partagé.
Commande de déploiement
docker compose up -d Le déploiement est terminé et les cinq conteneurs sont prêts. /api Pour savoir quel nom de domaine utiliser, il n’est pas nécessaire de le configurer. PUBLIC_ORIGIN Ou CORS ; les comptes d’administrateur sont créés par la page de démarrage plutôt que par la configuration de la variable d’environnement ; presque toutes les configurations (canal, modèle, arrière-plan de recherche, listes blanches de téléchargement, etc.) sont ensuite modifiées en temps réel par console d’administration pour être sauvegardées et ne nécessitent pas de redémarrage.
Moteur neutre
La sauvegarde complète est un zip auto-décrit : une JSONL par table, indépendante d'un moteur de base de données spécifique. Dès que vous commencez aujourd'hui avec SQLite, vous pouvez importer la même sauvegarde dans le déploiement Postgres demain (et vice versa) et traiter automatiquement la séquence avec les clés externes ; le vecteur Qdrant est porté avec la sauvegarde, et il est également possible de reconstruire ultérieurement le texte partiel stocké dans la base de données. Vos données ne seront jamais verrouillées dans un moteur ou une machine.
Prochaine étape
| Objectif | La page |
|---|---|
| Déploiement d'un Aivory en 5 minutes | Début rapide |
| Créer un administrateur et configurer le premier modèle | Première opération |
| Déploiement de Docker Compose | Déploiement de Docker Compose |
| HTTPS et proxy inverse | Proxy inverse / Cloudflare |
| Comprendre les principales variables environnementales | Configuration centrale / Déploiement progressif |
| Fonctions de conversation quotidienne. | Conversation fonctionnelle |
| Console d'administration | Console d'administration |
| Vérification rapide du doute | Questions fréquentes |