L'assistant SI à l'intérieur de KamoCRM lit les propres documents d'un locataire avant de répondre.Faire ce travail signifiait exécuter toute la chaîne nous-mêmes: un serveur de modèle, un modèle d'intégration, une base de données vectorielle, la reconnaissance vocale, la synthèse vocale et la traduction automatique, le tout à l'intérieur de notre cluster, le tout sur des données qui ne le quittent jamais.
| Mesure | Valeur | Source | Mesurées |
|---|---|---|---|
| Services d'inférence et de parole auto-hébergés | 6 (model server, embedding model, vector database, speech recognition, speech synthesis, machine translation) | kubectl get deployments,statefulsets --all-namespaces | |
| Services de récupération et de vecteurs dédiés dans la plateforme | 3 (RAG service, vector service, embedding model) | kubectl get deployments -n kamo | |
| Langues desservies par le pipeline de traduction auto-hébergé | 22 | messages/*.json in the marketing site repository | |
| Taux d'erreur de reconnaissance optique de caractères | 0.180 CER | ocrservice evaluation run |
Quel bâtiment il nous a appris
Appeler une API de modèle hébergée est un travail d'un après-midi, et nous le faisons aussi, lorsque c'est la bonne réponse. Exécuter vous-même l'inférence est une discipline différente, et c'est ce que les clients demandent au moment où leurs données sont sensibles - santé, finance, juridique, tout ce qui est soumis à une obligation de résidence des données.
La récupération est le point de départ de ces systèmes, et elle est généralement peu glamour. Décomposer les documents de façon à ce qu'un passage récupéré soit autonome. Décider ce qu'une requête signifie même si l'utilisateur a tapé quatre mots. Faire en sorte que la récupération respecte les permissions, de sorte qu'un assistant ne puisse pas répondre à partir d'un document que la personne qui demande n'est pas autorisée à lire — ce qui est facile à faire, et le genre de faute qui finit dans une lettre du régulateur plutôt que dans un suivi des bogues. Notre base de connaissances a des niveaux de visibilité que la couche de récupération doit respecter exactement comme les lectures face à l'humain, à deux endroits distincts qui doivent être en accord.
Nous exécutons également des reconnaissances et des synthèses vocales, ainsi que des traductions automatiques dans vingt-deux langues. Le pipeline de traduction nous a appris le plus, principalement en échouant silencieusement : une mise à jour en masse exécutée sans transaction a réussi sur papier et n’a rien écrit pour vingt et une langues, et comme rien n’a été rejeté, personne ne l’a remarqué pendant longtemps.
Construit avec
- Ollama
- Qdrant
- Whisper
- Coqui TTS
- LibreTranslate
- Python
- Java
- Spring Boot
Ce qui nous qualifie
Dites-nous ce que vous essayez de faire
Une courte conversation est généralement suffisante pour savoir si nous sommes les bonnes personnes, si nous ne le sommes pas, nous le dirons et vous indiquerons quelque part mieux.
