66 lines
2.2 KiB
Python
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()) |