import asyncio from pydantic import SecretStr from pydantic_settings import BaseSettings, SettingsConfigDict from langchain_openai import ChatOpenAI # --- Étape 1 : Configuration --- # Paramètres de connexion au LLM. class Settings(BaseSettings): """Charge les variables d'environnement depuis variables d'environnement ou un fichier .env.""" model_config = SettingsConfigDict( env_file=".env", env_file_encoding="utf-8", case_sensitive=True ) # Paramètres de connexion au serveur LLM (LM Studio) LLM_CHAT_SERVER_BASE_URL: str = "http://127.0.0.1:1234/v1" LLM_CHAT_MODEL: str = "meta-llama-3.1-8b-instruct" LLM_CHAT_TEMPERATURE: float = 0.7 # Rendre le LLM un peu plus créatif LLM_CHAT_API_KEY: SecretStr = "not-needed" # attention : en production, ne pas hardcoder l'API key ! # On instancie la configuration settings = Settings() # --- Étape 2 : Initialisation du LLM --- # On crée un "client" qui sait comment communiquer avec notre LLM. print(f"Connexion au modèle '{settings.LLM_CHAT_MODEL}'...") llm = ChatOpenAI( model=settings.LLM_CHAT_MODEL, base_url=settings.LLM_CHAT_SERVER_BASE_URL, temperature=settings.LLM_CHAT_TEMPERATURE, api_key=settings.LLM_CHAT_API_KEY ) print("Connecté !") # --- Étape 3 : La fonction principale asynchrone --- async def main(): """Fonction principale pour poser une question au LLM.""" # On définit le prompt : c'est la question/instruction que l'on donne à l'IA. prompt = "Raconte-moi une blague courte sur un développeur Python." print("\n-------------------------------------------") print(f" Envoi du prompt au LLM :") print(f" '{prompt}'") print("-------------------------------------------") # `ainvoke` envoie le prompt au LLM et attend sa réponse de manière asynchrone. # C'est la fonction la plus importante à comprendre. response = await llm.ainvoke(prompt) # La réponse du LLM est un objet. Le texte généré se trouve dans l'attribut `content`. ai_message = response.content print("\n Réponse du LLM :") print(f" '{ai_message}'") print("-------------------------------------------\n") # --- Point d'entrée du script --- if __name__ == "__main__": asyncio.run(main())