Files
ENI-PythonAdvanced_09/demo_llm.py
2025-12-17 09:45:23 +01:00

66 lines
2.2 KiB
Python

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())