Aller au contenu principal

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.

Aivory chat with tool calls and reasoning

ProjetsExpliquer
Version actuelle2.2.0
Autorisation Open SourceApache 2.0
Un entrepôt de codegithub.com/hjxwz123/Aivory
Miroir officielghcr.io/hjxwz123/aivory-appghcr.io/hjxwz123/aivory-sandboxghcr.io/hjxwz123/aivory-sandbox-sidecar
Porte de serviceDans le conteneur 8787 (Production d'un hébergeur de cartographie par défaut Compose 80)
La dépendancepostgres:16-alpine / redis:7-alpine / qdrant:v1.12.4 (toutes les options sont disponibles, voir ci-dessous)
Technique StageGo 1.24 + React 19 + TypeScript 5 + Tailwind 4
Cinq minutes de main.

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:

outilsfonctionnalité
web_searchRechercher l'intégralité du Web à l'aide de SearXNG (auto-déploiement) ou d'un arrière-plan compatible Serper
web_fetchTéléchargez l'URL spécifiée et extrayez le texte pour respecter le filtrage de sécurité robots.txt et du contenu
fetch_imageTéléchargez les photos sur bac à sable /workspace/uploads/ Utilisation du code de suivi.
python_executeExé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_generateAppeler un modèle d'image configuré pour générer des images et les enregistrer en tant que produit
search_knowledge_baseExé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_skillExé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) :

outilsPlafond du modèle ordinaireModèle de recherche profonde
web_search1640
web_fetch1225
fetch_image1612
image_generate84
python_execute168
** Tous les outils au total **48150

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=none Lorsque les données de réseau sont nécessaires web_fetch / fetch_image Le bac à sable s’installe à l’extérieur.
  • Si vous n'avez pas d'adresse bac à sable, python_execute Entrez 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 à sableDé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 / none Et 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

ModuleGestion du contenu
Le canalBase URL + API key pour chaque fournisseur, le même type de multi-channel
ModèleDé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èleCréer des étiquettes et les attribuer au modèle, rendu comme un chip de filtrage en haut du sélecteur
compétencesModèle de mot de passe + paquet d'actifs use_skill Appel à outils
UtilisateurRôles, groupes d'utilisateurs, blocage en temps réel, quotas et crédits
Espace de travailDé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 placeadresse 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 migrationImportation d’exportation, importation d’exportation, maintenance des vecteurs
Inspecteur bac à sableAfficher 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 ConversationRedé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 conversationChaque 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étencesConteneur 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'utilisateursTarifs 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.

ConteneurMiroirRôle
appghcr.io/hjxwz123/aivory-appGo HTTP + SSE Service, SPA front-end hébergé à la source
postgrespostgres:16-alpineUtilisateurs, conversation, base de connaissances, paramètres et enregistrements d’utilisation
redisredis:7-alpineCache, comptage de fréquence limité, cohérence et récupération de flux
qdrantqdrant/qdrant:v1.12.4Recherche de RAG
sandboxghcr.io/hjxwz123/aivory-sandbox-sidecarExécution de code bac à sable (uniquement en interne)
Tous les composants peuvent être coupés.

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

ObjectifLa page
Déploiement d'un Aivory en 5 minutesDébut rapide
Créer un administrateur et configurer le premier modèlePremière opération
Déploiement de Docker ComposeDéploiement de Docker Compose
HTTPS et proxy inverseProxy inverse / Cloudflare
Comprendre les principales variables environnementalesConfiguration centrale / Déploiement progressif
Fonctions de conversation quotidienne.Conversation fonctionnelle
Console d'administrationConsole d'administration
Vérification rapide du douteQuestions fréquentes