# Déployer un LLM avec LangChain 

par Olivier Beltramo-Martin

LangChain est un framework open-source développé notamment en Python et conçu pour faciliter l’utilisation de LLM dans la création d’agents conversationnels, en particulier pour réaliser des tâches automatisées. 

Ce framework agit principalement comme une solution logicielle dont l’objectif est de standardiser et simplifier le développement d’applications qui utilisent des LLM.

La création des pipelines est facilitée grâce à une logique de chaînage, LangChain Expression Language (LCEL), qui est déclarée explicitement dans le code de sorte à faire apparaître et conserver la séquence de traitement sans avoir à la modifier directement. 

Dans un environnement virtuel préalablement initié, l’installation de LangChain et de ses modules utilisant les modèles OpenAI peut se faire grâce à pip dans un terminal comme suivant: 

$ ./bin/pip install install  langchain langchain-openai 

Ainsi, dans un environnement Python (3.11 ici) et avec une clé API OpenAI (fonctionne aussi avec les modèles Hugging Face), la création d’un agent se fait assez simplement comme suivant

#%% Importing the OpenAI models through LangChain framework

from langchain_openai import ChatOpenAI

from langchain_core.prompts import ChatPromptTemplate, PromptTemplate

from langchain_core.output_parsers import StrOutputParser

#%% Test the OpenAI model through Langchain. 

# instantiate the model

llm = ChatOpenAI(model= »gpt-3.5-turbo », api_key=OPENAI_API_KEY)

# define the system prompt

system_prompt: str = 

(« You are a data scientist tutor and you are keen on replying to students. « 

  « You provide concise responses, less than 100 tokens and use a formal tone. »

  « You also systematically refer to bibliography. »)

question = ‘What are transformers ?’

#%% Test the LLM chain

prompt = ChatPromptTemplate.from_messages(

               [(« system », system_prompt), (« user », question)]

)

chain = prompt | llm | StrOutputParser()

print(chain.invoke({« question »: question}))

Le formalisme LCEL représente une logique opérationnelle via une chaîne entre le prompt, le modèle et le traitement des données (ici StrOutputParser()) grâce au symbole pipe (|) qui permet ainsi de créer des séquences complexes de façon concise et modulaire.

# Avons-nous encore besoin de DNSSEC (opinion) 

par Pierre-Yves Dirand 

Un billet d’opinion a été publié ce jour sur le blog de l’APNIC, faisant suite à celui-ci publié l’an dernier.

L’auteur amène une question volontairement provocante concernant la nécessité et la pertinence (des points de vue sécurité et économie) de déployer DNSSEC dans un monde où TLS est devenu omniprésent.

DNSSEC permet de répondre au besoin de valider l’authenticité de la réponse à une requête DNS, de manière à empêcher toute manipulation malveillante et s’assurer qu’un client se connecte bien au serveur voulu.

L’avènement et le déploiement massif de TLS (permettant de valider l’identité du serveur auquel le client se connecte et d’établir un canal sécurisé avec ce dernier) permet à l’auteur de relativiser le besoin d’un déploiement massif de DNSSEC : s’il est possible de valider l’identité du serveur alors le fait que la réponse à la requête DNS ait été manipulée importe peu, le client refusera d’établir la connexion.

L’utilisation d’autres techniques (complémentaires) permet d’améliorer le niveau de sécurité :

  • Certification Authority Authorization (CAA) permet de spécifier quelles autorités de certification peuvent émettre des certificats pour un domaine donné.
  • DNS over TLS / HTTPS (DoT / DoH) permettent d’établir une connexion sécurisée aux serveurs DNS le prenant en charge et ainsi garantir que les requêtes et leurs réponses ne sont pas consultées / manipulées en chemin.

# Créer une application RAG avec LangChain 

par Olivier Beltramo-Martin 

LangChain permet de créer des applications en interfaçant des bases de données vectorielles avec des processus de lecture et traitement de sources, qu’elles soient issues du Web ou de documents en format .pdf par exemple. 

Le code ci-après illustre une application type RAG (Retrieval-Augmented Generation) qui permet de questionner le modèle gpt-3.5-turbo sur le contenu de l’article “Attention is all you need” publié par Google en 2017 et qui est fondateur en IA générative.

On utilise ChromaDB pour la base vectorielle, quelques installations en amont dans le terminal : 

$ ./bin/pip install install  langchain langchain-community langchainhub langchain-openai langchain-chroma bs4

# Load the contents of the document.

loader = PyPDFLoader(path_pdf)

docs = loader.load()


# Chunk the content

text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200)

splits = text_splitter.split_documents(docs)


# Store within a ChromaDB vector database

vectorstore = Chroma.from_documents(documents=splits,

embedding=OpenAIEmbeddings(api_key=OPENAI_API_KEY))


# Retrieve and generate using the relevant snippets of the blog.

retriever = vectorstore.as_retriever()

prompt = hub.pull(« rlm/rag-prompt »)

 

# Define the data processing

def format_docs(documents):

     return « \n\n ».join(doc.page_content for doc in documents)

template = «  » »Use the following pieces of context to answer the question at the end.

If you don’t know the answer, just say that you don’t know, don’t try to make up an answer.

Use three sentences maximum and keep the answer as concise as possible.”

{context}

Question: {question}

Helpful Answer: » » »


# Create the chain

custom_rag_prompt = PromptTemplate.from_template(template)

rag_chain = ({« context »: retriever | format_docs, « question »: RunnablePassthrough()}

     | custom_rag_prompt | llm | StrOutputParser())

# Infer the model

print(rag_chain.invoke(« What are Transformers ? »))

 

Cette application suit les étapes de traitement de la donnée (extraction du blog, transformation en chunk et chargement dans la base de données vectorielle) avant de créer une chaîne incluant  l’étape de recherche dans la base de donnée, le prompt, le déploiement du modèle et le formatage de la réponse. La fonction RunnablePassthrough agit commune passeplat afin de transférer la question sans modification dans le prompt après l’étape de recherche dans la base de données.

Ainsi, LangChain offre une grande capacité à créer une application RAG pour interagir avec une base documentaire privée via un modèle pré-entraîné et en conservant la confidentialité des données.

# L’impact du logiciel sur le climat, illustré par Microsoft 

par Thomas Broyer

On en a déjà parlé (dans le BOT, un article ou même une infographie), l’impact du numérique sur le climat est essentiellement matériel, mais pour autant le logiciel n’est pas neutre : pas en impact direct, mais plutôt indirectement via ses exigences matérielles.

Tristan Nitot nous résume ainsi sur son blog comment les efforts de Microsoft concernant ses émissions de CO2 ont été complètement annulés (voir renversés) par ses investissements dans l’IA, et comment la mise à mort programmée de Windows 10 l’an prochain va encore accélérer les choses en rendant du jour au lendemain un grand nombre d’ordinateurs obsolètes (on pourra objecter que si Windows 11 n’est pas compatible avec ces matériels, Linux pourra être installé, mais c’est loin d’être applicable à grande échelle : est-il besoin de rappeler que Windows XP reste encore massivement utilisé aujourd’hui dans les milieux professionnels, 15 ans après la fin du support standard, 10 ans après la fin du support étendu ? …et alors même qu’il suffit de quelques minutes pour qu’il soit infecté par un malware après l’avoir connecté à Internet).