Construisez un chatbot sur vos propres données en 1 heure avec Azure SQL, Langchain et Chainlit, par Davide Mauri de Microsoft Azure SQL
Construisez un chatbot sur vos propres données grâce à des bibliothèques comme LangChain, ChainLit et Azure SQL. Davide Mauri présente une méthode pour construire un chatbot entièrement fonctionnel en seulement 1 heure avec une architecture finale simple et élégante.
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 :
Comme vous pouvez le voir, le code est simple. Il transforme le texte fourni en un embedding en appelant le point de terminaison OpenAI, via la procédure stockée get_embedding, puis utilise le vecteur retourné pour trouver tous les vecteurs similaires dans le tableau d'échantillons. Dans ce cas, c'est un tableau contenant des données relatives aux sessions de conférences.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 :
La ligne où runnable est défini est l'endroit où vous pouvez voir LCEL en action. Il s'assure que les espaces réservés comme {sessions} sont remplacés par des données réelles avant d'être envoyés au LLM (OpenAI dans l'exemple). Des données réelles qui sont récupérées en utilisant le retriever défini, qui à son tour appelle la fonction get_similar_session qui n'est rien d'autre qu'une enveloppe autour du code SQL décrit précédemment.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
Partager