Les chatbots sont à la mode ces derniers temps, et vous pouvez désormais les créer facilement en téléchargeant des solutions comme OpenWebUI, en les connectant à Ollama ou à n'importe quelle API compatible avec OpenAI, en choisissant votre modèle de langage favori, puis en les exécutant. Cela ne prend que quelques minutes et c'est fait.
Mais construire des chatbots n'est pas suffisant, vous voulez très probablement construire un chatbot sur vos propres données. L'écosystème logiciel autour de l'IA et du chatbot se développe chaque jour et permet de créer un chatbot qui offre à vos utilisateurs de discuter avec des données stockées dans votre base de données.
Grâce à des bibliothèques comme LangChain, ChainLit et, bien sûr, Azure SQL, Davide Mauri, Principal Product Manager d'Azure SQL, présente comment construire un chatbot sur vos propres données.
Pour commencer, ces trois éléments sont la seule chose dont vous avez besoin :
- Langchain : un cadre pour le développement d'applications basées sur de grands modèles de langage (LLM).
- Chainlit : un framework Python asynchrone open-source qui permet aux développeurs de construire des applications évolutives d'IA conversationnelle ou agentique.
- Azure SQL : ajoute la prise en charge des vecteurs en tant que fonctionnalité principale du moteur.
Vous pouvez éventuellement utiliser Azure Functions pour que les données ajoutées ou mises à jour dans la base de données soient automatiquement traitées pour être utilisées avec des modèles d'IA, si vous aimez une approche de type "change-feed". L'architecture finale, simple et élégante, ressemblera à ce qui suit :
Partir de la base de données
Il suffirait de moins d'une heure pour commencer à avoir un chatbot entièrement fonctionnel sur vos propres données. Pour l'aspect des données, commencer par la fonctionnalité qui rend cette capacité possible : le type vector nouvellement introduit et la fonction vector_distance associée :
Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 | declare @qv vector(1536) exec web.get_embedding 'RAG on your own data', @qv output select top(5) se.id as session_id, vector_distance('cosine', se.[embeddings], @qv) as distance from web.sessions se order by distance |
Intégration avec LangChain
L'étape suivante consiste à trouver comment intégrer ce code dans LangChain, qui orchestre le modèle RAG. Grâce au LCEL (Langchain Expression Language), il est assez facile de définir l'invite et de l'envoyer au LLM avec des informations contextuelles supplémentaires extraites de la base de données :
Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | prompt = ChatPromptTemplate.from_messages([ ( "ai", """ You are a system assistant who helps users find the right session to watch from the conference, based off the sessions that are provided to you. Sessions will be provided in an assistant message in the format of `title|abstract|speakers|start-time|end-time`. You can use only the provided session list to help you answer the user's question. If the user ask a question that is not related to the provided sessions, you can respond with a message that you can't help with that question. Your aswer must have the session title, a very short summary of the abstract, the speakers, the start time, and the end time. """ ), ( "human", """ The sessions available at the conference are the following: {sessions} """ ), ( "human", "{question}" ) ]) # Use an agent retriever to get similar sessions retriever = RunnableLambda(get_similar_sessions, name="GetSimilarSessions").bind() runnable = {"sessions": retriever, "question": RunnablePassthrough()} | prompt | openai | StrOutputParser() |
En quelques lignes de code, l'invite a été défini, ainsi que l'outil utilisé par LangChain pour fournir des données contextuelles supplémentaires au LLM et la manière d'injecter dans l'invite ces données contextuelles supplémentaires. Pour le code de get_similar_session, il a utilisé une procédure stockée au lieu d'un SQL ad-hoc car cela rend la solution plus propre, plus sûre et plus facile à maintenir.
Ajouter ChainLit
La dernière pièce manquante est l'intégration du travail effectué avec Chainlit, qui a un support natif pour LangChain, via la fonction LangchainCallbackHandler. En gros, l'intégration se résume à deux points :
- Initialiser la chaîne Langchain et la rendre utilisable avant le début du chat
- Lorsque les utilisateurs envoient des messages, récupérer leur contenu et le transmettre à la chaîne Langchain pour traitement, et renvoyer le résultat.
Cela signifie que l'intégration se fait dans deux méthodes seulement : on_chat_start et on_message. C'est simple et direct.
Une fois que c'est fait, le projet est terminé ! Exécutez le script Python et vous serez prêt à partir ! Bien sûr, ce n'est qu'un point de départ. Vous voudrez sûrement construire une chaîne LCEL plus complète et plus complexe pour gérer les demandes et les situations les plus diverses, et la limite n'est plus que votre imagination !
Source : Davide Mauri, Principal Product Manager, Microsoft
Et vous ?
Pensez-vous que cette présentation est crédible ou pertinente ?
Quel est votre avis sur le sujet ?
Voir aussi :
Cloud Azure, Office 365, cybersécurité, partenariats, support, certifications, formations, bootcamps, comment Microsoft annonce l'intelligence artificielle à toutes les sauces
OpenAI publie un outil de réglage fin pour personnaliser GPT-4o avec des ensembles de données personnalisés, afin d'obtenir des performances plus élevées à moindre coût pour les cas d'utilisation spécifiques
Hugging Face lance un fabricant d'assistants IA open source pour rivaliser avec les GPT personnalisés d'OpenAI. L'outil est gratuit et permet de choisir parmi plusieurs LLM open source